Redis生存时间设置


本文摘自PHP中文网,作者尚,侵删。

Redis对键提供生存时间,在不指定生存时间时,生存时间是永久。时间到期后Redis会自动删除这个键。可以用EXPIRE命令,时间单位时秒,如果一个键是被设为有限的生存时间,那么在SET key进行重新赋值的时候会被再次设为永久:

1

2

SET session:captcha sd2a

EXPIRE session:captcha 600

取消生存时间,将键的生存时间设为永久,是PERSIST:

1

PERSIST session:captcha

查看一个键的生存时间用TTL命令,-1表示永久或者以及到期被删除。

1

TTL session:captcha

在Redis的INCR,LPUSH,HSET,ZREM等命令时不会改变生存时间的。

(推荐:redis视频教程)

想要精确到毫米来控制时间,就需要PEXPIRE即可,使用PTTL查看剩余时间。

如果想要给定一个到期的时间而不是多少秒后到期呢?就需要EXPIREAT和PEXPIREAT。EXPIREAT的参数是到期时的时间戳(秒),PEXPIREAT的参数是到期时间是时间戳(毫秒)

1

2

3

SET session:captcha sd2a

EXPIREAT session:captcha 1399902009

PEXPIREAT session:captcha 1399902009000

应用场景一:访问频率限制:我们限定每个用户1分钟只能浏览10个页面。伪代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

$isExists = EXISTS limit:user1:192.168.1.2

if($isExists){

    $num = INCR limit:user1:192.168.1.2

    if($num > 10){

        print '超过限制'

        exit

    }

}else{

    MULTI

    INCR limit:user1:192.168.1.2

    EXPIRE limit:user1:192.168.1.2 60

    EXEC

}

我们用了事务的原因是因为,加入在执行了INCR limit:user1:192.168.1.2之后,在执行EXPIRE limit:user1:192.168.1.2 60之前,客户端被关闭了。那么这个键和值就会被持久化保存。且该ID终身只能访问10次了。这就太糟糕了。

应用场景二:实现缓存。计算一万名用户的排行榜,是很耗费资源的,那么我们把数据在第一次计算后存进一个key,然后对这个key设置生存时间。在1个小时后生存时间到期,key被删除,再次进行计算新排名并保存的一个临时key。我们用伪代码实现:

1

2

3

4

5

6

7

8

//战斗排行榜

$rank = GET cache:rank:fight

if not $rank

    $rank = 计算排名()

    MULTI

    SET cache:rank:fight $rank

    EXPIRE cache:rank:fight 3600

    EXEC

Redis是内存存储的数据库,假如内存被缓存占满了,Redis会根据配置文件来删除一定的缓存。配置项是Redis的配置文件中的maxmemory参数,单位是字节。超过这个限制之后,会根据配置文件的maxmemory-policy参数来删除不需要的键。maxmemory-policy的可选规则是如下四种:

阅读剩余部分

相关阅读 >>

Redis为什么是安全的

Redis如何实现扩容

centos如何将Redis配置为系统服务

Redis怎么重启哨兵服务

Redis与mysql有哪些区别

如何解决Redis连接超时问题

更换Redis 是否需要 重启

Redis server是什么

Redis主要消耗什么资源

使用Redis完成排行榜系统

更多相关阅读请进入《Redis》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...