![7d499ab03f8191b1b0ae32a575b27399.png](https://i-blog.csdnimg.cn/blog_migrate/d6f8112d93b52eb3d6f399035242879d.png)
Redis常见问题
- 雪崩:缓存大面积同时失效,请求直接打到数据库上。(设置随机失效时间解决,或热点数据永不过期)
- 穿透:绕过缓存数据,直接请求数据库。(设置参数校验解决,布隆过滤器)
- 击穿:缓存击穿是指一个热点Key,在失效瞬间,直接请求到数据库上。(热点数据永不过期)
特点
- 单线程,通过I/O多路复用模型监听多个Socket。
- 多路I/O复用模型,非阻塞IO。
- redis是单线程的,keys命令会导致线程阻塞,直到命令结束服务才能恢复。可以使用scan
持久化
- RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。
- AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入日志。
淘汰策略
- FIFO 淘汰最早数据
- LRU 剔除最近最少使用的数据
- 定期删除:100ms随机抽取一些设置过期时间的key,检查过期状态,过期就删除。
- 惰性删除:查询时检查是否过期,过期就删除。
3.LFU 剔除最近使用频率最低的数据
基础数据类型
- String:简单缓存,缓存Session
- Hash
- List:有序列表,消息队列
- Set:去重
- Sorted Set:去重和排序
高级数据类型
- Bitmap:位图
- HyperLogLog
- Geospatial
- Pub/Sub:发布订阅
- Pipeline:批命令
双写模式
最经典的缓存+数据库读写的模式,就是 Cache Aside Pattern
- 读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存,同时返回响应。
- 更新的时候,先更新数据库,然后再删除缓存。
缓存淘汰和缓存修改:区别是下次请求是否命中缓存。
Sentine选举策略
- slave 的 priority 设置的越低,优先级越高。
- 同等情况下,slave 复制的数据越多优先级越高。
- 相同的条件下 runid 越小越容易被选中。