Redis内存消除策略,看到这个就足够了

发布者:上海IT外包来源:http://www.lanmon.net点击数:1355

作为最常用的开源内存数据库,Redis具有非常高的性能。根据官方数据,Redis读取速度为110,000次/秒,写入速度为81000次/秒。 Redis支持数据持久性,众多数据结构存储,主从模式数据备份和许多其他功能。
但是,当Redis长时间用作缓存时,它将不可避免地遇到内存空间存储瓶颈。当Redis内存超过物理内存限制时,内存数据将频繁地与磁盘交换,导致Redis性能急剧下降。此时,如何消除无用的数据释放空间,新数据的存储变得更加重要。
在这方面,Redis使用配置参数maxmemory限制生产环境中的内存大小。当实际存储内存超过maxmemory参数值时,开发人员可以使用这些方法—— Redis内存消除策略来决定如何释放新空间以继续支持读写。
那么Redis内存消除策略如何工作呢?
首先,客户端将启动需要更多内存的应用程序;
其次,Redis检查内存使用情况。如果实际内存使用量超过maxmemory,Redis将根据用户配置的消除策略选择无用的密钥。
最后,确认所选数据没有问题并成功执行淘汰任务。
Redis 3.0目前支持6种消除策略:
1. volatile-lru:从设置到期时间的数据集(server.db [i] .expires)中挑选出最近最少使用的数据消除。没有消除过期时间的密钥,因此您可以增加内存空间,同时确保不会丢失需要保留的数据。
2. volatile-ttl:除了使用LRU的消除机制外,该策略基本上类似于volatile-lru。选择设置到期时间的数据集(server.db [i] .expires)以消除将过期的数据。 ttl值越大,消除优先级越高。
3. volatile-random:从已设置到期时间的数据集(server.db [i] .expires)中选择任何数据消除。当内存达到限制并且无法写入非过期时间的数据集时,可以通过消除策略从主键空间中随机删除密钥。4. allkeys-lru:从数据集中选择最近最少使用的数据消除(server.db [i] .dict)。此策略要消除的关键是整个密钥集合,而不是过期的密钥集合。
5. allkeys-random:选择要从数据集中删除的任何数据(server.db [i] .dict)。
6. no-enviction:禁止逐出数据,即当内存不足以容纳新数据时,新的写入操作将报告错误,请求可以继续,并且在线任务无法继续。无罪策略可以保证数据。没有丢失,这也是系统的默认消除策略。
以上是Redis的六种淘汰策略。关于这六种策略的使用,开发人员还需要根据自己的系统特征正确选择或修改驱逐。
在Redis中,当数据具有较高的访问频率,访问频率的其余部分较低或无法预测数据的频率时,更适合设置allkeys-lru。
如果所有数据访问概率大致相等,则可以选择allkeys-random。
如果开发人员需要设置不同的ttl来判断数据到期的顺序,则可以选择volatile-ttl策略。
如果您希望长时间保存一些数据,并且可以消除一些数据,最好选择volatile-lru或volatile-random。
由于设置过期会消耗额外的内存,如果您打算避免在此项目上浪费Redis内存,则可以使用allkeys-lru策略,这样您就无法再设置过期时间并有效地使用内存。
Redis缓存函数由edis.c文件中的freeMemoryIfNeeded函数实现。如果设置了maxmemory,则每次执行命令money时,将调用该函数以确定内存是否足够,可用内存并返回错误。如果内存不足,主逻辑将阻止设置REDIS_COM_DENYOOM标志的命令执行,当使用内存时返回命令不允许>
'maxmemory'错误消息。
不同的密钥消除策略用于选择不同的密钥。 Redis消除策略主要分为三种机制:LRU消除,TTL消除和随机消除。
LRU消除
LRU(最近最少使用)算法基于数据的历史访问记录执行逐步淘汰数据。核心思想是“如果最近访问过数据,未来访问的概率也会更高。”lru计数器server.lrulock保存在服务器配置中,它会定期更新(redis timer program serverCorn()),server.lrulock的值根据server.unixtime排序,然后是使用时间最长的数据被选中。删除。此外,您可以从struct redisObject中找到每个redis对象将设置相应的lru。每次访问数据时,都会更新相应的redisObject.lru。
在Redis中,LRU算法是近似算法。默认情况下,Redis会随机选择5个键并选择一个最旧的未使用键来消除。在配置文件中,通过maxmemory-samples选项进行配置。选项配置越大,所需的时间越长,但结构越精确。
TTL消除
键值对到期时间表redisDb.expires存储在Redis数据集数据结构中。类似于LRU数据消除机制,在TTL数据消除机制中,从到期时间表中随机选择几个键值对,并取出具有最大ttl的键值对。类似地,对于所有到期时间,TTL消除策略不是表中最快过期的键值对,而是仅随机选择的几个键值对。
随机消除
在随机消除的场景中,获取要删除的键值对,并随机查找散列桶以散列指定位置的dictEntry。
Redis中的消除机制与算法实现几乎相同。它主要是从性能和可靠性上进行平衡,因此并不完全可靠。因此,开发人员应在Redis消除策略之后积极设置或更新。密钥过期时,主动删除无值数据,提高Redis的整体性能和空间
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部