Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
6a9764d1
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
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,发现更多精彩内容 >>
提交
6a9764d1
编写于
4月 15, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '2.2' of github.com:antirez/redis into 2.2
上级
c138dc7d
2b886275
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
64 addition
and
3 deletion
+64
-3
00-RELEASENOTES
00-RELEASENOTES
+15
-0
src/object.c
src/object.c
+44
-1
src/redis.c
src/redis.c
+2
-1
src/redis.h
src/redis.h
+2
-0
src/version.h
src/version.h
+1
-1
未找到文件。
00-RELEASENOTES
浏览文件 @
6a9764d1
...
...
@@ -12,6 +12,21 @@ for 2.0.
CHANGELOG
---------
What's new in Redis 2.2.4
=========================
* Return value of OBJECT DEBUG against sorted sets fixed, now is "skiplist".
What's new in Redis 2.2.3
=========================
* Fixed issue #503. MONITOR + QUIT (and other combinations) could crash
the server.
* OBJECT command implemented. See http://redis.io/commands/object
* Fixed a problem in redis-cli related to escapes in the form "\x..".
* Fixed a minor memory leak in redis-cli
* Saved RDB on SIGTERM on archs where it was not working properly.
What's new in Redis 2.2.2
=========================
...
...
src/object.c
浏览文件 @
6a9764d1
...
...
@@ -93,10 +93,13 @@ robj *createHashObject(void) {
robj
*
createZsetObject
(
void
)
{
zset
*
zs
=
zmalloc
(
sizeof
(
*
zs
));
robj
*
o
;
zs
->
dict
=
dictCreate
(
&
zsetDictType
,
NULL
);
zs
->
zsl
=
zslCreate
();
return
createObject
(
REDIS_ZSET
,
zs
);
o
=
createObject
(
REDIS_ZSET
,
zs
);
o
->
encoding
=
REDIS_ENCODING_SKIPLIST
;
return
o
;
}
void
freeStringObject
(
robj
*
o
)
{
...
...
@@ -425,6 +428,7 @@ char *strEncoding(int encoding) {
case
REDIS_ENCODING_LINKEDLIST
:
return
"linkedlist"
;
case
REDIS_ENCODING_ZIPLIST
:
return
"ziplist"
;
case
REDIS_ENCODING_INTSET
:
return
"intset"
;
case
REDIS_ENCODING_SKIPLIST
:
return
"skiplist"
;
default:
return
"unknown"
;
}
}
...
...
@@ -439,3 +443,42 @@ unsigned long estimateObjectIdleTime(robj *o) {
REDIS_LRU_CLOCK_RESOLUTION
;
}
}
/* This is an helper function for the DEBUG command. We need to lookup keys
* without any modification of LRU or other parameters. */
robj
*
objectCommandLookup
(
redisClient
*
c
,
robj
*
key
)
{
dictEntry
*
de
;
if
((
de
=
dictFind
(
c
->
db
->
dict
,
key
->
ptr
))
==
NULL
)
return
NULL
;
return
(
robj
*
)
dictGetEntryVal
(
de
);
}
robj
*
objectCommandLookupOrReply
(
redisClient
*
c
,
robj
*
key
,
robj
*
reply
)
{
robj
*
o
=
objectCommandLookup
(
c
,
key
);
if
(
!
o
)
addReply
(
c
,
reply
);
return
o
;
}
/* Object command allows to inspect the internals of an Redis Object.
* Usage: OBJECT <verb> ... arguments ... */
void
objectCommand
(
redisClient
*
c
)
{
robj
*
o
;
if
(
!
strcasecmp
(
c
->
argv
[
1
]
->
ptr
,
"refcount"
)
&&
c
->
argc
==
3
)
{
if
((
o
=
objectCommandLookupOrReply
(
c
,
c
->
argv
[
2
],
shared
.
nullbulk
))
==
NULL
)
return
;
addReplyLongLong
(
c
,
o
->
refcount
);
}
else
if
(
!
strcasecmp
(
c
->
argv
[
1
]
->
ptr
,
"encoding"
)
&&
c
->
argc
==
3
)
{
if
((
o
=
objectCommandLookupOrReply
(
c
,
c
->
argv
[
2
],
shared
.
nullbulk
))
==
NULL
)
return
;
addReplyBulkCString
(
c
,
strEncoding
(
o
->
encoding
));
}
else
if
(
!
strcasecmp
(
c
->
argv
[
1
]
->
ptr
,
"idletime"
)
&&
c
->
argc
==
3
)
{
if
((
o
=
objectCommandLookupOrReply
(
c
,
c
->
argv
[
2
],
shared
.
nullbulk
))
==
NULL
)
return
;
addReplyLongLong
(
c
,
estimateObjectIdleTime
(
o
));
}
else
{
addReplyError
(
c
,
"Syntax error. Try OBJECT (refcount|encoding|idletime)"
);
}
}
src/redis.c
浏览文件 @
6a9764d1
...
...
@@ -187,7 +187,8 @@ struct redisCommand readonlyCommandTable[] = {
{
"punsubscribe"
,
punsubscribeCommand
,
-
1
,
0
,
NULL
,
0
,
0
,
0
},
{
"publish"
,
publishCommand
,
3
,
REDIS_CMD_FORCE_REPLICATION
,
NULL
,
0
,
0
,
0
},
{
"watch"
,
watchCommand
,
-
2
,
0
,
NULL
,
0
,
0
,
0
},
{
"unwatch"
,
unwatchCommand
,
1
,
0
,
NULL
,
0
,
0
,
0
}
{
"unwatch"
,
unwatchCommand
,
1
,
0
,
NULL
,
0
,
0
,
0
},
{
"object"
,
objectCommand
,
-
2
,
0
,
NULL
,
0
,
0
,
0
}
};
/*============================ Utility functions ============================ */
...
...
src/redis.h
浏览文件 @
6a9764d1
...
...
@@ -81,6 +81,7 @@
#define REDIS_ENCODING_LINKEDLIST 4
/* Encoded as regular linked list */
#define REDIS_ENCODING_ZIPLIST 5
/* Encoded as ziplist */
#define REDIS_ENCODING_INTSET 6
/* Encoded as intset */
#define REDIS_ENCODING_SKIPLIST 7
/* Encoded as skiplist */
/* Object types only used for dumping to disk */
#define REDIS_EXPIRETIME 253
...
...
@@ -1008,6 +1009,7 @@ void punsubscribeCommand(redisClient *c);
void
publishCommand
(
redisClient
*
c
);
void
watchCommand
(
redisClient
*
c
);
void
unwatchCommand
(
redisClient
*
c
);
void
objectCommand
(
redisClient
*
c
);
#if defined(__GNUC__)
void
*
calloc
(
size_t
count
,
size_t
size
)
__attribute__
((
deprecated
));
...
...
src/version.h
浏览文件 @
6a9764d1
#define REDIS_VERSION "2.2.
2
"
#define REDIS_VERSION "2.2.
4
"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录