Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Turbo码先生
redis
提交
cea421a0
R
redis
项目概览
Turbo码先生
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
cea421a0
编写于
9月 27, 2017
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Streams: specify better how the master enty works.
上级
7d0d9693
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
1 deletion
+25
-1
src/t_stream.c
src/t_stream.c
+25
-1
未找到文件。
src/t_stream.c
浏览文件 @
cea421a0
...
@@ -177,7 +177,29 @@ int streamAppendItem(stream *s, robj **argv, int numfields, streamID *added_id,
...
@@ -177,7 +177,29 @@ int streamAppendItem(stream *s, robj **argv, int numfields, streamID *added_id,
uint64_t
rax_key
[
2
];
/* Key in the radix tree containing the listpack.*/
uint64_t
rax_key
[
2
];
/* Key in the radix tree containing the listpack.*/
streamID
master_id
;
/* ID of the master entry in the listpack. */
streamID
master_id
;
/* ID of the master entry in the listpack. */
/* Create a new listpack and radix tree node if needed. */
/* Create a new listpack and radix tree node if needed. Note that when
* a new listpack is created, we populate it with a "master entry". This
* is just an ID and a set of fields that is taken as refernce in order
* to compress the stream entries that we'll add inside the listpack.
*
* Note that while we use the first added entry ID and fields to create
* the master entry, the first added entry is NOT represented in the master
* entry, which is a stand alone object. But of course, the first entry
* will compress well because it's used as reference.
*
* The master entry is composed of just: an ID and a set of fields, like:
*
* +------------+------------+---------+---------+--/--+---------+
* | 128 bit ID | num-fields | field_1 | field_2 | ... | field_N |
* +------------+------------+---------+---------+--/--+---------+
*
* The real entries will be encoded with an ID that is just the
* millisecond and sequence difference compared to the master entry
* (delta encoding), and if the fields of the entry are the same as
* the master enty fields, the entry flags will specify this fact
* and the entry fields and number of fields will be omitted (see later
* in the code of this function). */
int
flags
=
STREAM_ITEM_FLAG_NONE
;
int
flags
=
STREAM_ITEM_FLAG_NONE
;
if
(
lp
==
NULL
||
lp_bytes
>
STREAM_BYTES_PER_LISTPACK
)
{
if
(
lp
==
NULL
||
lp_bytes
>
STREAM_BYTES_PER_LISTPACK
)
{
master_id
=
id
;
master_id
=
id
;
...
@@ -221,6 +243,8 @@ int streamAppendItem(stream *s, robj **argv, int numfields, streamID *added_id,
...
@@ -221,6 +243,8 @@ int streamAppendItem(stream *s, robj **argv, int numfields, streamID *added_id,
memcmp
(
e
,
field
,
e_len
)
!=
0
)
break
;
memcmp
(
e
,
field
,
e_len
)
!=
0
)
break
;
lp_ele
=
lpNext
(
lp
,
lp_ele
);
lp_ele
=
lpNext
(
lp
,
lp_ele
);
}
}
/* All fields are the same! We can compress the field names
* setting a single bit in the flags. */
if
(
i
==
master_fields_count
)
flags
|=
STREAM_ITEM_FLAG_SAMEFIELDS
;
if
(
i
==
master_fields_count
)
flags
|=
STREAM_ITEM_FLAG_SAMEFIELDS
;
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录