这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天
RDB vs AOF
- 机制:整体持久化+子进程+二进制压缩 《===》日志记录变化操作+文本存储+每秒记录/操作记录
- 优劣:
- 文件大小,恢复效率,(数据大时)启动效率
- redis运行效率
- 数据安全性
- 使用:
- 优先加载AOF,优先用AOF恢复数据
过期键的删除策略
- expire 字典 (ptr to all expire keys, timestamp)
- 定期定量 扫描删除,可平衡CPU和内存的资源使用
- 惰性删除,推迟到访问key时,判断过期并删除,对内存不友好
缓存雪崩、缓存穿透、缓存击穿
概念
- 缓存key大面积失效,缓存 数据库都没有的Key,缓存没有 但数据库有的Key
- 同一时间高并发访问,导致请求集中导向DB,使得DB崩溃
解决
- 给缓存设置随机过期时间;缓存预热;加互斥锁
- 接口层面过滤;缓存设置空值;布隆过滤器,过滤不存在的key
- 热Key设置不过期;加互斥锁
事务
-
MULTI EXEC WATCH DISCARD 立即执行的关键字
MULTI EXEC类似打包执行;事务队列 FIFO。
WATCH 提供CAS行为,对监视的Key执行条件执行,在EXEC阶段判断是否执行事务
-
错误处理
- 在EXEC前,收集命令时的错误,会使得事务失败
- 在EXEC后的错误,不会影响事务,即不支持检查程序员自己的逻辑错误
-
为了性能,不支持回滚
Redis 和 Memcached 有什么区别?
同
-
都是基于内存的数据库,都可以当做缓存使用。
-
都有过期策略。
-
性能都好。
异
- Redis 支持的数据类型丰富(String、Hash、List、Set、ZSet),而 Memcached 只支持最简单的 key-value 数据类型;
- Redis 支持持久化,有RDB、AOF两种模式,而 Memcached 没有持久化功能,重启或者挂掉后,无法恢复
- Redis 原生支持集群模式,Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;
- Redis 功能丰富,支持发布订阅模型、Lua 脚本、事务等功能。而 Memcached 不支持