您的位置:首页 > 数据库 > Redis

Redis 数据过期策略

2017-06-21 00:00 686 查看
阅读全文

1、设置过期时间

expire key time(以秒为单位)--这是最常用的方式

setex(String key, int seconds, String value)–字符串独有的方式

注意

除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间

如果没有设置时间,那缓存就是永不过期

如果设置了过期时间,之后又想让缓存永不过期,使用persist key

2、三种过期策略

Redis key过期的方式有三种:

被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key

主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key

当前已用内存超过maxmemory限定时,触发主动清理策略

被动删除(惰性删除)

只有key被操作时(如GET),REDIS才会被动检查该key是否过期,如果过期则删除之并且返回NIL。

1、这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会其他的expire key上浪费无谓的CPU时间。

2、但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。expireIfNeeded(redisDb *db, robj *key)函数位于src/db.c。

但仅是这样是不够的,因为可能存在一些key永远不会被再次访问到,这些设置了过期时间的key也是需要在过期后被删除的,我们甚至可以将这种情况看作是一种内存泄露----无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息

阅读全文

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: