redis查询到已经过期数据原因
1个回答
展开全部
1、惰性删除。
也称被动删除,当数据过期后,并不会马上删除。而是等到有请求访问时,对数据检查,如果数据过期,则删除数据。
优点:不需要单独启动额外的扫描线程,减少了CPU资源的损耗。
缺点:大量的过期数据滞留内存中,需要主动触发、检查、删除,否则会一直占用内存资源。
2、定期删除。每隔一段时间,默认100ms,Redis会随机挑选一定数量的Key,检查是否过期,并将过期的数据删除。
原因一:
跟 Redis 的版本有关系,Redis 3.2 之前版本,读从库并不会判断数据是否过期,所以有可能返回过期数据。
解决方案:
升级Redis的版本,至少要3.2 以上版本,读从库,如果数据已经过期,则会过滤并返回空值。
原因二:
跟过期时间的设置方式有关系,我们一般采用 EXPIRE 和 PEXPIRE,表示从执行命令那个时刻开始,往后延长 ttl 时间。严重依赖于 开始时间 从什么时候算起。
EXPIRE:单位为秒
PEXPIRE:单位为毫秒
解决方案:
可以采用Redis的另外两个命令,EXPIREAT 和 PEXPIREAT,相对简单,表示过期时间为一个具体的时间点。避免了对开始时间从什么时候算起的依赖。
EXPIREAT:单位为秒
PEXPIREAT:单位为毫秒
也称被动删除,当数据过期后,并不会马上删除。而是等到有请求访问时,对数据检查,如果数据过期,则删除数据。
优点:不需要单独启动额外的扫描线程,减少了CPU资源的损耗。
缺点:大量的过期数据滞留内存中,需要主动触发、检查、删除,否则会一直占用内存资源。
2、定期删除。每隔一段时间,默认100ms,Redis会随机挑选一定数量的Key,检查是否过期,并将过期的数据删除。
原因一:
跟 Redis 的版本有关系,Redis 3.2 之前版本,读从库并不会判断数据是否过期,所以有可能返回过期数据。
解决方案:
升级Redis的版本,至少要3.2 以上版本,读从库,如果数据已经过期,则会过滤并返回空值。
原因二:
跟过期时间的设置方式有关系,我们一般采用 EXPIRE 和 PEXPIRE,表示从执行命令那个时刻开始,往后延长 ttl 时间。严重依赖于 开始时间 从什么时候算起。
EXPIRE:单位为秒
PEXPIRE:单位为毫秒
解决方案:
可以采用Redis的另外两个命令,EXPIREAT 和 PEXPIREAT,相对简单,表示过期时间为一个具体的时间点。避免了对开始时间从什么时候算起的依赖。
EXPIREAT:单位为秒
PEXPIREAT:单位为毫秒
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
壹寰(深圳)科技文化有限公司
2021-03-27 广告
2021-03-27 广告
要找正规专业的公司,行业口碑也比较重要。以上内容如果还觉得不够全面,也可以沟通下壹寰(深圳)科技文化有限公司。91数据恢复是壹寰(深圳)科技文化有限公司旗下专业数据恢复品牌,91数据恢复专注于勒索病毒数据恢复、勒索病毒数据修复、数据库修复、...
点击进入详情页
本回答由壹寰(深圳)科技文化有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询