分类: Redis面试题

11 篇文章

Redis 的内存用完了会发生什么?
当Redis内存用完后,会发生以下几种情况: 一、写入操作失败 Redis达到最大内存限制后,默认行为是拒绝新的写入操作并返回错误。此时SET、HSET等写命令会报错"OOM command not allowed when used memory > 'maxmemory'",但读操作和删除操作仍可正常执行。这是为了保护数据一致性,防止数据…
一个Redis 实例最多能存放多少的 keys? List、Set、Sorted Set 他们最多能存放多少元素?
Redis 实例的 Key 数量限制 Redis 实例理论上最多可以存储 2^32 - 1 个 keys,即约 42.9 亿个 keys。这个限制来源于 Redis 内部哈希表实现使用的 32 位无符号整数索引机制。 不过在实际生产环境中,单机 Redis 实例经过测试可以稳定处理的 Key 数量约为 2.5 亿个。实际可存储的 Key 数量主要受…
redis中如果有大量的 key 需要设置同一时间过期,一般需要注意什么?
当需要为大量key设置同一时间过期时,需要注意以下几个关键问题: 1. 避免集中过期引发的性能问题 如果大量key在同一时刻过期,会导致Redis在短时间内处理大量删除操作,可能产生以下影响: CPU负载激增:Redis的定期删除策略会频繁触发,增加CPU消耗 请求延迟增加:删除操作可能阻塞主线程,影响其他请求的响应速度 缓存雪崩风险:如果这些ke…
Redis 集群之间是如何复制的?
Redis集群通过主从复制机制实现数据同步,核心包括全量同步和增量同步两种模式,采用异步复制方式保证最终一致性。 一、主从复制的基本架构 Redis集群采用一主多从的架构,每个主节点(Master)可以拥有多个从节点(Slave)。主节点负责处理写操作,从节点通过复制机制同步主节点数据,实现数据备份和读写分离。从节点默认只读,通过配置replica…
Redisson分布式锁为什么要用lua脚本实现,而不用事务?
Redisson使用Lua脚本实现分布式锁主要是为了解决原子性、网络开销和事务局限性三个核心问题。下面详细解释: 1. 原子性保证 这是最主要的原因。Lua脚本在Redis中执行时是原子性的,整个脚本在执行过程中不会被其他命令打断。 -- Redisson的加锁Lua脚本示例 if (redis.call('exists', KEYS[1]…
Redis是如何实现IO多路复用的?
Redis 通过使用操作系统提供的 IO 多路复用​ 机制来实现高性能的网络通信,使得单个线程能够同时处理多个客户端连接。以下是其核心实现方式: 1. 支持的 IO 多路复用模型 Redis 在运行时自动选择系统最高效的多路复用模型(按优先级): epoll(Linux) kqueue(FreeBSD/macOS) select(跨平台,但效率较低…
Redis 红锁能解决死锁问题吗?
这是一个非常经典的问题。简单来说,红锁(RedLock)本身并不能完全、通用地解决死锁问题,但它通过“自动过期”机制,可以预防和解决由锁持有者崩溃或长时间阻塞而导致的一种特定死锁场景。 下面我们来详细分解一下: 1. 什么是死锁? 死锁通常指在并发系统中,两个或以上的进程/线程因竞争资源而陷入的一种相互等待的僵局。经典的产生条件有四个(必须同时满足…
Redis的LFU淘汰策略如何解决时效性问题?
Redis 的 LFU(Least Frequently Used)淘汰策略通过引入时间衰减机制和概率递增算法,巧妙地平衡了访问频率与访问时效性,有效避免了“频率老化”问题。 下表清晰地展示了解决时效性问题的两个核心机制: 机制名称解决的核心问题实现方式配置参数时间衰减 (Time Decay)​过去频繁访问但现在不再活跃的键(频率老化)根据时间间…
Redis如何保证缓存与数据库的数据一致性?
Redis缓存与数据库的数据一致性是分布式系统中的一个经典挑战。没有完美的通用方案,只有针对特定场景的权衡选择。以下是主要的策略、场景分析和实践建议: 一、核心策略模式 1. Cache-Aside(旁路缓存) 最常见的模式,由应用层控制缓存: // 读流程 1. 读缓存,命中则返回 2. 未命中则读数据库 3. 写入缓存后返回 // 写流程 1.…
Redis的zset底层为什么用跳表而非B+树?
Redis 的 zset(有序集合)底层使用跳表(skip list)而非 B+ 树,主要基于以下几个方面的考量: 1. 实现复杂度 跳表的实现相对简单,代码量少,易于维护和调试。 B+ 树结构复杂,需要处理节点分裂、合并、重新平衡等操作,实现难度较大。 2. 内存性能表现 Redis 是内存数据库,数据完全存储在内存中。跳表作为纯内存数据结构,其…