优点
- 缓存(和数据库的关系,只能保证最终一致性,不能保证强一致性)
- 高性能高并发
- 可实现分布式锁
- 单线程工作模型
- 避免了频繁上下文切换
- 采用非阻塞的I/O多路复用机制(多个I/O流入队并复用同一个线程运行)
内存模型
Key
指向五种内存模型
String
:常用于缓存等Hash
:常用于原生结构性缓存等List
:可实现简单队列,可实现分页Set
:可用于与计算差并交集(比如双方喜好的计算),还具备去重特性SortedSet
(或称ZSet
):可实现排行榜(增量操作较耗时,读取操作通过跳跃表实现了高性能)、延时任务,范围查询等
持久化策略
- RDB快照策略
- 在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
- 有点:体积小、快照时资源消耗较少、还原速度快
- 缺点:数据不完整、易丢失数据
- AOF日志策略
- 记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集
- 后台可对 AOF 文件进行重写以缩减其体量
- 优点:不易丢失数据
- 缺点:日志时资源消耗较多、体积容易过大、还原速度较慢
- RDB&AOF混合策略
- Redis 重启时, 它会优先使用 AOF 文件来还原数据集,其次考虑RDB快照
- 关闭策略
- 不提供持久化及恢复支持
键值淘汰机制
- 过期键值删除策略(键值过期时间记录在过期表中,过期键值不保证立刻释放。没有过期时间的键值近似为持久的)
- 定期删除(定期渐进地查找过期的键值)
- 惰性删除(读取键值时候检查是否过期)
- 内存不足时的释放策略
- 淘汰策略配置
maxmemory-policy
- noeviction:阻止新的写入报错
- allkeys-lru:全量键值中移除最近最少使用key
- allkeys-random:全量键值中随机移除某个key
- volatile-lru:移除最少使用的带ttl的key
- volatile-random:随机移除带ttl的key
- volatile-ttl:移除过期时间更早的带ttl的key
- 淘汰策略配置
常用操作
info # 服务概况和统计信息
dbsize #当前库中key数量
monitor #监控操作
#### 库操作 ####
select dbname #选库
#### 键操作 ####
keys key_pattern #搜索匹配正则的key
#### 值操作 ####
type key #检查key值类型
del key #删除key值
flushdb #清空当前库下key的值
flushall #清空所有库下key的值
常见故障
- 缓存雪崩
- 大批量缓存同时失效或者缓存重建期间收到大并发请求,从而导致系统性能急剧下降
- 可能原因:大量缓存采用了相同过期时间、机器重启等等
- 解决方案:失效时间追加随机值,采用队列或加锁等方式来单线程更新缓存