1.前言

redis作为一种非关系性数据库,常用来做缓存,不妨来了解下其key的过期策略。

过期字典:reids将所有过期的键值都放在一个字典中,而这个字典就叫做过期字典。

键空间:服务器中的每个数据库都由一个redis.h/redisDb结构表示,其中redisDb结构的dict字典保存了数据库中的所有键值对,将这个字典称为键空间。

2.过期策略

策略 概述
定期删除

每隔一段时间就对一些key进行检查,然后删除这些过期的key。其有两种模式:

slow模式:定时执任务,默认执行频率10hz(10次/s),每次不超过25ms

fast模式:执行频率不固定,但两次间隔的时间不低于2ms,每次耗时不超过1ms

惰性删除 服务端不主动删除,当客户端在获取某个 key时,redis 会检查一下这个key是否过期?如果过期就会删除并返回null

当然,默认采用的是 定期删除+惰性删除。即使如此,还是会出现一种情况,若定期删除漏掉了很多过期key,而客户端又没有去获取这些key,那么这些大量的过期key就会造成内存耗尽,岂不是凉凉?

不怕,此时reids会走内存淘汰机制。目前最常用的是allkeys-lru,当内存不足以容纳新写入数据时,从键空间中移除最近最少使用的 key。

Redis之key的过期策略的更多相关文章

  1. redis中key的过期键删除策略

    Redis过期键删除策略 Redis key过期的方式有三种: 被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key 主动删除:由于惰性删除策略无法保证冷数据被及时删 ...

  2. PHP 面试官问:你说说Redis的几个过期策略?

    在使用redis时,一般会设置一个过期时间,当然也有不设置过期时间的,也就是永久不过期.当设置了过期时间,redis是如何判断是否过期,以及根据什么策略来进行删除的. 设置过期时间 expire ke ...

  3. redis 下key的过期时间详解 :expire

    memcached 和 redis 的set命令都有expire参数,可以设置key的过期时间.但是redis是一个可以对数据持久化的key-value database,它的key过期策略还是和me ...

  4. redis持久化机制与过期策略

    RDB的持久化策略 (快照方式,默认持久化方式): 按照规则定时将内存中的数据同步到磁盘,它有以下4个触发场景. 1. 自己配置的快照规则  vim /redis/bin/ redis.conf:按照 ...

  5. Redis之key的淘汰策略

    淘汰策略概述 redis作为缓存使用时,在添加新数据的同时自动清理旧的数据.这种行为在开发者社区众所周知,也是流行的memcached系统的默认行为. redis中使用的LRU淘汰算法是一种近似LRU ...

  6. spring boot 实现redis 的key的过期监听,执行自己的业务

    最近几天进一步了解了一下redis,发现了key的过期监听功能,实现方式如下: 在redis的配置文件 redis.conf 中找到"EVENT NOTIFICATION"模块, ...

  7. Redis设置Key的过期时间 – EXPIRE命令

    EXPIRE key seconds 为给定 key 设置生存时间,当 key 过期时(生存时间为 0 ),它会被自动删除. 操作key对生存时间的影响 生存时间可以通过使用 DEL 命令来删除整个 ...

  8. redis过期策略和内存淘汰机制

    目录 常见的删除策略 redis使用的过期策略:定期删除+惰性删除 定期删除 惰性删除 为什么要采用定期删除+惰性删除2种策略呢? redis内存淘汰机制 常见的删除策略 1.定时删除:在设置键的过期 ...

  9. [redis] -- 过期策略篇

    过期处理 定期删除 redis默认是每隔 100ms 就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除 惰性删除 定期删除可能会导致很多过期 key 到了时间并没有被删除掉.所以就 ...

  10. redis 过期策略你知道多少,看完文章你会不自觉说喔哦

    Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除.你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割. 你还可以进一步站在死神的角度 ...

随机推荐

  1. Day2 备战CCF-CSP练习

    Day2 题目描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项. 每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔. 这些字符串中的第一个为该命令行工具的名字,由小写字母组成 ...

  2. POLIR-Society-Organization-Politics: “How”-政治的: Versatility+历史+应然+实然:零食“脱氢乙酸钠”:"衣食住行|生育工作挣钱用钱|"

    POLIR-Society-Organization-Politics: "How"-政治的: Versatility+历史+应然+实然:人民群众的"衣食住行|生育工作挣 ...

  3. SciTech-Mathmatics-Probability+Statistics-数学专业社区(math.stackexchange.com/questions) + examples of "a set of distributions indexed by a parameter"

    Sampling Distribution Could some give an examples of "a set of distributions indexed by a param ...

  4. win11专业版微软账户登录不上的问题

    有不少雨林木风系统的小伙伴,都知道win11系统是支持微软账户和本地账户两种登录方式,选择微软账户登录,可以同步edge浏览器记录和xbox游戏数据,有官方正版win11系统用户说他的win11系统里 ...

  5. 深度分析:Win11 22454新预览版又有什么变化?

    起了一大早,深度技术小编又看到微软官方面向Insider会员推送两个预览版,分别是Dev通道的Build 22454,Beta和Release Preview通道的Build 22000.184. 其 ...

  6. Win11纯净版电脑开机就死机到问题

    有电脑基地的用户说他升级更新win11纯净版系统,用了一段时间以后,不知道咋了,突然发现电脑开机就死机了,怎么都进不去系统,那这个问题要如何解决呢?其实,这可能是因为我们安装的应用程序出现冲突,或是驱 ...

  7. ugui生成雷达图

    网上找了下没啥好的代码,自己结合资料优化了下,支持创建任意边数的雷达图 原理是采用CanvasRender创建Mesh using System.Collections; using System.C ...

  8. vagrant 学习笔记-------(使用 putty 连接 vagrant 创建的虚拟机)

    vagrant 的安装步骤可以参照如下网页:https://www.yuque.com/wukong-zorrm/xmk0v0/ct7lzoggzsli227t 使用 vagrant 创建虚拟机: 方 ...

  9. InnoDB为什么不用跳表,Redis为什么不用B+树?

    要回答为什么 InnoDB(MySQL 的存储引擎) 使用 B+ 树而不是跳表(Skip List),以及为什么 Redis 使用跳表而不是 B+ 树,需要分析两者的数据结构特性.使用场景和设计目标. ...

  10. MyEMS开源能源管理系统核心代码解读017

    MyEMS开源能源管理系统适用于建筑.工厂.商场.医院.园区的电.水.气等能源数据采集.分析.报表,还有光伏.储能.充电桩.微电网.设备控制.故障诊断.工单管理.人工智能优化等可选功能.资深专业团队开 ...