首页 > 编程知识 正文

redis实现分布式锁最好方案,redis 内存淘汰策略

时间:2023-05-06 19:16:31 阅读:14653 作者:115

转载

如果你的Redis只能存储10G的数据,而你写了12G,Redis会如何丢弃那2G的数据呢?

我们知道删除密钥的目的是释放内存使用量。 那么,一个密钥过期后,Redis什么时候去删除她呢?

1 .过期策略附件: Redis密钥的所有过期时间都存在于数据库结果的过期词典中。 那么,一个密钥过期了。 什么时候返回删除? 有三种策略。

)1)定时删除:在设定有效期限的同时,设定计时器。 计时器的执行时间是有效期限的时间点。

优点:对内存最友好、过期的密钥最快被删除,释放内存。 33558www.Sina.com/CPU时间最不友好。 如果为大量密钥设置过期时间,则会创建大量计时器,浪费CPU时间(2)执行惯性删除。 无论密钥是否过期,只要取值就检查过期日期,过期后删除

优点:对CPU时间最亲切,取值时选中,仅对当前按键操作无其他影响。 缺点:对内存不友好。 旧的未使用的键值无法大量删除,无用的数据可能占用了大量的内存。 (3)定期删除)每隔一定时间,程序缺点:,过期的删除。

优点:前两种方案之间的折中通过减少运行频率来减少对CPU时间的影响,并通过定期删除来减少内存浪费。 缺点:需要掌握执行频率。 否则,过于频繁将退化为定时删除,过少将退化为惯性删除。 2 .持久化和复制过期密钥响应对数据库进行一次检查

主服务器—无论是生成还是加载RDB文件,都会检查过期密钥。 生成时,不写入有效期限密钥; 加载时,将忽略过期密钥。 从服务器加载时,不会检查是否过期,而是加载数据。(1) RDB持久化

写入AOF文件时,密钥过期不会删除,也不会影响; 如果密钥过期并被删除,请在AOF文件后添加DEL命令。(2)AOF持久化

在AOF改写过程中进行检查,忽略已过的键。(3) AOF重写

在主从模式下,主服务器删除过期密钥,并且不会从显示为向从服务器发送DEL命令的服务器本身中删除过期密钥值。 3 .作为内存销毁机制Redis的(4)复制,根据特定的销毁算法进行数据清理并释放内存。

具体的内存销毁算法如下。

否noeviction :如果未销毁且内存不足,新写入将报告错误。 (默认) allkeys-lru:LRU,内存不足时,丢弃最近最少使用的key。 allkeys-random :随机,内存不足时,从所有key中随机选择一个key淘汰。 volatile-lru :如果LRU在过期时间内过期,且内存不足,则丢弃已过期的key中最近最少使用的key。 volatile-random :在有效期限内随机,内存不足时,从设定了有效期限的密钥中随机选择一个密钥进行废弃。 volatile-ttl (如果过期时间更早,内存不足,请在已过期的密钥中选择并丢弃过期时间更早的密钥。 默认情况下,Redis使用LRU算法。 LRU需要注意的是,许多keys不是进行LRU,而是从所有key中随机选择三个key,并在这三个key中进行LRU算法的选择; 这三个数字可以在redis配置文件中设置maxmeory-samples选项。

在大规模同时执行的情况下,可以使用集群方式进行存储器的扩展。

还想参考:好文章

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。