• http://www.redis.cn/commands/expire.html
  • http://www.redis.cn/topics/lru-cache.html

内存管理

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

过期时间

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

  • 过期expire是以对象为单位,比如一个 hash 结构的过期是整个 hash 对象的过期,而不是其中的某个子 key。
  • 如果一个字符串已经设置了过期时间,然后你调用了 set 方法修改了它,它的过期时间会消失。
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...

淘汰过期的 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的配置项:

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)

redis 缓存过期默认时间_Redis 过期时间与内存管理相关推荐

  1. c# redis 如何设置过期时间_Redis 过期时间与内存管理

    http://www.redis.cn/commands/expire.html http://www.redis.cn/topics/lru-cache.html 内存管理 当 Redis 作为缓存 ...

  2. redis map 过期时间_redis 过期时间

    设置key的过期时间,超过时间后,将会自动删除该key.在Redis的术语中一个key的相关超时是不确定的. 超时后只有对key执行DEL命令或者SET命令或者GETSET时才会清除. 这意味着,从概 ...

  3. java 过期策略实现_Redis过期策略和内存淘汰机制

    Redis缓存作为提高系统性能最好的方式相信大家对其一定不陌生,各位作为秃头老码农不仅需要掌握Redis的基础用法还得了解Redis的相关原理,比如Redis过期策略和内存淘汰机制. 大家都知道,Re ...

  4. redistemplate hash 过期时间_Redis过期监听——订单超时-取消

    最近在做电商项目,涉及支付超时处理的几种方式.[记录哈使用redis监听处理] 提交订单的时候,支付-超过了有效时间则支付状态自动更新为已取消. 欢迎交流 redis过期监听的实现: 1.修改redi ...

  5. redis decr 防止超卖_Redis基础、高级特性与性能调优——一篇文章搞定

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍.之后概览Redis提供的高级能力,并在部署.维护.性能调优等多个方面进行更深入的介绍和指导. ...

  6. redis 缓存 2023面试题总结

    文章目录 1. 说说你对缓存的理解,什么是缓存 2. 哪些地方可以用到缓存,或者说缓存的分类 3. client端缓存具体有哪些,怎么实现 4. http缓存 Cache-Control 5. ngi ...

  7. Redis缓存三大问题

    缓存三大问题 ​ 我们都知道,Redis的Key都存在一个ttl(time to live)过期时间,Redis默认的是永不过期.Redis作为缓存,一方面可以提升速度,但也会带来三大常见的缓存问题: ...

  8. Redis系列(二):Redis缓存穿透和缓存雪崩是什么?

    一.Redis穿透 缓存穿透现象:用户想要查询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库查询.发现也没有,于是本次查询失败.当用户很多的时候,缓存都没有命中,于是都 ...

  9. 一篇吃透Redis缓存穿透、雪崩、击穿问题

    前言:在学Redis之前我们查询数据的时候都是直接查询数据库的,但是这样会有一个潜在的问题:"如果用户量很大,所有请求都去访问数据库,那么会使数据库压力过大,导致性能下降甚至宕机" ...

最新文章

  1. android读取剪切板的方法,Android复制粘贴剪切板内容的一种方法
  2. 计算机无法用u盘重装系统,没有u盘电脑开不了机重装系统的方法步骤详细教程 - 系统家园...
  3. NPOI office操作
  4. webpack3的CommonsChunkPlugin插件详解
  5. 无监督学习 | DBSCAN 原理及Sklearn实现
  6. C++11 并发指南七(C++11 内存模型一:介绍)
  7. vim删除多行_vim文本编辑器
  8. powershell自动化操作AD域、Exchange邮箱系列(4)—批量导入邮箱/域账号(文件)
  9. Linux 修改环境变量
  10. python123 测验三_作业要求 20190919-3 效能分析
  11. android 监听通知栏点击事件,android使用NotificationListenerService监听通知栏消息
  12. 算法与数据结构 第3章 高级排序算法中 归并算法改进
  13. android 驱动开发教程,Android驱动开发入门
  14. 对计算机专业的认识和未来规划,对计算机专业的认识及学业规划
  15. ecshop 添加php标签,ECSHOP模板制作修改自定义标签,ECSHOP标签大全,ECSHOP模板标
  16. android exoplayer 直播流,使用Exo-Media Player播放RTMP直播
  17. Linux 压缩、解压、打包操作
  18. Robosense速腾激光雷达使用坐标变换功能
  19. html生成日期表,如何从此HTML表格提取日期?
  20. Java官方教程(七-3)Using Objects 使用对象(2021.4.10)

热门文章

  1. Android使用ImageView显示网络图片
  2. iOS开发之裁剪圆形头像
  3. HP MSA2000-硬盘leftover-trust enable处理
  4. eclipse 3.6的VE配置 Visual Editor for eclipse3.6
  5. C++内联函数的学习
  6. NetBeans 时事通讯(刊号 # 125 - Nov 17, 2010)
  7. 贪心算法之——会场安排(nyoj14)
  8. hdu 1861-游船出租
  9. 不写画面的网页程序设计,Web API、Web Service、WCF Service
  10. nginx+lua (一)