首页 > spring data redis 超时设置无效的问题

spring data redis 超时设置无效的问题

Long expireTime=redisTemplate.boundValueOps(key).getExpire();

        int countNow = Integer.valueOf(redisTemplate.boundValueOps(key).get());

获取超时时间expiretime 为0
但是我他妈的居然能拿到key对应的值,是不是redis存磁盘了,还是redis删除数据的机制原因?测试的能行,生产环境就不行了!!


redis服务器,集群设置,主从,从的没有数据,原因未知。用虚拟的一台,作数据漂移到主redis服务器,set进去的key在主服务器不可见,虚拟的一台也看不打,但是能取到,从的redis服务没有数据。关键是能通过method获取到expiretime为零,但是能取到key对应的值。现在乜有其他redis服务器了,数据存去哪了,为什么expire为零,还是能获取key对应的值???
最后关掉了从的redis,重启主服务器,把IP指向主redis服务器之后,问题解决。
原因不明。
数据飘去哪了?

补充:
如果你设置了一个有过期时间的key-value的不稳定key,那么请注意!如果用了setexpiretime为0的方法去删除key的方式,有可能redis不会立即删除。
用spring data redis 的hasKey的方法来判断是否存在键,然后你就掉坑里了,因为即使expiretime为0,这个key,很可能还没有被删除掉,
redis对过期键采用了lazy expiration:在访问key的时候判定key是否过期,如果过期,则进行过期处理。其次,每秒对volatile keys 进行抽样测试,如果有过期键,那么对所有过期key进行处理。
这个巡视速度,跟什么设置有关,效率怎么样,我们一无所知。所以,当你设置了不稳定的key,而且又要用hasKey,做判断时,请注意,要获取key的过期时间expiretime,自己再做判断。

《Redis 设计与实现》第一版,里面有原理解释,感兴趣的可以搜索看下

【热门文章】
【热门文章】