Redis学习笔记(八)进阶之生存时间

来源:互联网 发布:lua ide vscode 编辑:程序博客网 时间:2024/05/18 03:16

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

 

其他只对键值进行操作的命令(如INCRLPUSHHSETZREM)均不会影响键的生存时间。

PEXPIREEXPIRE命令相似,但是其单位是毫秒。

EXPIREATPEXPIREAT不常用,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占用的内存小于指定内存。

LRULeast Recently Used

规则

说明

volatile-lru

使用LRU算法删除一个键(只对设置了生存时间的键)

allkeys-lru

使用LRU算法删除一个键

volatile-random

随机删除一个键(只对设置了生存时间的键)

allkeys-random

随机删除一个键

volatile-ttl

删除生存时间最近的一个键

noeviction

不删除键,只返回错误

0 0
原创粉丝点击