为什么redis key需要设置下生存周期
具有时效性的数据,比如限时优惠活动,缓存或验证码等,过了一定的时间就需要删除这些数据。
redis 采用 expire 设置生存时间,到时间自动删除,ttl 查看剩余时间。
下面是redis3.0.7 运行的
不设置expire ttl 返回-1, 表示永久存在
设置了expire ttl 会返回剩余时间
如果没有该键(改键从未设定过 ; 到了过期时间,被删除掉了) 直接返回 -2
注意:不同的redis版本可能不一样,还是要实践,看原版api
问题:限制每分钟用户最多只能访问10个页面???
实现 访问频率限制之一(伪代码), 每次判断一分钟
$isKeyExists = exitsts rate.limiting:$ip #判断用户key是否存在
if $isKeyExists is 1 // key存在, 访问次数增加
$times = incr rate.limingting:$ip
if $times > 10
print 访问频率超过了限制,稍后后再尝试
exit
else
multi # 采用事务,使得键 和 键的生存时间 一起设置,初始值设为0
incr exitsts rate.liming:$ip
expire $keyName , 60
exec
问题:第一个分钟 9 次,第二个分钟 9次,但是中间如 第一个分钟的后半段,第二个分钟的前半段,仍是连续的时间 ,可能超过10次
实现 访问频率限制之二
实现 “A时间内最多访问B次” , 用LIST