一、有效时间设置:

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

  1. EXPIRE 将key的生存时间设置为ttl秒
  2. PEXPIRE 将key的生成时间设置为ttl毫秒
  3. EXPIREAT 将key的过期时间设置为timestamp所代表的的秒数的时间戳
  4. PEXPIREAT 将key的过期时间设置为timestamp所代表的的毫秒数的时间戳

其实以上几种处理方式都是根据PEXPIREAT来实现的,设置生存时间的时候是redis内部计算好时间之后在内存处理的,最终的处理都会转向PEXPIREAT。 
1、2两种方式是设置一个过期的时间段,就是咱们处理验证码最常用的策略,设置三分钟或五分钟后失效,把分钟数转换成秒或毫秒存储到redis中。 
3、4两种方式是指定一个过期的时间 ,比如优惠券的过期时间是某年某月某日,只是单位不一样。

二、过期处理

过期键的处理就是把过期键删除,这里的操作主要是针对过期字段处理的。 
Redis中有三种处理策略:定时删除、惰性删除和定期删除。

  1. 定时删除:在设置键的过期时间的时候创建一个定时器,当过期时间到的时候立马执行删除操作。不过这种处理方式是即时的,不管这个时间内有多少过期键,不管服务器现在的运行状况,都会立马执行,所以对CPU不是很友好。
  2. 惰性删除:惰性删除策略不会在键过期的时候立马删除,而是当外部指令获取这个键的时候才会主动删除。处理过程为:接收get执行、判断是否过期(这里按过期判断)、执行删除操作、返回nil(空)。
  3. 定期删除:定期删除是设置一个时间间隔,每个时间段都会检测是否有过期键,如果有执行删除操作。这个概念应该很好理解。

看完上面三种策略后可以得出以下结论: 
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文件不会受过期键的影响。如果有过期键未被删除,会执行以下动作: 
客户端请求时(过期键):

  1. 从数据库充删除被访问的过期键;
  2. 追加一条DEL 命令到AOF文件;
  3. 向执行请求的客户端回复nil(空)。

复制:

  1. 主服务器删除过期键之后,向从服务器发送一条DEL指令,告知删除该过期键。
  2. 从服务器接收到get指令的时候不会对过期键进行处理,只会当做未过期键一样返回。(为了保持主从服务器数据的一致性)
  3. 从服务器只有接到主服务器发送的DEL指令后才会删除过期键。

Redis设置有效时间相关推荐

  1. Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存-2

    问题 上一篇Spring Boot Cache + redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置,说了一种时间方式,直接扩展注解的Value值,如: @Override @Cach ...

  2. Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存,时间支持在配置文件中配置

    问题描述 Spring Cache提供的@Cacheable注解不支持配置过期时间,还有缓存的自动刷新. 我们可以通过配置CacheManneg来配置默认的过期时间和针对每个缓存容器(value)单独 ...

  3. Spring Boot缓存实战 Redis 设置有效时间和自动刷新缓存

    时间方式,直接扩展注解的Value值,如: @Override @Cacheable(value = "people#${select.cache.timeout:1800}#${selec ...

  4. SpringBoot @Cacheable Redis 设置缓存过期时间

    1.x 设置 @Bean @Primary public CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManag ...

  5. linux redis 设置日志,linux上redis怎么动态看日志

    异常一: make[2]: cc: Command not found 异常原因:没有安装gcc 解决方案:yum install gcc-c++ 异常二: zmalloc.h:51:31: erro ...

  6. redis设置主从复制-slave Replication--解决报错:(error) READONLY You can't write against a read only slave.

    我的个人博客:zhang0peter的个人博客 主节点按照我上篇文章的内容配好redis后就可以了:ubuntu, debian 安装redis,设置开机自动启动和密码,允许外网访问 在从节点安装好r ...

  7. Window将Redis设置为开机启动

    Window将Redis设置为开机启动 大家平时可能都会有这样的烦恼:虽然安装并启动了redis,但是只要一关闭cmd窗口,redis就会消失.所以要把redis设置成windows下的服务. 也就是 ...

  8. java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper

    在讨论这个问题之前,我们先来看一个业务场景: 系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用户下单. 由于系统有 ...

  9. Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动

    Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动 >>>>>>>>>>>>>> ...

最新文章

  1. jQuery on()方法绑定动态元素的点击事件无效
  2. 简介I/O向量、sendv、writev
  3. 固定顶部指定div不滑动
  4. python折线图样式_Python金融应用之图表制作(二)
  5. 大型科技公司架构:中台模式的爱与恨
  6. C++ 中重载 + 操作符的正确方法
  7. WAMPSERVER 启动后打开LOCALHOST是一张IIS7的图片的解决
  8. MongoDB 安装与启动
  9. fiddler 对https支持
  10. ubuntu16.04卸载火狐,Amazon
  11. 数据结构严蔚敏 栈基本操作 C语言实现
  12. 网页游戏开发流程及常用技术大盘点
  13. CAD快捷键命令 mac版
  14. 平面标定(Homography变换)
  15. html如何图片转换成word文档格式,怎样把图片转换成word文档格式
  16. php楼梯有n级台阶,楼梯问题的一些解决方法
  17. tableau度量值计算_度量值与度量名称
  18. 【CentOS-7.4】Sphinx 安装与简单配置
  19. 码分多址(CDMA),码片序列简单理解
  20. ArcGIS教程:多面体

热门文章

  1. ai-人工智能的本质和未来_人工智能的历史-从一开始
  2. 数据库(MySQL)学习笔记(六)
  3. 剑网3哪5区人哪个服务器最多,剑网3哪个区服人最多?只有选对了游戏区才能体会到多人的乐趣...
  4. matlab读.h5文件
  5. 别让灵魂赶不上我们的脚步
  6. 软件工程导论课程作业——网上二手书店需求分析
  7. python做面板数据_用Python做数据分析的基本步骤(持续修改更新)
  8. 全球及中国电子手环行业市场前瞻及投资可行性研究报告2022-2027年
  9. 2019登高架设作业在线免费模拟考试系统及模拟题库
  10. 单片机c语言too many actual parameter,出现 too many actual parameters 怎么回事??? 是不是程序有问题???...