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,长久会导致内存泄露。定期删除会每隔一段时间删除一次,但是时间的时长和频率需要把握。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏