Redis中可以使用EXPIRE命令设置一个键的生存时间,到时间后Redis会自动删除它。
EXPIRE key seconds
如果想知道一个键还有多久的时间会被删除,可以使用TTL命令,返回值是键的剩余时间。当键不存在或者没有设置生存时间时,返回-1。
redis>SET foo bar
OK
redis>EXPIRE foo 20
(integer)1
redis>TTL foo
(integer)15
redis>TTL foo
(integer)-1
如果想取消键的生存时间设置,可以使用PERSIST命令。如果生存时间被成功清除则返回1;否则返回0(因为键不存在或键本来就是永久的)。
使用SET、或者GETSET命令为键赋值也会同时清除键的生存时间。
redis> EXPIRE foo 20
(integer)1
redis> SET foo bar
OK
redis> TTL foo
(integer)-1
其他只对键值进行操作的命令(如INCR、LPUSH、HSET、ZREM)均不会影响键的生存时间。
PEXPIRE与EXPIRE命令相似,但是其单位是毫秒。
EXPIREAT和PEXPIREAT不常用,EXPIREAT的单位是Unix时间,表示键的生存时间的截止时间。PEXPIREAT命令的单位是毫秒。
redis> SET foo bar
OK
redis> EXPIREAT foo 1351858600
(integer)1
redis> TTL foo
(integer)142
redis> PEXPIREAT foo 1351858700000
(integer)1
实现访问频率限制之一:
$isKeyExists= EXISTS rate.limiting:$IP
if$isKeyExists is 1
$times = INCR rate.limiting:$IP
if $times > 100
print 访问频率超过了限制,请稍后再试。
exist
else
MULTI
INCR rate.limiting:$IP
EXPIRE $keyName 60
EXEC
实现访问频率限制之二:
$listLen= LLEN rate.limiting:$IP
if$listLen < 10
LPUSH rate.limiting:$IP now()
else
$time = LINDEX rate.limiting:$IP -1
if now() - $time < 60
print 访问频率超过了限制,请稍后再试。
else
LPUSH rate.limiting:$IP now()
LTRIM rate.limiting:$IP 0 9
实现缓存:
可以限制Redis能够使用的最大内存,并让Redis按照一定的规则淘汰不需要的缓存键,这种方式在只将Redis用作缓存系统时非常的使用。
具体设置方法:修改配置文件的maxmemory参数,限制Redis最大可用内存大小(单位字节),当超出了这个限制时,Redis会依据maxmemory-policy参数指定的策略来删除不需要的键,直到Redis占用的内存小于指定内存。
LRU(Least Recently Used)
规则 | 说明 |
volatile-lru | 使用LRU算法删除一个键(只对设置了生存时间的键) |
allkeys-lru | 使用LRU算法删除一个键 |
volatile-random | 随机删除一个键(只对设置了生存时间的键) |
allkeys-random | 随机删除一个键 |
volatile-ttl | 删除生存时间最近的一个键 |
noeviction | 不删除键,只返回错误 |