Redis 过期时间与内存管理「终于解决」

Redis 过期时间与内存管理「终于解决」http://www.redis.cn/commands/expire.html http://www.redis.cn/topics/lru-cache.html 内存管理 当 Redis 作为缓…

Redis 过期时间与内存管理

内存管理

当 Redis 作为缓存使用时(此时缓存仅作为热点数据提高服务的访问性能),需要考虑内存的限制,以及如何随着业务的增长,仅保留热点数据。

Redis 过期时间与内存管理「终于解决」

过期时间

Redis 所有的数据结构都可以设置过期时间,时间到了,Redis 会自动删除相应的对象。 需要注意的:

  • <font color=”blue”>过期expire是以对象为单位,比如一个 hash 结构的过期是整个 hash 对象的过期,而不是其中的某个子 key。</font>
  • <font color=”red”>如果一个字符串已经设置了过期时间,然后你调用了 set 方法修改了它,它的过期时间会消失。</font>
127.0.0.1:6379> set  k1 aaa
OK
127.0.0.1:6379> expire k1 600
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 597
127.0.0.1:6379> set k1  bbb
OK
127.0.0.1:6379> ttl k1
(integer) -1...

代码100分

淘汰过期的 Keys

Redis keys过期有两种方式:被动和主动方式。

  • 被动

当一些客户端尝试访问它时,key会被发现并主动的过期。

  • 主动

当然,这样是不够的,因为有些过期的keys,永远不会访问他们。

无论如何,这些keys应该过期,所以定时随机测试设置keys的过期时间。所有这些过期的keys将会从密钥空间删除。

具体就是Redis每秒10次做的事情:

  • 1.测试随机的20个keys进行相关过期检测。
  • 2.删除所有已经过期的keys。
  • 3.如果有多于25%的keys过期,重复步奏1. 这是一个平凡的概率算法,基本上的假设是,我们的样本是这个密钥控件,

并且我们不断重复过期检测,直到过期的keys的百分百低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys。

内存淘汰

redis.conf 或 使用 CONFIG 命令配置 Redis的配置项:

代码100分
maxmemory 100mb
maxmemory-policy [策略]

淘汰策略:

  • LRU – 最近很少没碰

对最近很少使用(所有或有过期时间的)的key优先淘汰

  • allkeys-lru 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
  • volatile-lru 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
  • LFU – 没碰多少次

对使用频率最少(所有或有过期时间的)的key优先淘汰

  • allkeys-lfu 尝试回收回收使用频率最少的键(LFU),使得新添加的数据有空间存放。

  • volatile-lfu 尝试回收使用频率最少的键(LFU),但仅限于在过期集合的键,使得新添加的数据有空间存放。

  • volatile-ttl 对有过期时间的key中ttl最小的部分优先淘汰

  • noeviction 返回错误

  • allkeys-random: 回收随机的键使得新添加的数据有空间存放。

  • volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。

近似LRU算法

Redis的LRU算法并非完整的实现。这意味着Redis并没办法选择最佳候选来进行回收,也就是最久未被访问的键。

相反它会尝试运行一个近似LRU的算法,通过对少量keys进行取样,然后回收其中一个最好的key(被访问时间较早的)。

Redis LRU有个很重要的点,你通过调整每次回收时检查的采样数量,以实现调整算法的精度。这个参数可以通过以下的配置指令调整:


maxmemory-samples 5

@SvenAugustus (https://my.oschina.net/langxSpirit)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8520.html

(0)
上一篇 2023-02-26
下一篇 2023-02-26

相关推荐

  • 如何升级Python

    如何升级PythonPython是一门非常流行的编程语言。每当新版本的Python发布时,都会有一些新特性和修复了一些问题,因此及时升级Python版本是非常重要的。下面是关于如何升级Python版本的方法:

    2024-08-30
    22
  • Python实现线性规划

    Python实现线性规划线性规划是一种重要的数学优化模型,它的应用范围涵盖工业、运输、金融等多个领域。

    2024-09-01
    24
  • mysql忘记密码解决方案[通俗易懂]

    mysql忘记密码解决方案[通俗易懂]先给大家介绍windows下mysql忘记密码的解决方案。   Windows下的实际操作如下   1.关闭正在运行的MySQL。   2.打开DOS窗口,转到mysqlin目录。   3.输入m…

    2023-02-12
    146
  • 数据库规范_sqlserver云服务器

    数据库规范_sqlserver云服务器2022年6月7日,北京时间11:30,随着高考第一场科目语文考试结束,全国各地的高考作文题也正式在公众面前“登台亮相”。今年全国乙卷的高考作文题目是“跨越,再跨越”,双奥之城闪耀世界,两次奥运会展示

    2023-05-21
    150
  • 为什么你需要混沌工程以及 Chaos Mesh®「终于解决」

    为什么你需要混沌工程以及 Chaos Mesh®「终于解决」信心的毁灭与重建 在我最开始学习编程的时候,我一直觉得写程序是很简单的事情,程序总是按照我的想法串行的执行,给一个输入,总是有着符合预期的固定输出。那时候写代码,可能大的挑战在于理解分支,循环,但无…

    2023-03-20
    159
  • [go-redis] go操作redis数据库[亲测有效]

    [go-redis] go操作redis数据库[亲测有效]go,redis,go-redis/redis,NoSQL

    2023-05-27
    153
  • 什么是流处理

    什么是流处理流处理正变得像数据处理一样流行。流处理已经超出了其原来的实时数据处理的范畴,它正在成为一种提供数据处理(包括批处理),实时应用乃至分布式事务的新方法的技术。 1、什么是流处理? 流处理是不断合并新数据

    2023-03-18
    154
  • BOS只读状态修改

    BOS只读状态修改1 update T_META_OBJECTTYPE set FSUPPLIERNAME ='PAEZ',FPACKAGEID =null

    2023-01-27
    167

发表回复

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