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
52d46855
Commit
52d46855
authored
Nov 09, 2011
by
antirez
Browse files
TTL, EXPIRE and EXPIREAT now support the milliseconds input/output form
parent
b0b74486
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/db.c
View file @
52d46855
...
@@ -514,6 +514,14 @@ int expireIfNeeded(redisDb *db, robj *key) {
...
@@ -514,6 +514,14 @@ int expireIfNeeded(redisDb *db, robj *key) {
* Expires Commands
* Expires Commands
*----------------------------------------------------------------------------*/
*----------------------------------------------------------------------------*/
/* Given an string object return true if it contains exactly the "ms"
* or "MS" string. This is used in order to check if the last argument
* of EXPIRE, EXPIREAT or TTL is "ms" to switch into millisecond input/output */
int
stringObjectEqualsMs
(
robj
*
a
)
{
char
*
arg
=
a
->
ptr
;
return
tolower
(
arg
[
0
])
==
'm'
&&
tolower
(
arg
[
1
])
==
's'
&&
arg
[
2
]
==
'\0'
;
}
void
expireGenericCommand
(
redisClient
*
c
,
long
long
offset
)
{
void
expireGenericCommand
(
redisClient
*
c
,
long
long
offset
)
{
dictEntry
*
de
;
dictEntry
*
de
;
robj
*
key
=
c
->
argv
[
1
],
*
param
=
c
->
argv
[
2
];
robj
*
key
=
c
->
argv
[
1
],
*
param
=
c
->
argv
[
2
];
...
@@ -526,9 +534,7 @@ void expireGenericCommand(redisClient *c, long long offset) {
...
@@ -526,9 +534,7 @@ void expireGenericCommand(redisClient *c, long long offset) {
/* If no "ms" argument was passed the time is in second, so we need
/* If no "ms" argument was passed the time is in second, so we need
* to multilpy it by 1000 */
* to multilpy it by 1000 */
if
(
c
->
argc
==
4
)
{
if
(
c
->
argc
==
4
)
{
char
*
arg
=
c
->
argv
[
3
]
->
ptr
;
if
(
!
stringObjectEqualsMs
(
c
->
argv
[
3
]))
{
if
(
tolower
(
arg
[
0
])
!=
'm'
||
tolower
(
arg
[
1
])
!=
's'
||
arg
[
2
])
{
addReply
(
c
,
shared
.
syntaxerr
);
addReply
(
c
,
shared
.
syntaxerr
);
return
;
return
;
}
}
...
@@ -572,15 +578,33 @@ void expireGenericCommand(redisClient *c, long long offset) {
...
@@ -572,15 +578,33 @@ void expireGenericCommand(redisClient *c, long long offset) {
}
}
void
expireCommand
(
redisClient
*
c
)
{
void
expireCommand
(
redisClient
*
c
)
{
if
(
c
->
argc
>
4
)
{
addReply
(
c
,
shared
.
syntaxerr
);
return
;
}
expireGenericCommand
(
c
,
0
);
expireGenericCommand
(
c
,
0
);
}
}
void
expireatCommand
(
redisClient
*
c
)
{
void
expireatCommand
(
redisClient
*
c
)
{
if
(
c
->
argc
>
4
)
{
addReply
(
c
,
shared
.
syntaxerr
);
return
;
}
expireGenericCommand
(
c
,
mstime
());
expireGenericCommand
(
c
,
mstime
());
}
}
void
ttlCommand
(
redisClient
*
c
)
{
void
ttlCommand
(
redisClient
*
c
)
{
long
long
expire
,
ttl
=
-
1
;
long
long
expire
,
ttl
=
-
1
;
int
output_ms
=
0
;
if
(
c
->
argc
==
3
)
{
if
(
stringObjectEqualsMs
(
c
->
argv
[
2
]))
{
output_ms
=
1
;
}
else
{
addReply
(
c
,
shared
.
syntaxerr
);
return
;
}
}
expire
=
getExpire
(
c
->
db
,
c
->
argv
[
1
]);
expire
=
getExpire
(
c
->
db
,
c
->
argv
[
1
]);
if
(
expire
!=
-
1
)
{
if
(
expire
!=
-
1
)
{
...
@@ -590,7 +614,7 @@ void ttlCommand(redisClient *c) {
...
@@ -590,7 +614,7 @@ void ttlCommand(redisClient *c) {
if
(
ttl
==
-
1
)
{
if
(
ttl
==
-
1
)
{
addReplyLongLong
(
c
,
-
1
);
addReplyLongLong
(
c
,
-
1
);
}
else
{
}
else
{
addReplyLongLong
(
c
,(
ttl
+
500
)
/
1000
);
addReplyLongLong
(
c
,
output_ms
?
ttl
:
(
(
ttl
+
500
)
/
1000
)
)
;
}
}
}
}
...
...
src/redis.c
View file @
52d46855
...
@@ -172,8 +172,8 @@ struct redisCommand redisCommandTable[] = {
...
@@ -172,8 +172,8 @@ struct redisCommand redisCommandTable[] = {
{
"move"
,
moveCommand
,
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"move"
,
moveCommand
,
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"rename"
,
renameCommand
,
3
,
"w"
,
0
,
renameGetKeys
,
1
,
2
,
1
,
0
,
0
},
{
"rename"
,
renameCommand
,
3
,
"w"
,
0
,
renameGetKeys
,
1
,
2
,
1
,
0
,
0
},
{
"renamenx"
,
renamenxCommand
,
3
,
"w"
,
0
,
renameGetKeys
,
1
,
2
,
1
,
0
,
0
},
{
"renamenx"
,
renamenxCommand
,
3
,
"w"
,
0
,
renameGetKeys
,
1
,
2
,
1
,
0
,
0
},
{
"expire"
,
expireCommand
,
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"expire"
,
expireCommand
,
-
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"expireat"
,
expireatCommand
,
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"expireat"
,
expireatCommand
,
-
3
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"keys"
,
keysCommand
,
2
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"keys"
,
keysCommand
,
2
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"dbsize"
,
dbsizeCommand
,
1
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"dbsize"
,
dbsizeCommand
,
1
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"auth"
,
authCommand
,
2
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"auth"
,
authCommand
,
2
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
...
@@ -194,7 +194,7 @@ struct redisCommand redisCommandTable[] = {
...
@@ -194,7 +194,7 @@ struct redisCommand redisCommandTable[] = {
{
"sort"
,
sortCommand
,
-
2
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"sort"
,
sortCommand
,
-
2
,
"wm"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"info"
,
infoCommand
,
-
1
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"info"
,
infoCommand
,
-
1
,
"r"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"monitor"
,
monitorCommand
,
1
,
"ars"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"monitor"
,
monitorCommand
,
1
,
"ars"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"ttl"
,
ttlCommand
,
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"ttl"
,
ttlCommand
,
-
2
,
"r"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"persist"
,
persistCommand
,
2
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"persist"
,
persistCommand
,
2
,
"w"
,
0
,
NULL
,
1
,
1
,
1
,
0
,
0
},
{
"slaveof"
,
slaveofCommand
,
3
,
"aws"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"slaveof"
,
slaveofCommand
,
3
,
"aws"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"debug"
,
debugCommand
,
-
2
,
"aw"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
{
"debug"
,
debugCommand
,
-
2
,
"aw"
,
0
,
NULL
,
0
,
0
,
0
,
0
,
0
},
...
...
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