redis提供6种数据淘汰策略(代码片段)

c-x-a c-x-a     2022-12-14     137

关键词:

淘汰策略的原因

在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用的。譬如,在一台 8G 机子上部署了 4 个 redis 服务点,每一个服务点分配 1.5G 的内存大小,减少内存紧张的情况,由此获取更为稳健的服务。

6中淘汰策略

redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis 提供 6种数据淘汰策略:

volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放;
allkeys-lru:从数据集中(包括设置过期时间以及未设置过期时间的数据集中),选择最近最久未使用的数据释放;
volatile-random:从设置了过期时间的数据集中,随机选择一个数据进行释放;
allkeys-random:从数据集中(包括了设置过期时间以及未设置过期时间)随机选择一个数据进行入释放;
volatile-ttl:从设置了过期时间的数据集中,选择马上就要过期的数据进行释放操作;
noeviction:不删除任意数据(但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误。

默认的内存策略是noeviction,在Redis中LRU算法是一个近似算法,默认情况下,Redis随机挑选5个键,并且从中选取一个最近最久未使用的key进行淘汰,在配置文件中可以通过maxmemory-samples的值来设置redis需要检查key的个数,但是检查的越多,耗费的时间也就越久,但是结构越精确(也就是Redis从内存中淘汰的对象未使用的时间也就越久~),设置多少,综合权衡。

一般来说,推荐使用的策略是volatile-lru,并辨识Redis中保存的数据的重要性。对于那些重要的,绝对不能丢弃的数据(如配置类数据等),应不设置有效期,这样Redis就永远不会淘汰这些数据。对于那些相对不是那么重要的,并且能够热加载的数据(比如缓存最近登录的用户信息,当在Redis中找不到时,程序会去DB中读取),可以设置上有效期,这样在内存不够时Redis就会淘汰这部分数据。

配置文件

# maxmemory <bytes>
# volatile-lru -> remove the key with an expire set using an LRU algorithm
# allkeys-lru -> remove any key according to the LRU algorithm
# volatile-random -> remove a random key with an expire set
# allkeys-random -> remove a random key, any key
# volatile-ttl -> remove the key with the nearest expire time (minor TTL)
# noeviction -> don't expire at all, just return an error on write operations
# The default is:
# maxmemory-policy noeviction

我们可以设置maxmemory ,当数据达到限定大小后,会选择配置的策略淘汰数据

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

目录一、Redis的内存淘汰策略  1.1.概念  1.2.策略一:全局的键空间选择性移除  1.3.策略二:设置过期时间的键空间选择性移除  1.4.LRU、LFU和volatile-ttl都是近似随机算法 1.4.1.LRU算法 1.4.2.LFU算法1.5.过期删除策略1.6.AOF... 查看详情

redis过期删除策略和内存淘汰策略

...定期删除两种策略配合使用。spring-boot-starter-data-redis包中提供了监听过期的类,对于key过期,需要得到通知,做业务处理的,可以做此监听。springboot整合Redis参考,SpringBoot整合Redis-(jianshu.com)在整合Redis的基础上,在新加监听配... 查看详情

缓存数据库redis之三:内存淘汰策略及优化(代码片段)

...不足时,怎么处理需要新写入且需要申请额外空间的数据。  1.2.策略一:全局的键空间选择性移除-noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。-allkeys-lru:当内存不足以容纳新写入数据时&... 查看详情

你说,redis如何实现键值自动清理?(代码片段)

...资源总有耗尽的时候,这时缓存服务器就无法再对外提供服务了。我们要用有限的服务器资源支撑更多的业务服务,就必须要让那些访问频率不高的缓存删除掉,为新的缓存腾出内存空间。Redis主要通过两种方式相互... 查看详情

redis过期策略和内存淘汰机制(代码片段)

...除为什么要采用定期删除+惰性删除2种策略呢?redis内存淘汰机制常见的删除策略1.定时删除:在设置键的过期时间的同时,创建一个timer,让定时器在键的过期时间到达时,立即执行对键的删除操作。(主动删除)对内存友好,... 查看详情

redis八种淘汰策略是啥?

...络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。特点:Redis是一个高性能的key-value数据库。redis的出现,很大... 查看详情

java从零开始手写redislru缓存淘汰策略详解(代码片段)

...s(三)redisexpire过期原理java从零手写实现redis(三)内存数据如何重启不丢失?java从零手写实现redis(四)添加监听器java从零手写实现redis(五)过期策略的另一种实现思路java从零手写实现redis(六)AOF持久化原理详解及实现我... 查看详情

redis高级:数据删除与淘汰策略,主从复制,哨兵模式,集群以及企业级解决方案(代码片段)

文章目录1.数据删除与淘汰策略1.1过期数据**1.1.1Redis中的数据特征**1.1.2时效性数据的存储结构1.2数据删除策略1.2.1数据删除策略的目标1.2.2定时删除1.2.3惰性删除1.2.4定期删除1.2.5删除策略对比1.3数据淘汰策略(逐出算法)1... 查看详情

redis中的lru淘汰策略分析(代码片段)

...过期,就返回该键。定期删除:每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。另外,Redis也可以开启LRU功能来自动淘汰一些键值对。LRU算法当需要从缓存中淘汰数据时,我们希 查看详情

redis必须记住的要点(代码片段)

...么是Redis?它主要用来什么的?2.说说Redis的基本数据结构类型2.1Redis的五种基本数据类型String(字符串)Hash(哈希)List(列表)Set(集合)有序集合(zset)2.2Redis的三种特殊数据类... 查看详情

day750.redis缓存淘汰替换策略:redis是如何工作的-redis核心技术与实战(代码片段)

...是关于Redis缓存淘汰替换策略。Redis缓存使用内存来保存数据,避免业务应用从后端数据库中读取数据,可以提升应用的响应速度。那么,如果把所有要访问的数据都放入缓存,是不是一个很好的设计选择呢?... 查看详情

redis过期删除策略和内存淘汰策略(代码片段)

...、面试题二、Redis内存满了怎么办2.1结论三、redis里写的数据如何删除的?3.1三种不同的删除策略3.1.1立即删除3.1.2惰性删除3.1.3定期删除3.3.4总结四、redis缓存淘汰策略4.1有哪些4.2你平时用哪一种五、总结一、面试题生产上你... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情

redis前传自己手写一个lru策略|redis淘汰策略(代码片段)

一、题目描述146.LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。实现LRUCache类:LRUCache(intcapacity)以正整数作为容量capacity初始化LRU缓存intget(intkey)如果关键字key存在于缓存中,则返回... 查看详情

redis缓存淘汰算法——lrulfu(代码片段)

...微信搜索程序dunk,关注公众号,获取博客源码、数据结构与算法笔记(超级全)、大厂面试、笔试题Redis过期键的删除策略对于过期键一般的三种删除策略定时删除:在设置键的过期时间的同时,创建一个... 查看详情

redis的内存淘汰策略(代码片段)

简单介绍了Redis的内存淘汰策略。Redis的maxmemory参数用于指定Redis能使用的最大内存,既可以在redis.conf配置文件中设置(单位Byte),也可以在运行过程中通过CONFIGSET命令动态修改。将maxmemory设置为0,或者没有... 查看详情

吃透redis:缓存淘汰篇-lru算法(代码片段)

...行?算法具体如何执行三、总结一、概述redis是内存数据库,当内存使用达到了一定阈值,就会触发缓存淘汰策略,这和Redis配置文件redis.conf中的两个配置参数有关:maxmemory,该配置项设定了Redisserver可以... 查看详情