前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Redis 删除、淘汰策略

Redis 删除、淘汰策略

作者头像
BUG弄潮儿
发布2021-07-22 10:11:19
4620
发布2021-07-22 10:11:19
举报
文章被收录于专栏:JAVA乐园

Redis 删除策略

当有 key 设置了过期时间,就会有删除策略

  • 定时删除

以 CPU 定时执行的方式换 Redis 内存(因为会使用轮询的方式一直耗用 CPU 资源),及时性不高,但是内存不会浪费

  • 惰性删除

在 get 的时候,先判断 key 是否会过期,如果过期了,会进行删除,会导致有大量的垃圾数据占用内存空间(因为过期的数据在没有进行 get 时,就会一直存在)

  • 定期删除
代码语言:javascript
复制
hz 10
  1. 在 Redis 启动的时候读取配置文件 hz 的值,默认为 10
  2. 每秒执行 hz 次,
  3. 每次执行会一次执行:serverCron() --> databaseCron() --> activeExpireCyle() 三个函数
  4. activeExpireCyle() 对每个 expires[*] (过期库,* 代表对应的数据库,一共 0~15 个,每一个过期库都会和 Redis 的数据库对应)进行逐一检查,每次执行 250ms/hz,默认情况就是 25ms
  5. 对某个 expires[ * ] 检测时,随机挑选 N(默认 20)个 key 检查
  6. 如果 key 超时,删除 key
  7. 如果一轮中删除的 key 的数量 > N * 25%,循环该过程
  8. 如果一轮中删除的 key 的数量 < N * 25%,检查下一个 expires[ * ]

current_db 用于记录 activeExpireCyle() 进入哪一个 expire[ * ] 执行,如果时间到了,那么下次根据 current_db 继续执行

Reids采用的是惰性删除 + 定期删除两种策略结合使用。

Redis 淘汰策略

当 Redis 内存满了,在进行 set 的时候,就会触发淘汰策略

  • 逐出算法

LRU(Least recently used):最近最少使用,针对时间

LFU(Least frequently used):最近最不频繁使用,针对访问次数

  • maxmemory:最大可使用内存,占用物理内存的比例,默认为 0,表示不限制,生产环境一般根据需求设置,通常在 50 以上
  • maxmemory-policy:达到最大内存后,对挑选出来的数据进行删除策略(volatile:针对过期数据的策略,allkeys:针对所有数据的策略)
  • volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最长时间没有使用的数据(推荐)
  • allkeys-lru:从数据集(server.db[i].dict)中挑选最长时间没有使用的数据淘汰
  • volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰(推荐)
  • volatile-lfu:从已设置过期时间的数据集(server.db[i].expires)中挑选最近使用次数最少的数据淘汰
  • allkeys-lfu:从数据集(server.db[i].dict)中挑选最近使用次数最少的数据淘汰
  • volatile-random:从已设置过期时间的数据集(server.db[i].expires)中随机挑选数据淘汰
  • allkeys-random:从数据集(server.db[i].dict)中随机挑选数据淘汰
  • noeviction:驱逐,禁止驱逐数据(默认策略)
  • maxmemory-sample:每次选取待删除的数据个数,选取数据时并不会进行全表扫描,采用随机获取数据的方式作为待检测删除数据,默认选择 5 个样本进行检测
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 BUG弄潮儿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Redis 删除策略
  • Redis 淘汰策略
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档