Redis 中数据过期策略采用定期删除+惰性删除策略。
1、定期删除、惰性删除策略是什么?
定期删除策略:Redis 启用一个定时器定时监视所有的 key,判断key是否过期,过期的话就删除。这种策略可以保证过期的 key 最终都会被删除,但是也存在严重的缺点:每次都遍历内存中所有的数据,非常消耗 CPU 资源,并且当 key 已过期,但是定时器还处于未唤起状态,这段时间内 key 仍然可以用。 惰性删除策略:在获取 key 时,先判断 key 是否过期,如果过期则删除。这种方式存在一个缺点:如果这个 key 一直未被使用,那么它一直在内存中,其实它已经过期了,会浪费大量的空间。 2、定期删除+惰性删除策略是如何工作的?
这两种策略天然的互补,结合起来之后,定时删除策略就发生了一些改变,不在是每次扫描全部的 key 了,而是随机抽取一部分 key 进行检查,这样就降低了对 CPU 资源的损耗,惰性删除策略互补了为检查到的key,基本上满足了所有要求。但是有时候就是那么的巧,既没有被定时器抽取到,又没有被使用,这些数据又如何从内存中消失?没关系,还有内存淘汰机制,当内存不够用时,内存淘汰机制就会上场。Redis 内存淘汰机制有以下几种策略:
noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。(Redis 默认策略) allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的 Key。(推荐使用) allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个 Key。 volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的 Key。这种情况一般是把 Redis 既当缓存,又做持久化存储的时候才用。 volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个 Key。 volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的 Key 优先移除。 修改内存淘汰机制只需要在 redis.conf 配置文件中配置 maxmemory-policy 参数即可。
简单介绍了Redis的内存淘汰策略。 Redis的参数用于指定 Redis 能使用的最大内存,既可以在 redis.conf 配置文件中设置(单位Byte),也可以在运行过程中通过 命令动态修改。 将 设置为,或者没有设置该参数,则表示不进行内存限制。但对32位系统来说有一个隐性的限制条件是最多使用 3GB 内存,64位系统则无限制。 当达到内存限制时(maxmemory),Redis 将尝试根据
本文向大家介绍Redis 淘汰策略有哪些?相关面试题,主要包含被问及Redis 淘汰策略有哪些?时的应答技巧和注意事项,需要的朋友参考一下 volatile-lru:从已设置过期时间的数据集(server. db[i]. expires)中挑选最近最少使用的数据淘汰。 volatile-ttl:从已设置过期时间的数据集(server. db[i]. expires)中挑选将要过期的数据淘汰。 vo
本文向大家介绍请你说一说数据库索引相关面试题,主要包含被问及请你说一说数据库索引时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索引的一个主要目的就是加快检索表中数据的方法,亦即能协助信息搜索者尽快的找到符合限
本文向大家介绍请你说一说数据库事务相关面试题,主要包含被问及请你说一说数据库事务时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要
本文向大家介绍请你说一说TCP/IP数据链路层的交互过程相关面试题,主要包含被问及请你说一说TCP/IP数据链路层的交互过程时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 网络层等到数据链层用mac地址作为通信目标,数据包到达网络等准备往数据链层发送的时候,首先会去自己的arp缓存表(存着ip-mac对应关系)去查找改目标ip的mac地址,如果查到了,就讲目标ip的mac地址封装到链路层数
主要内容:1 Redis设置key过期时间,2 Redis过期key删除策略简单介绍了Redis如何设置key过期时间,以及Redis过期key删除策略。 1 Redis设置key过期时间 Redis支持为所有类型的数据设置过期时间,对于类型,只需要使用命令或者命令: 对于某个key重新设置值,将会清除该key目前关联的过期时间。更常见的设置过期时间方式是依靠命令来设置或者更新过期时间为ttl秒/毫秒,依靠 命令来设置或者更新过期时间为timestamp 所指定的 秒数/