我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Redis 过期时间与内存管理

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Redis 过期时间与内存管理

Redis 过期时间与内存管理

  • http://www.redis.cn/commands/expire.html
  • http://www.redis.cn/topics/lru-cache.html

内存管理

当 Redis 作为缓存使用时(此时缓存仅作为热点数据提高服务的访问性能),需要考虑内存的限制,以及如何随着业务的增长,仅保留热点数据。

过期时间

Redis 所有的数据结构都可以设置过期时间,时间到了,Redis 会自动删除相应的对象。 需要注意的:

  • 过期expire是以对象为单位,比如一个 hash 结构的过期是整个 hash 对象的过期,而不是其中的某个子 key。
  • 如果一个字符串已经设置了过期时间,然后你调用了 set 方法修改了它,它的过期时间会消失。
127.0.0.1:6379> set  k1 aaa
OK
127.0.0.1:6379> expire k1 600
(integer) 1
127.0.0.1:6379> ttl k1
(integer) 597
127.0.0.1:6379> set k1  bbb
OK
127.0.0.1:6379> ttl k1
(integer) -1...

淘汰过期的 Keys

Redis keys过期有两种方式:被动和主动方式。

  • 被动

当一些客户端尝试访问它时,key会被发现并主动的过期。

  • 主动

当然,这样是不够的,因为有些过期的keys,永远不会访问他们。

无论如何,这些keys应该过期,所以定时随机测试设置keys的过期时间。所有这些过期的keys将会从密钥空间删除。

具体就是Redis每秒10次做的事情:

  • 1.测试随机的20个keys进行相关过期检测。
  • 2.删除所有已经过期的keys。
  • 3.如果有多于25%的keys过期,重复步奏1. 这是一个平凡的概率算法,基本上的假设是,我们的样本是这个密钥控件,

并且我们不断重复过期检测,直到过期的keys的百分百低于25%,这意味着,在任何给定的时刻,最多会清除1/4的过期keys。

内存淘汰

redis.conf 或 使用 CONFIG 命令配置 Redis的配置项:


maxmemory 100mb
maxmemory-policy [策略]

淘汰策略:

  • LRU - 最近很少没碰

对最近很少使用(所有或有过期时间的)的key优先淘汰

  • allkeys-lru 尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。
  • volatile-lru 尝试回收最少使用的键(LRU),但仅限于在过期集合的键,使得新添加的数据有空间存放。
  • LFU - 没碰多少次

对使用频率最少(所有或有过期时间的)的key优先淘汰

  • allkeys-lfu 尝试回收回收使用频率最少的键(LFU),使得新添加的数据有空间存放。

  • volatile-lfu 尝试回收使用频率最少的键(LFU),但仅限于在过期集合的键,使得新添加的数据有空间存放。

  • volatile-ttl 对有过期时间的key中ttl最小的部分优先淘汰

  • noeviction 返回错误

  • allkeys-random: 回收随机的键使得新添加的数据有空间存放。

  • volatile-random: 回收随机的键使得新添加的数据有空间存放,但仅限于在过期集合的键。

近似LRU算法

Redis的LRU算法并非完整的实现。这意味着Redis并没办法选择最佳候选来进行回收,也就是最久未被访问的键。

相反它会尝试运行一个近似LRU的算法,通过对少量keys进行取样,然后回收其中一个最好的key(被访问时间较早的)。

Redis LRU有个很重要的点,你通过调整每次回收时检查的采样数量,以实现调整算法的精度。这个参数可以通过以下的配置指令调整:


maxmemory-samples 5

@SvenAugustus (https://my.oschina.net/langxSpirit)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Redis 过期时间与内存管理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Redis 过期时间与内存管理

http://www.redis.cn/commands/expire.htmlhttp://www.redis.cn/topics/lru-cache.html内存管理当 Redis 作为缓存使用时(此时缓存仅作为热点数据提高服务的访问性能),需要考虑内存的
Redis 过期时间与内存管理
2018-12-02

redis注解设置缓存过期时间

如何在使用 redis 注解时设置缓存过期时间?导入 redis 依赖项。使用 @cacheable 和 @cacheput 注解的 ttl 属性。ttl 属性指定缓存的过期时间,单位为秒。Redis 注解设置缓存过期时间问题:如何在使用
redis注解设置缓存过期时间
2024-04-19

redis缓存过期时间如何设置

在Redis中,可以通过使用EXPIRE命令来设置缓存的过期时间。语法如下:```EXPIRE key seconds```其中,key表示要设置过期时间的缓存键,seconds表示过期时间,以秒为单位。当缓存键的过期时间到达指定时间后,R
2023-08-30

如何为redis设置缓存过期时间

你可以使用EXPIRE命令来为Redis设置缓存过期时间。下面是设置缓存过期时间的步骤:1. 使用EXPIRE命令设置缓存的过期时间。该命令的语法如下:```EXPIRE key seconds```其中,`key`是你要设置过期时间的缓存
2023-09-11

Redis 事务与过期时间详细介绍

Redis 事务与过期时间详细介绍 一、Redis事务:Redis中支持事务,事务即为当我们需要执行几条命令时,要么这几条命令都不执行,要么都执行: 1、开始事务写入:multi2、然后写入命令,注意写完事务要执行的每条命令之后回车即可,命
2022-06-04

Redis过期时间的设计与实现代码

目录1. 设置过期时间示例:2. 过期键的存储结构3. 设置过期时间4. 删除过期键的策略5. 检查并删除过期键6. 获取过期时间总结定期删除activeExpireCycle函数详细解析关键步骤解析1. 初始化变量2. 确定时间限制3.
Redis过期时间的设计与实现代码
2024-08-25

Redis过期键与内存淘汰策略深入分析讲解

目录一、Redis数据库的组织方式1.1 redisServer结构定义1.2 redisDb 结构定义1.3 redisdb初始化二、过期键2.1 设置键的过期时间2.2 过期键的判定2.3 过期键的删除策略2.3.1 惰性删除的实现2.
2022-11-28

Redis的过期策略和内存淘汰策略最全总结与分析

文章前言提到内存管理,我们就需要考虑Redis的内存过期策略和内存淘汰机制。该文章便从这两方面入手,分享一些在Redis内存方面相关的基础知识。文章中使用的示例版本为Redis5.0版本。内存过期策略内存过期策略主要的作用就是,在缓存过期之后,能够及时的将失效
Redis的过期策略和内存淘汰策略最全总结与分析
2016-07-21

C++ 成员函数详解:对象方法的内存管理与生命周期

成员函数内存管理与生命周期:内存分配:成员函数在对象创建时分配内存。对象生命周期:成员函数与对象绑定,对象创建时创建,对象销毁时销毁。构造函数:在对象创建时调用,用于初始化数据。析构函数:在对象销毁时调用,用于释放资源。C++ 成员函数详解
C++ 成员函数详解:对象方法的内存管理与生命周期
2024-04-29

CentOS搭建web服务器时需注意的内存管理与优化

在搭建 CentOS 上的 web 服务器时,内存管理与优化是非常重要的。以下是一些需要注意的方面:1. 内存大小:确保服务器有足够的内存来处理网站的流量和请求。根据网站的规模和预期的访问量,确定合适的内存大小。2. 内存分配:合理分配内存
2023-10-09

编程热搜

目录