本文对redis的过期处理机制做个简单的概述,让大家有个基本的认识。

Redis中有个设置时间过期的功能,即对存储在redis数据库中的值可以设置一个过期时间。作为一个缓存数据库,这是非常实用的。如我们一般项目中的token或者一些登录信息,尤其是短信验证码都是有时间限制的,按照传统的数据库处理方式,一般都是自己判断过期,这样无疑会严重影响项目性能。

一、有效时间设置:

redis对存储值的过期处理实际上是针对该值的键(key)处理的,即时间的设置也是设置key的有效时间。Expires字典保存了所有键的过期时间,Expires也被称为过期字段。

四种处理策略

EXPIRE 将key的生存时间设置为ttl秒

PEXPIRE 将key的生成时间设置为ttl毫秒

EXPIREAT 将key的过期时间设置为timestamp所代表的的秒数的时间戳

PEXPIREAT 将key的过期时间设置为timestamp所代表的的毫秒数的时间戳

其实以上几种处理方式都是根据PEXPIREAT来实现的,设置生存时间的时候是redis内部计算好时间之后在内存处理的,最终的处理都会转向PEXPIREAT。

1、2两种方式是设置一个过期的时间段,就是咱们处理验证码最常用的策略,设置三分钟或五分钟后失效,把分钟数转换成秒或毫秒存储到redis中。

3、4两种方式是指定一个过期的时间 ,比如优惠券的过期时间是某年某月某日,只是单位不一样。

二、过期处理

过期键的处理就是把过期键删除,这里的操作主要是针对过期字段处理的。

Redis中有三种处理策略:定时删除、惰性删除和定期删除。

定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。不过这种处理方式是即时的,不管这个时间内有多少过期键,不管服务器现在的运行状况,都会立马执行,所以对CPU不是很友好。

惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程为:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil(空)。

定期删除:定期删除是设置一个时间间隔,每个时间段都会检测是否有过期键,如果有执行删除操作。这个概念应该很好理解。

看完上面三种策略后可以得出以下结论:

4. 1、3为主动删除,2为被动删除。

5. 1是实时执行的,对CPU不是很友好,但是这在最大程度上释放了内存,所以这种方式算是一种内存优先优化策略。

6. 2、3为被动删除,所以过期键应该会存在一定的时间,这样就使得过期键不会被立马删除,仍然占用着内存。但是惰性删除的时候一般是单个删除,相对来说对CPU是友好的。

7. 定期键这种删除策略是一种让人很蛋疼的策略,它既有避免1、2两种策略劣势的可能,也有同时发生1、2两种策略劣势的可能。如果定期删除执行的过于频繁就可能会演变成定时删除,如果执行的过少就有可能造成过多过期键未被删除而占用过多内存,如果时间的设置不是太好,既可能占用过多内存又同时对CPU产生不好的影响。所以。使用定期删除的时候一定要把握好这个删除的时间点。存在即为合理,既然开发的时候有这种策略,就说明定期删除还是有他的优势的,具体大家可以自己琢磨。

三、主从服务器删除过期键处理

参考书上说的有三种:RDB持久化、AOF持久化和复制功能。

RDB:

1. 主服务器模式运行在载入RDB文件时,程序会检查文件中的键,只会加载未过期的,过期的会被忽略,所以RDB模式下过期键不会对主服务器产生影响。

2. 从服务器运行载入RDB文件时,会载入所有键,包括过期和未过期。当主服务器进行数据同步的时候,从服务器的数据会被清空,所以RDB文件的过期键一般不会对从服务器产生影响。

AOF:

AOF文件不会受过期键的影响。如果有过期键未被删除,会执行以下动作:

客户端请求时(过期键):

从数据库充删除被访问的过期键;

追加一条DEL 命令到AOF文件;

向执行请求的客户端回复nil(空)。

复制:

主服务器删除过期键之后,向从服务器发送一条DEL指令,告知删除该过期键。

从服务器接收到get指令的时候不会对过期键进行处理,只会当做未过期键一样返回。(为了保持主从服务器数据的一致性)

从服务器只有接到主服务器发送的DEL指令后才会删除过期键。

参考书籍:《Redis设计与实现》黄健宏著

---------------------

版权声明:本文为CSDN博主「月未明」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_35981283/article/details/70156422

redis缓存失效时间设为多少_Redis有效时间设置及时间过期处理相关推荐

  1. redis缓存失效时间设为多少_Redis缓存过期失效机制

    我们都知道,Redis 是 key-value 数据库,我们可以设置 Redis 中缓存的 key 的过期时间.那么 Redis 缓存失效(key 过期)的故事要从 EXPIRE 这个命令说起,EXP ...

  2. redis 失效时间单位是秒还是毫秒_Redis有效时间设置及时间过期处理

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

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

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

  4. Redis有效时间设置及时间过期处理

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

  5. laravel redis mysql_Laravel 5.1 Redis 缓存配合 MySQL 数据库实现「用户最后活跃时间」功能...

    前言 今日给 PHPHub 开发了记录用户「最后活跃时间」的小功能,现在趁着热乎将相关实现逻辑写出来,欢迎大家指出不足. 基本思路 通过 Middleware 捕获用户的所有请求: 记录用户的请求时间 ...

  6. Redis 缓存回收的7种策略volatile设置过期时间及allkeys所有数据范围内

    1.基础说明 当redis设置内存使用限制后,当达到内存限制时,Redis将尝试删除key(控制节点的最大使用内存) redis.conf中配置项maxmemory <bytes>或者控制 ...

  7. redis 将key的有效时间设置为不过期命令

    1.expire命令可以设置key的存活时间2.如果需要把有过期时间的key设置为不过期的,可以使用persist命令来持久化key PERSIST key

  8. 使用redis实现缓存_用下一个js实现一个简单的redis缓存

    使用redis实现缓存 For most websites, the changing pieces don't actually vary that often. That immutability ...

  9. Redis 缓存击穿,缓存穿透,缓存雪崩原因+解决方案

    一.前言 在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是 ...

最新文章

  1. composer安装laravel框架时未生成Vendor解决办法
  2. mysql技术内幕innodb存储引擎——表索引算法和锁_(转)Mysql技术内幕InnoDB存储引擎-表索引算法和锁...
  3. spark发行版笔记9
  4. IPhone 应用程序管理
  5. 这不关我的事,别烦我!
  6. javafx-TableView 行颜色设置
  7. Visual Studio Code 构建C/C++开发环境
  8. Zxing 的集成 ---- Maven 对应 Gradle 的写法
  9. ios整理(六)关于用富文本在tableview的cell去加载html字符串的优化方案
  10. 网络语音视频技术浅议(附多个demo源码下载)
  11. python3+selenium获取列表某一列的值
  12. 小甲鱼 C语言 19课 字符串的处理函数
  13. [电路笔记]正弦稳态电路分析
  14. 概率统计_假设检验——单边检验的接受域和拒绝域
  15. PaddlePaddle课程学习第二周笔记
  16. 计算机一级设置项目符号,重推计算机等级考试题库:一级MS Office第三章“项目符号和段落编号”...
  17. 网格交易法在交易中的应用
  18. 使用Mindstudio进行Pytorch模型量化压缩
  19. ThingsBoard教程(十):前端初级定制化
  20. PL/SQL软件如何调整背景颜色

热门文章

  1. 2021-08-30物联网控制技术(1)
  2. 电源完整性仿真流程梳理
  3. ansys em 19 reg_ansysedt.exe错误3221227010 reg_siwave.exe错误:3221227010
  4. linux 挂载3t硬盘分区,centos7挂载3T硬盘
  5. 信号--频谱--功率谱--能量谱
  6. 实验二 Python流程控制
  7. 中国数字标牌、数字告示系统
  8. 大数据四大常识,不会你敢说自己在做大数据?
  9. 图书销售公司薪酬管理系统
  10. 维持薪酬制度的公平性,是企业在设计薪酬体系时的第一步