Redis的数据淘汰策略及相关注意事项[通俗易懂]

Redis的数据淘汰策略及相关注意事项[通俗易懂]在已经设置了过期时间的数据中:1、淘汰最近未使用的一些数据,也就是volatile-lru策略2、随机淘汰一些数据,也就是volatile-ra

大家好,欢迎来到IT知识分享网。

Redis的数据淘汰策略及相关注意事项[通俗易懂]

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。提供数据持久化,更多的数据结构存储,master-slave模式的数据备份。

Redis性能极高 – 来自官方文档的数据:Redis能读的速度是110000次/s,写的速度是81000次/s 。

将Redis作为缓存使用时,尤其是在数据量很大,内存空间有限的情况下,考虑如何淘汰掉旧数据释放空间存储新数据就更为重要了。

参数设定

Redis中存在一个参数用来设定内存使用上限,这个参数是maxmemory,可以在redis.conf中设置。例如:

maxmemory 100mb

需要注意以下几点:

1、maxmemory在64位操作系统中默认是0,表示没有上限限制,在32位操作系统中,因为系统只能识别3GB内存,因此默认是3GB。

2、maxmemory可以在运行时动态设置,例如:CONFIG SET maxmemory “100mb”。

当Redis使用的内存空间达到这个上限,又接到新的存储数据指令时,Redis有多种可能的淘汰策略,可能直接返回错误,也可能先淘汰掉旧数据,回收内存空间后存储新数据。具体如何执行是由maxmemory-policy这个参数决定的。

淘汰策略介绍

Redis在已使用内存达到设定的上限时,提供了6种数据淘汰策略(也就是maxmemory-policy可能的值):

  • 在已经设置了过期时间的数据中:

1、淘汰最近未使用的一些数据,也就是volatile-lru策略

2、随机淘汰一些数据,也就是volatile-random策略

3、淘汰距离过期时间最近的一些数据,也就是volatile-ttl策略

  • 在全部数据中

4、淘汰最近未使用的一些数据,也就是allkeys-lru策略

5、随机淘汰一些数据,也就是allkeys-random策略

  • 不淘汰数据

6、内存使用达到设定的内存上限时,用户试图存储新数据时会直接返回错误,也就是noeviction策略。

注:

lru是less recently used的缩写,译为最近最少使用;ttl是time to live的缩写,译为生存时间。

需要注意以下几点:

1、maxmemory-policy同样可以在运行时设置,用户可以根据内存的使用情况动态的修改淘汰策略。

2、当redis中的数据有一部分访问频率比较高,另外一部分访问频率较低时,设置allkeys-lru比较合适。或者无法预测数据的使用频率时,allkeys-lru也是不错的选择。

3、如果你需要循环或者扫描连续数据时,换种说法就是数据的访问概率大致相等时,allkeys-random是不错的选择。

4、当你想通过设置不同的ttl来控制数据过期的先后顺序时,你可以设置为volatile-ttl

5、当你希望一些数据常驻内存,另外一些数据可以被替换掉时,就请用volatile-lruvolatile-random吧。

6、另外,数据的过期时间是存储在另外一个哈希表中的,因此要耗费更多的内存空间,而allkeys-lru并不需要数据设置过期时间,因此对内存的利用率更高。

7、volatile-lru, volatile-randomvolatile-ttl 在没有数据满足被淘汰的条件时,会和noeviction一样返回错误。

何时触发淘汰数据的动作

1、一个客户端执行指令,导致数据的增加时。

2、Redis检测到内存的使用已经达到上限。

3、Redis自身执行指令时,等等。

注意:

Redis为了避免反复触发淘汰策略,每次会淘汰掉一批数据。

当Redis指令产生数据比较大时,淘汰掉的数据量也相应也比较大。

为了节省内存,LRU的策略并不是严格执行的,Redis是在整体中随机抽样取出一小部分数据,在这部分数据中严格执行LRU策略,在Redis3.0以后的版本对此算法做了改进,但仍然也是近似的LRU的策略,只是离真正的LRU更近了。

另外用户可以动态的设定随机抽取的样本数,例如:

maxmemory-samples 5

更多的选择

从Redis4.0开始,Redis增加了LFU的淘汰策略,即最不频繁使用策略,这个策略的好处是能够将最频繁使用的数据留在数据库里,而将最不常使用的数据淘汰掉。

注:

LFU是Less Frequently Used的缩写,译为最不频繁使用。

总结

Redis为了提高内存的使用效率,提供了6种数据淘汰策略,这些策略可以动态的设定,在内存使用空间超过设定的内存上限时触发执行。为了节省内存Redis使用的LRU策略实际上是一种近似的LRU。

本文作者长期致力于互联网技术研究,擅长互联网相关知识包括高并发、大数据、架构、前后端语言、框架、算法、常见面试题等,欢迎关注。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6121.html

(0)
上一篇 2022-12-18 12:10
下一篇 2022-12-18 12:30

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信