标签:删除 效率高 单线程 写入 redis 过期 内存 key
一:redis中数据为什么会丢失?
redis是缓冲用的并不是数据库,缓存的数据会过期的,另外也可能是被设置了过期时间,redis自己给干掉了
二:数据都过期了为什么还占这内存呢?
如:在redis中设置了过期时间,到期之后我们查数据会出现查不到数据但是还占内存的情况。
其实它内部是 定期删除和惰性删除两个在起作用。
定期删除指:redis每隔100ms随机抽取一些key来检查和删除。如果全部检查cpu消耗会很多,可能会宕机。
惰性删除:定期删除中过期的key没有被删除的,当某个key被使用的时候redis会检查一下是否过期,如果过期了则不会返回任何东西。
三:如果定期删除没删除的惰性删除也没检查到的过期数据怎么办呢?
走内存淘汰机制
四:redis内存淘汰机制
如果redis的内存占用过多的时候,此时会进行内存淘汰,有如下一些策略:
redis 10个key,现在已经满了,redis需要删除掉5个key
1个key,最近1分钟被查询了100次
1个key,最近10分钟被查询了50次
1个key,最近1个小时倍查询了1次
1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错,这个一般没人用吧,实在是太恶心了
2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key,这个一般没人用吧,为啥要随机,肯定是把最近最少使用的key给干掉啊
4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key(这个一般不太合适)
5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
其实,你写的数据太多,内存满了,或者触发了什么条件,redis lru,自动给你清理掉了一些最近很少使用的数据
标签:删除,效率高,单线程,写入,redis,过期,内存,key 来源: https://www.cnblogs.com/MingYi818/p/16265412.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。