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

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

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

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

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

希望对你有帮助...

redis过期策略是自带的,可配置:

  1. volatile-lru:, 内存不够,就在设置了过期的key中淘汰最老的key
  2. allkeys-lru :利用lur移除任何key
  3. volatile-random 移除设置过过期时间的随机key
  4. allkeys-random 无差别的随机移除。
  5. volatile-ttl 移除即将过期的key(minor TTL)
  6. noeviction 不移除任何key,只是返回一个写错误 ,

简单点,两种方案

  1. 定时器,定时轮询java缓存中的数据,过期删除
  2. 惰性删除,取数据的时候,先判断是否超期,超期移除

第一种应该消耗资源会大一点