我们都知道,Redis 是 key-value 数据库,我们可以设置 Redis 中缓存的 key 的过期时间。那么 Redis 缓存失效(key 过期)的故事要从 EXPIRE 这个命令说起,EXPIRE 命令允许用户为某个 key 指定其过期时间,当 key 超过这个时间后,我们应该就访问不到这个值了。接下来我们继续深入探究这个问题,Redis 缓存失效机制是如何实现的呢?也就是当 key 超过过期时间后 Redis 如何处理 key 呢?

过期策略通常有以下三种:

定时过期:每个设置过期时间的 key 都需要创建一个定时器,到过期时间就会立即清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的 CPU 资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。

惰性过期:只有当访问一个 key 时,才会判断该 key 是否已过期,过期则清除。该策略可以最大化地节省 CPU 资源,却对内存非常不友好。极端情况可能出现大量的过期 key 没有再次被访问,从而不会被清除,占用大量内存。

定期过期:每隔一定的时间,会扫描一定数量的数据库的 expires 字典中一定数量的 key,并清除其中已过期的 key。该策略是前两者的一个折中方案。通过调整定时扫描的时间间隔和每次扫描的限定耗时,可以在不同情况下使得 CPU 和内存资源达到最优的平衡效果。(expires 字典会保存所有设置了过期时间的 key 的过期时间数据,其中,key 是指向键空间中的某个键的指针,value 是该键的毫秒精度的 UNIX 时间戳表示的过期时间。键空间是指该 Redis 集群中保存的所有键。)

Redis 中同时使用了惰性过期和定期过期两种过期策略。</

redis缓存失效时间设为多少_Redis缓存过期失效机制相关推荐

  1. redis缓存失效时间设为多少_Redis有效时间设置及时间过期处理

    本文对redis的过期处理机制做个简单的概述,让大家有个基本的认识. Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间.作为一个缓存数据库,这是非常实用的.如我 ...

  2. redis缓存失效时间设为多少_java操作Redis缓存设置过期时间的方法

    关于Redis的概念和应用本文就不再详解了,说一下怎么在java应用中设置过期时间. 在应用中我们会需要使用redis设置过期时间,比如单点登录中我们需要随机生成一个token作为key,将用户的信息 ...

  3. redis一般缓存什么样数据_门户数据展示_Redis缓存数据

    学习主题:门户数据展示_Redis缓存数据 一.Redis_3主3从集群环境搭建 谈单你对读写分离和主从同步的理解 读写分离:Master负责写数据的操作,salve负责读数据的操作 主从同步:sal ...

  4. redis 查询缓存_Redis缓存总结:淘汰机制、缓存雪崩、数据不一致....

    在实际的工作项目中, 缓存成为高并发.高性能架构的关键组件 ,那么Redis为什么可以作为缓存使用呢?首先可以作为缓存的两个主要特征: 在分层系统中处于内存/CPU具有访问性能良好, 缓存数据饱和,有 ...

  5. redis和sqlserver数据同步_redis缓存和mysql数据库同步

    转载自:https://www.cnblogs.com/lanbo203/p/7494587.html 解决方案 一.对强一致要求比较高的,应采用实时同步方案,即查询缓存查询不到再从DB查询,保存到缓 ...

  6. redis mysql 雪崩_Redis缓存雪崩问题

    一.什么是缓存雪崩 缓存雪崩就是指缓存由于某些原因(比如 宕机.cache服务挂了或者不响应)整体crash掉了,导致大量请求到达后端数据库,从而导致数据库崩溃,整个系统崩溃,发生灾难. 下面的就是一 ...

  7. 分布式缓存redis 方案_Redis缓存和MySQL数据一致性方案详解

    在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到Redis,而不是直接访问MySQL等数据库. 这个业务场景,主要是解决读数 ...

  8. redis一般缓存什么样数据_Redis缓存和MySQL数据一致性方案详解

    关注我,可以获取最新知识.经典面试题以及技术分享 一.需求起因 在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节.所以,就需要使用redis做一个缓冲操作,让请求先访问到redis, ...

  9. redis 缓存过期默认时间_redis缓存过期机制

    笔者在线上使用redis缓存的时候发现即使某些查询已经设置了无过期时间的缓存,但是查询仍然非常耗时.经过排查,发现缓存确实已经不存在,导致了缓存击穿,查询直接访问了mysql数据库.因为我们用的是公司 ...

最新文章

  1. 直播系统开发:功能创新提升用户留存
  2. ubuntu 18.04 添加快快捷方式
  3. linux 英伟达 分辨率,配置nVidia显卡修改Ubuntu分辨率
  4. 第三次学JAVA再学不好就吃翔(part61)--基本数据类型包装类
  5. 作者:刘峰(1974-),男,中国科学院计算机网络信息中心高级工程师
  6. mysql项目数据库文档_项目mysql数据库
  7. 设计模式(十三): 命令模式
  8. 有向有权图的电阻------给你出道题
  9. 程序员探案之 Python 和 Redis 的“第三者”
  10. [Objective C] 获取类和对象的运行时状态
  11. Python接口自动化实战(第二阶段)- unittest框架
  12. PLC液压控制系列之比例流量阀结构分析
  13. Git操作之Untracked Files Prevent Checkout
  14. FTL介绍 -- FTL映射
  15. Tomcat的appBase和docBase解析
  16. 数据结构之线性表(顺序表、链表、栈、队列)
  17. Redis源码解析1:SDS--完美的C字符串替代
  18. 一张图快速get浅层辛普森公式
  19. 阮一峰 / ES6 数组的解构赋值
  20. Matlab建模---数据拟合

热门文章

  1. 菜鸡学Unity 之 了解 Unity 中的五个视图窗口
  2. C++ 函数的递归调用
  3. 集群、分布式、负载均衡区别(转)
  4. ANT 下载,ant的配法及用法
  5. stanford句法分析词性表
  6. VS使用C++开发桌面程序
  7. error execution phase preflight: couldn‘t validate the identity of the API Server: Get
  8. MATLAB-矩阵的输入
  9. java字符串流与管道流
  10. ADFS 概念与基本开发介绍 (1)