如愿却不如愿 2022-01-07 15:45 采纳率: 57.1%
浏览 264
已结题

如何在java代码中实现redis的定期删除?

在redis缓存数据的时候,会设置过期时间,但是往往过期时间过了之后会自动删除(好像),怎么实现redis中的定期删除策略呢?

  • 写回答

3条回答 默认 最新

  • little_how 2022-01-07 16:20
    关注

    redis删除过期数据的策略
    1.惰性删除,就是访问该key时,发现key已过期,就进行删除并且返回空
    2.随机删除,后台线程会scan redis设置了ttl的key,发现过期也会删除,如果删除的数据超过一定阈值,将继续scan重复操作
    间隔时间默认是100ms

    也就是说redis其实是存在一些过期数据没被删除的

    所以java也可以按照这个方式做:
    惰性删除比较容易,定时随机删除就稍微复杂一点,可以使用数组+链表的方式存储设置了ttl的key,这样也可以基于下标范围来进行scan,然后进行定时删除。数组+链表要好好考虑效率和空间的权衡,这个就需要你自己慢慢思考实现了,也可以不使用数组+链表,使用tree结构的数据将过期时间从小到大排,然后遍历就行,实现方式很多,就看你想怎么做了。

    希望对你有帮助...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月17日
  • 已采纳回答 1月9日
  • 修改了问题 1月7日
  • 创建了问题 1月7日

悬赏问题

  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件