Redis总结

一、Redis 简介

Redis 是一个开源的内存结构存储系统。可作于数据库缓存消息中间件

二、常用数据类型

  1. String 字符串。
  2. Hash 散列。
  3. List 列表。
  4. Set 集合。
  5. ZSet 有序集合。
  6. Stream 流(用于消息队列)。

三、 持久化方案

  1. RDB(Redis Database)。每间隔一段时间生成一个快照,快照生成则覆盖,只有一个快照文件。这种是Redis默认的方案。优点是恢复快,缺点是可能损失的数据会大。
  2. AOF(Append Only File)。系统记录每一个进程插入或修改的日志,文件会一直增加。优点是恢复慢,由于是同步新增日志,所以损失可以忽略不计。

四、为什么快

  1. 完全基于内存。要么是数据在内存,要么是数据在硬盘,索引在内存。
  2. 数据结构简单。
  3. 单线程,减少了不必要的上下文切换和竞争,不用考虑各种锁的性能消耗。
  4. 使用多路复用 IO 模型,非阻塞 IO。

五、缓存穿透、击穿、雪崩

缓存穿透

缓存穿透就是穿过缓存进入数据库。正常来说使用缓存的流程是这样的。

  1. 根据一个 key 从缓存中获取数据。
  2. 获取到数据就返回。没有获取到数据,则从数据库中获取数据。
  3. 获取到数据就将数据放入缓存,然后返回,没有则直接返回。

如果知道一个肯定不存在的数据的 key,请求就会访问数据库,如果恶意攻击的话,会导致数据库压力过大。

解决方案:

  1. 如果一个 key 为空的话,可以将这个 null 值存到缓存中,设置一个过期时间。
  2. 接口层增加拦截校验。

缓存击穿

缓存击穿是指从一个点击穿缓存,进入数据库。和缓存穿透不一样,缓存穿透是高频率请求,缓存击穿是对热点数据进行高频率访问的时候,该缓存突然过期,导致所有的请求集中在一点进入了数据库。

解决方案:

  1. 设置热点数据永远不过期。
  2. 布隆过滤器。
  3. 接口限流与熔断,降级。
  4. 加互斥锁。

缓存雪崩

缓存雪崩是指在某个时间段内,缓存集中过期失效。

解决方案:

  1. 过期时间不要太集中,给范围随机。
  2. 热点数据永不过期。

六、集群模式

主从复制

分为一个 master 节点和多个 slave 节点,slave 节点从 master 同步数据。可实现读写分离,由 master 写,从 slave 读。

哨兵模式

哨兵模式是基于主从复制模式的,在此基础上多了一个哨兵的角色,哨兵可以监控 master 和 slave 的状态,在 master 出现问题时,能够从 slave 中选取一个节点作为新的 master 来保证系统正常工作。

Cluster 模式

其实是多个主从复制模式的的集合,每一个主从复制相互连接,当 A 的 master 挂掉之后,连接这个 master 的其它 master 节点将会去连接 A 的 slave 节点,从而保证正常工作。

七、优化方案

  1. 如果一个对象有很多数据需要缓存,尽量将这个对象存储到一个 hash 中,而不是为每个属性都设置一个 key。

其它问题

  1. 为什么网络模块采用单线程?

因为 Cpu 不是 Redis 的瓶颈,影响 Redis 性能的是内存和网络带宽,所以没有上下文切换的单线程能很容易实现。

发布了5 篇原创文章 · 获赞 0 · 访问量 38
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 1024 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览