Please enable JavaScript.
Coggle requires JavaScript to display documents.
Redis - Coggle Diagram
Redis
数据类型
String
Hash
List
Set
ZSet
bitmap, geo index, streams...
缓存与数据库一致性
先更新缓存,再更新数据库
容易出现不一致情况
先更新数据库,再更新缓存
高并发情况下,有一定概率存在不一致情况
先删缓存,再更新数据库
容易出现不一致情况
延时双删: 删缓存-写数据库-Sleep-删缓存
先更新数据库,再删缓存
缓存写入速度快,较小概率出现不一致情况,但是会降低缓存命中率
缓存常见问题
缓存雪崩
大量数据同时过期
均匀设置过期时间
互斥锁 - 保证同一时间只有一个请求来构建缓存
双key策略 - 主key 设置过期时间,备key永不过期,主key访问不到时,直接返回备key数据,更新时同时更新主key与备key
后台更新缓存
缓存击穿
热点数据过期
缓存穿透
限制非法请求
缓存空值或者默认值
使用布隆过滤器
持久化
AOF
RDB
过期删除与内存淘汰策略
过期删除
定时删除
惰性删除
定期删除
内存淘汰策略
不淘汰,达到内存限制并且写入新数据,触发OOM
volatile-random: 随机淘汰设置了过期时间的任意键值
volatile-ttl: 优先淘汰更早过期的键值
volatile-lru: 淘汰所有设置了过期时间的键值中,最久未使用的键值
volatile-lfu: 淘汰所有设置了过期时间的键值中,最少使用的键值
allkeys-random: 随机淘汰任意键值
allkeys-lru: 淘汰整个键值中最久未使用的键值
allkeys-lfu: 淘汰整个键值中最少使用的键值
StackExchange.Redis
Timeout 问题
ConnectionPool
序列化 ProtoBuf
Cluter 问题
MGET vs Pipeline
分布式锁
setnx + ex
set key val ex nx
Redlock