文档章节

Redis 数据过期策略

大大梁
 大大梁
发布于 2017/06/21 16:10
字数 551
阅读 3
收藏 0

阅读全文

 

1、设置过期时间

  • expire key time(以秒为单位)--这是最常用的方式
  • setex(String key, int seconds, String value)–字符串独有的方式

注意

  • 除了字符串自己独有设置过期时间的方法外,其他方法都需要依靠expire方法来设置时间
  • 如果没有设置时间,那缓存就是永不过期
  • 如果设置了过期时间,之后又想让缓存永不过期,使用persist key

 

2、三种过期策略

 

Redis key过期的方式有三种:

    被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key

    主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key

    当前已用内存超过maxmemory限定时,触发主动清理策略

 

被动删除(惰性删除)

只有key被操作时(如GET),REDIS才会被动检查该key是否过期,如果过期则删除之并且返回NIL。

  1、这种删除策略对CPU是友好的,删除操作只有在不得不的情况下才会进行,不会其他的expire key上浪费无谓的CPU时间。

  2、但是这种策略对内存不友好,一个key已经过期,但是在它被操作之前不会被删除,仍然占据内存空间。如果有大量的过期键存在但是又很少被访问到,那会造成大量的内存空间浪费。expireIfNeeded(redisDb *db, robj *key)函数位于src/db.c。

但仅是这样是不够的,因为可能存在一些key永远不会被再次访问到,这些设置了过期时间的key也是需要在过期后被删除的,我们甚至可以将这种情况看作是一种内存泄露----无用的垃圾数据占用了大量的内存,而服务器却不会自己去释放它们,这对于运行状态非常依赖于内存的Redis服务器来说,肯定不是一个好消息

 

阅读全文

本文转载自:

大大梁
粉丝 0
博文 225
码字总数 0
作品 0
私信 提问
你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
2018/09/25
422
0
Redis内存淘汰策略,看这一篇就够了!

Redis作为当前最常用的开源内存数据库,性能十分高,据官方数据表示Redis读的速度是110000次/s,写的速度是81000次/s 。而且Redis支持数据持久化,众多数据结构存储,master-slave模式数据备份...

云季科技
05/17
59
0
Redis与Memcached的区别

memcached和redis的区别 区别: 1、数据类型不同,memcached只支持key-value,redis支持String,List,Map,set,sorted Set 2、memcached保存在内存中,redis内存和文件里面都有保存,宕机之...

underA
2013/05/15
146
0
redis数据淘汰策略

redis 每服务客户端执行一个命令的时候,会检测使用的内存是否超额。如果超额,即进行数据淘汰。 在 redis 中,允许用户设置最大使用内存大小 server.maxmemory,在内存限定的情况下是很有用...

sliver_xu
2016/08/11
226
0
Redis的内存回收机制

Redis的内存回收机制主要体现在一下两个方面: 删除过期时间的键对象 删除过期键对象 :多行删除用于当客户端读取带有超市属性的键时,如果已经超过键设置的过期时间,会执行删除操作并返回空...

JackY-Ji
2018/01/16
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

友元函数强制转换

友元函数强制转换 p522

天王盖地虎626
昨天
5
0
js中实现页面跳转(返回前一页、后一页)

本文转载于:专业的前端网站➸js中实现页面跳转(返回前一页、后一页) 一:JS 重载页面,本地刷新,返回上一页 复制代码代码如下: <a href="javascript:history.go(-1)">返回上一页</a> <a h...

前端老手
昨天
4
0
JAVA 利用时间戳来判断TOKEN是否过期

import java.time.Instant;import java.time.LocalDateTime;import java.time.ZoneId;import java.time.ZoneOffset;import java.time.format.DateTimeFormatter;/** * @descri......

huangkejie
昨天
4
0
分页查询

一、配置 /*** @author beth* @data 2019-10-14 20:01*/@Configurationpublic class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ ......

一个yuanbeth
昨天
6
0
在LINQPad中使用Ignite.NET

LINQPad是进行.NET开发的一款优秀工具,非常有利于Ignite.NET API的快速入门。 入门 下载LINQPad:linqpad.net/Download.aspx,注意要选择64位操作系统的AnyCPU版本; 安装Ignite.NET的NuGet...

李玉珏
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部