redis建的过期处理

avatar 2022年2月17日18:02:13 评论 284 次浏览

redis作为缓存使用的时候,总是会在数据库中同步数据到redis中,如果数据库中的数据不大还好,如果数据很大,那么同步过来的数据可能会撑爆redis的内存,如果只是把访问的优先级来同步,对于用户的访问也是体验不太友好,如果在同步中可以加个时间,这样频繁访问的数据同步到redis里来,不频繁的请求的时候在同步,这样的环境才会友好,这里就需要说一下redis的过期时间设置,看下面的例子:

root@789e016ea879:/home# redis-cli
127.0.0.1:6379> set message 180
OK
127.0.0.1:6379> ttl message
(integer) -1
127.0.0.1:6379> get message
"180"
127.0.0.1:6379> ttl message
(integer) -1
127.0.0.1:6379> ttl message
(integer) -1
127.0.0.1:6379> expire message 180
(integer) 1
127.0.0.1:6379> ttl message
(integer) 176
127.0.0.1:6379> ttl message
(integer) 171
127.0.0.1:6379> ttl message
(integer) 100
127.0.0.1:6379> ttl message
(integer) 25
127.0.0.1:6379> ttl message
(integer) -2
127.0.0.1:6379> get message
(nil)


127.0.0.1:6379> set message wulaoer
OK
127.0.0.1:6379> get message
"wulaoer"
127.0.0.1:6379> get message
"wulaoer"
127.0.0.1:6379> ttl message
(integer) -1
127.0.0.1:6379> ttl message
(integer) -1
127.0.0.1:6379> pexpire message 18000
(integer) 1
127.0.0.1:6379> ttl message
(integer) 14
127.0.0.1:6379> ttl message
(integer) 10
127.0.0.1:6379> ttl message
(integer) -2
127.0.0.1:6379> get message
(nil)

redis对存储值的国旗是针对值的建(key)处理的,即时间的设置也是key的有效时间,Expire也称为过期字段。
expire key time(以秒为单位)---这是常用的方式
setex(String key, int seconds,String value)--字符串独有的方式

注意:
1、除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间
2、如果没有设置时间,那缓存就是永不过期
3、如果设置了过期时间,之后又想让缓存永不过期,使用persist key
常用的方式
一般主要包括4种处理过期方,其中expire都是以秒为单位,pexpire都是以毫秒为单位的。

EXPIRE key seconds  //将key的生存时间设置为ttl秒
PEXPIRE key milliseconds  //将key的生成时间设置为ttl毫秒
EXPIREAT key timestamp  //将key的过期时间设置为timestamp所代表的的秒数的时间戳
PEXPIREAT key milliseconds-timestamp  //将key的过期时间设置为timestamp所代表的的毫秒数的时间戳

备注:timestamp为unix时间戳(例如:timestamp=1499788800 表示将在2017.07.12过期)
1、2两种方式是设置一个过期的时间段,就是咱们处理验证码最常用的策略,设置三分钟或五分钟后失效,把分钟数转换成秒或毫秒存储到Redis中。
3、4两种方式是指定一个过期的时间 ,比如优惠券的过期时间是某年某月某日,只是单位不一样。
redis的过期时间
redis的过期时间分为定时删除,惰性删除,定期删除,三者之间的区别是都是删除内存中的建,不过定时删除在删除key的时候会占用很多CPU,如果cpu紧张的情况下,删除后重新建业会对性能有影响。惰性删除是指每次用的时候检查一下是否过期,若过期,则删除,访问返回null,如果不长访问的key,长久会导致内存泄露。定期删除会每隔一段时间删除一次,但是时间的时长和频率需要把握。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: