Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
redis
提交
f2d9f50f
R
redis
项目概览
别团等shy哥发育
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
f2d9f50f
编写于
1月 12, 2010
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more non blocking VM changes
上级
d663729a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
26 addition
and
13 deletion
+26
-13
redis.c
redis.c
+26
-13
未找到文件。
redis.c
浏览文件 @
f2d9f50f
...
...
@@ -949,6 +949,7 @@ static unsigned int dictEncObjHash(const void *key) {
return
hash
;
}
/* Sets type and expires */
static
dictType
setDictType
=
{
dictEncObjHash
,
/* hash function */
NULL
,
/* key dup */
...
...
@@ -958,6 +959,7 @@ static dictType setDictType = {
NULL
/* val destructor */
};
/* Sorted sets hash (note: a skiplist is used in addition to the hash table) */
static
dictType
zsetDictType
=
{
dictEncObjHash
,
/* hash function */
NULL
,
/* key dup */
...
...
@@ -967,6 +969,7 @@ static dictType zsetDictType = {
dictVanillaFree
/* val destructor of malloc(sizeof(double)) */
};
/* Db->dict */
static
dictType
hashDictType
=
{
dictObjHash
,
/* hash function */
NULL
,
/* key dup */
...
...
@@ -976,6 +979,16 @@ static dictType hashDictType = {
dictRedisObjectDestructor
/* val destructor */
};
/* Db->expires */
static
dictType
keyptrDictType
=
{
dictObjHash
,
/* hash function */
NULL
,
/* key dup */
NULL
,
/* val dup */
dictObjKeyCompare
,
/* key compare */
dictRedisObjectDestructor
,
/* key destructor */
NULL
/* val destructor */
};
/* Keylist hash table type has unencoded redis objects as keys and
* lists as values. It's used for blocking operations (BLPOP) */
static
dictType
keylistDictType
=
{
...
...
@@ -1402,7 +1415,7 @@ static void initServer() {
}
for
(
j
=
0
;
j
<
server
.
dbnum
;
j
++
)
{
server
.
db
[
j
].
dict
=
dictCreate
(
&
hashDictType
,
NULL
);
server
.
db
[
j
].
expires
=
dictCreate
(
&
set
DictType
,
NULL
);
server
.
db
[
j
].
expires
=
dictCreate
(
&
keyptr
DictType
,
NULL
);
server
.
db
[
j
].
blockingkeys
=
dictCreate
(
&
keylistDictType
,
NULL
);
server
.
db
[
j
].
id
=
j
;
}
...
...
@@ -2854,21 +2867,16 @@ static int rdbSaveStringObjectRaw(FILE *fp, robj *obj) {
static
int
rdbSaveStringObject
(
FILE
*
fp
,
robj
*
obj
)
{
int
retval
;
if
(
obj
->
storage
==
REDIS_VM_MEMORY
&&
obj
->
encoding
!=
REDIS_ENCODING_RAW
)
{
/* Avoid incr/decr ref count business when possible.
* This plays well with copy-on-write given that we are probably
* in a child process (BGSAVE). Also this makes sure key objects
* of swapped objects are not incRefCount-ed (an assert does not allow
* this in order to avoid bugs) */
if
(
obj
->
encoding
!=
REDIS_ENCODING_RAW
)
{
obj
=
getDecodedObject
(
obj
);
retval
=
rdbSaveStringObjectRaw
(
fp
,
obj
);
decrRefCount
(
obj
);
}
else
{
/* This is a fast path when we are sure the object is not encoded.
* Note that's any *faster* actually as we needed to add the conditional
* but because this may happen in a background process we don't want
* to touch the object fields with incr/decrRefCount in order to
* preveny copy on write of pages.
*
* Also incrRefCount() will have a failing assert() if we try to call
* it against an object with storage != REDIS_VM_MEMORY. */
retval
=
rdbSaveStringObjectRaw
(
fp
,
obj
);
}
return
retval
;
...
...
@@ -6670,7 +6678,12 @@ static int fwriteBulk(FILE *fp, robj *obj) {
char
buf
[
128
];
int
decrrc
=
0
;
if
(
obj
->
storage
==
REDIS_VM_MEMORY
&&
obj
->
encoding
!=
REDIS_ENCODING_RAW
){
/* Avoid the incr/decr ref count business if possible to help
* copy-on-write (we are often in a child process when this function
* is called).
* Also makes sure that key objects don't get incrRefCount-ed when VM
* is enabled */
if
(
obj
->
encoding
!=
REDIS_ENCODING_RAW
)
{
obj
=
getDecodedObject
(
obj
);
decrrc
=
1
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录