Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
6a9764d1
Commit
6a9764d1
authored
Apr 15, 2011
by
antirez
Browse files
Merge branch '2.2' of github.com:antirez/redis into 2.2
parents
c138dc7d
2b886275
Changes
5
Hide whitespace changes
Inline
Side-by-side
00-RELEASENOTES
View file @
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
View file @
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
View file @
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
View file @
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
View file @
6a9764d1
#define REDIS_VERSION "2.2.
2
"
#define REDIS_VERSION "2.2.
4
"
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment