redis为什么快
- 内存数据库,纯内存操作所以快。
- IO模型是IO多路复用,非阻塞IO
- 单线程处理请求,避免上下文切换。也不会有死锁产生。
- 数据结构简单
- 专门实现了底层模型,通信机制采用RESP通信协议。
5种常用的数据结构
- String——字符串
- Hash——字典
- List——列表
- Set——集合
- Sorted Set——有序集合
redis架构
单机
主从
哨兵
哨兵的工作原理
集群
集群模式选举
集群模式的水平扩展
为什么redis集群有13684个槽
redis的数据持久化
AOF
RDB
AOF+RDB
redis致命问题
大key阻塞
redis是单线程模型的,虽然不会有死锁和上下文切换,但是一旦阻塞就可怕了,所有的指令都排队在一个队列种,一旦发生阻塞,整个项目业务都要受到影响。
缓存穿透
恶意攻击者使用一些无效的key高并发访问,redis没有就请求就直接跑到关系型数据库了,打崩数据库,造成整个系统的瘫痪。
解决:
IP限制
安全校验,校验无效key
布隆过滤器解决缓存穿透
缓存击穿
恶意攻击者使用一个key一直高并发访问,当这个key失效的瞬间,大量的流量一下子就打到关系数据库了,打崩数据库,造成整个系统的瘫痪。
解决:
热点数据一直更新缓存。
IP限制
缓存雪崩
大片的缓存统一时间失效了,大量的流量一下子就打到关系数据库了,打崩数据库,造成整个系统的瘫痪
解决:
- 缓存时间不要设置的一致,让缓存不要同一时间大面积失效。
- 应用程序使用单线程恢复缓存,减少对数据库的访问压力(访问数据库进行限流)。
客户端不归还连接
(自身经历)在我实习时期有过一个事故,使用jedis客户端没有归还连接,导致后续的client一直拿不到连接。最终结果是公司项目业务暂停了半个小时。
解决:记得归还连接。
redis适用的场景
redis做分布式锁
Redisson
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。