redis为什么快
  1. 内存数据库,纯内存操作所以快。
  2. IO模型是IO多路复用,非阻塞IO
  3. 单线程处理请求,避免上下文切换。也不会有死锁产生。
  4. 数据结构简单
  5. 专门实现了底层模型,通信机制采用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限制
缓存雪崩
大片的缓存统一时间失效了,大量的流量一下子就打到关系数据库了,打崩数据库,造成整个系统的瘫痪
解决:

  1. 缓存时间不要设置的一致,让缓存不要同一时间大面积失效。
  2. 应用程序使用单线程恢复缓存,减少对数据库的访问压力(访问数据库进行限流)。

客户端不归还连接
(自身经历)在我实习时期有过一个事故,使用jedis客户端没有归还连接,导致后续的client一直拿不到连接。最终结果是公司项目业务暂停了半个小时。
解决:记得归还连接。
redis适用的场景
redis做分布式锁
Redisson


李沁春
17 声望1 粉丝

喜欢运动,骑行、打羽毛球、打乒乓球等。也喜欢打桌游,玩狼人杀、剧本杀等烧脑游戏。