跳转到主要内容

标签: Redis

  • Redis 缓存设计

    发布于 Redis

    Redis缓存高可用

    引入缓存能显著降低数据库压力,但设计不当会引入穿透、击穿、雪崩等经典问题。下面逐一拆解成因与对策。 三大经典问题 缓存穿透:查询不存在的数据,缓存与数据库都查不到,请求每次都打到 DB。应对:缓存空值(短过期)、布隆过滤器拦截非法 key。 缓存击穿:某个热点 key 过期瞬间,大量并发同时回源 DB。应对:互斥锁(只放一个线程重建)、逻辑过期(异步刷新)、热点 key 不过期。 缓存雪崩:大量 key 同一时刻集中失效,或 Redis 整体不可用,DB 被冲垮。应对:过期时间加随机抖动、多级缓 …

    引入缓存能显著降低数据库压力,但设计不当会引入穿透、击穿、雪崩等经典问题。下面逐一拆解成因与对策。 三大经典问题 缓存穿透:查询不存在的数据,缓存与数据库都查不到,请求每次都打到 DB。应对:缓存空值(短过期)、布隆过滤器拦截非法 key。 缓存击穿:某个热点 key 过期瞬间,大量并发同时回源 DB。应对:互斥锁(只放一个线程重建)、逻辑过期(异步刷新)、热点 key 不过期。 缓存雪崩:大量 key 同一时刻集中失效,或 Redis 整体不可用,DB 被冲垮。应对:过期时间加随机抖动、多级缓 …

  • Redis 数据结构与底层实现

    发布于 Redis

    Redis数据结构底层实现

    Redis 对外暴露五种常用类型,但底层有多种编码(encoding)。根据数据规模自动在不同编码间转换,是它兼顾内存与性能的关键。 核心底层结构 SDS(简单动态字符串):相比 C 字符串记录长度、预分配空间,避免缓冲区溢出并支持二进制安全。 ziplist / listpack:连续内存的紧凑列表,节省空间,适合小数据量。 linkedlist:双向链表,元素多时替代 ziplist。 dict(字典):哈希表,使用链地址法解决冲突,渐进式 rehash 避免阻塞。 skiplist(跳表 …

    Redis 对外暴露五种常用类型,但底层有多种编码(encoding)。根据数据规模自动在不同编码间转换,是它兼顾内存与性能的关键。 核心底层结构 SDS(简单动态字符串):相比 C 字符串记录长度、预分配空间,避免缓冲区溢出并支持二进制安全。 ziplist / listpack:连续内存的紧凑列表,节省空间,适合小数据量。 linkedlist:双向链表,元素多时替代 ziplist。 dict(字典):哈希表,使用链地址法解决冲突,渐进式 rehash 避免阻塞。 skiplist(跳表 …