redis脑图

1 引入

  • redis属于nosql,支持多样化数据,高性能

2 特点

  • 支持多种数据类型
  • 持久化
  • 高效率
  • 基于内存操作:Redis是单线程的,redis是基于内存操作,它的瓶颈取决于内存和网络带宽,不在CPU。多线程CPU会进行上下文切换,所以redis采用单线程效率是最高的。(基于磁盘操作选择多线程是因为,磁盘读取速度慢,多线程能够提高cpu的利用率)

3 数据类型

3.1 五种基本数据类型

  1. String字符串(可用于计数器,缓存等)
  2. List列表(底层是链表。可以当作栈,队列,阻塞队列来使用)
  3. Set集合(值不重复,可以用于且交集,如共同好友等)
  4. ZSet有序集合(相对Set多一个值,ZSet会根据该值排序,可用于排行榜之类的)
  5. Hash(本质跟String类似,key-value形式,hash多用于对象存储,String多用于字符串存储)

3.2 三种特殊数类型

  1. Geospatial(可以添加地理位置(经纬度),可以计算两地间的距离,或者查找某地周围元素,它底层是ZSet,可以使用ZSet相关命令操作Geospatial)
  2. Hyperloglog(可以求并集,可以用于统计网站访问量(同一个用户算一次访问),占用固定12kb内存,就可以统计2^64用户量,有0.81%错误率。如果不允许出错,可以使用set或自定义数据类型)
  3. Bitmap(位存储,只有0,1两个状态,用于统计两个状态的信息,如活跃,不活跃。如使用bitmap记录员工一年打卡记录,可以很快算出打卡天数)

4 事务

4.1 含义

  1. redis事务本质是一组命令的集合。reids事务没有隔离级别概念,事务命令加入队列后,要发起执行命令才执行。流程:开启事务(multi)-命令入队-执行事务(exec)

4.2 特点

  1. 单条命令是原子性,但事务不保证原子性
  2. 在命令入队后,可以使用discard取消事务
  3. 在入队的命令中,若命令本身有错,执行事务后所有命令不会生效。若是其中命令出现运行时异常(1/0),则执行事务时,其他命令生效,异常命令抛出异常。

4.3 Redis事务中的监控Watch(乐观锁)

  1. 悲观锁:做什么都加锁
  2. 乐观锁:只有更新数据时判断是否有人改过该数据,改过不执行。Redis中watch就是乐观锁。(先监控一个数据,在开启事务,加入命令执行时判断监控数据是否被修改,修改就会导致执行事务失败)

5 持久化

5.1 含义

  1. redis是内存数据库,如果不将内存中的数据保存到磁盘,一旦出现如断电情况,数据就会丢失

5.2 rdb

  1. 定义:在指定间隔内将内存中的数据集快照写入磁盘,恢复时将快照文件直接读到内存中
  2. 触发机制
    配置文件中的Sava规则满足时(如save 900 1表示900秒内,有至少1个内容修改就进行持久化操作。)
    执行flushall命令
    退出redis时
  3. 优缺点 
    优点:效率较高,适合大规模数据恢复
    缺点:因为是一定间隔时间进行复制,所以数据可能不完整

5.3 aof

  1. 定义:将所有执行过的写命令记录下来,恢复的时候再全部执行一遍(aof默认不开启)
  2. 触发机制
    配置文件中可以设置
    • appendfsync always # 每次修改都会 sync。数据完整,但消耗性能
    • appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据!
    • appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快!
      执行flushall命令
      退出redis时
  3. 优缺点
    优点:如果每次命令都同步,数据完整性会很好
    缺点:效率比rdb慢

6 发布订阅

  • 含义:是一种消息通信模式,可以用于实时聊天系统,订阅关注系统等,对于复杂场景可以使用消息中间件MQ
  • 组成:消息发送者,频道,消息订阅者
  • Redis-server维护一个字典,字典键就是一个个频道,字典值就是一个链表(保存所有订阅了该频道的客户端)。
  • 订阅频道:通过subscribe订阅某个频道(如:SUBSCRIBEkuangshenshuo,若字典无该频道,会新生成一个)
  • 发布消息:通过publish命令发布消息(如:PUBLISHkuangshenshuo“hello,kuangshen”),redis-server会根据publish给定的频道作为键,在字典中查找对应订阅该频道的客户,最后将消息发给所有客户。

7 主从复制

7.1 含义

  1. 将一台redis服务器作为主节点,将其数据复制到其他从节点redis服务器,数据复制只能从主节点到从节点,主节点master写为主,从节点slave读为主

7.2 作用

  1. 数据的备份
  2. 数据恢复
  3. 负载均衡(读写分离)
  4. 高可用基石(如它是哨兵模式基础)

7.3 相关说明

  1. 默认每个 redis服务器都是主节点,可以设置它的主节点(配置文件或命令行设置,命令行设置下次启动不生效)
  2. 只有主机节点可以写,从机节点只能读
  3. 一个主节点可以多个从节点,一个从节点只能有一个主节点。
  4. 主机宕机后,从机依然可以使用
  5. 复制原理:每次从机重新连接主机都会进行一次全量复制,正常情况都是进行增量复制(只复制主机中新增加的数据)
  6. Redis层层链路:一个主机可以同时作为主机和从机(主属性还是从机,不能写)
  7. 如果主机宕机了,可以手动使用slaveof no one让自己变成主机(手动太麻烦,后面引入哨兵模式)

8 哨兵模式

8.1 原理

  1. 主机宕机后,自动从从机中选择主机(哨兵是独立的进程,用于监控每个reids服务器是否正常运行。如果发现主机宕机后,就会选择一个新的主机,然后通过发布订阅模式通知其他的从机让他们切换主机)

8.2 多哨兵模式

  1. 哨兵也可能宕机,所以一般也有多个哨兵,当一个哨兵认为主机服务器不可用时,成为主观下线。当发现主机不可用的哨兵到达一定值时,就会进行failover故障转移操作,通过投票选择一个新的主机。

8.3 最简单的单哨兵模式配置

  1. 首先新建哨兵配置文件sentinel.conf,
  2. 然后加入内容:sentinel monitor myredis 127.0.0.1 6379 1(myredis表示名称可以随便取,127.0.0.1 6379表示监控的主机,1表示1个哨兵发现主机挂了就投票选新的主机)
  3. 最后启动哨兵模式:redis-sentinel kconfig/sentinel.conf

8.4 优缺点

  1. 优点:主从复制的优点他都有,自动切换主机更加健壮。
  2. redis不好在线扩容。多哨兵配置麻烦。

9 缓存穿透

9.1 定义

  1. 在缓存中查不到,数据库也查不到,大量请求都在持久层数据库时,就造成了缓存穿透。

9.2 解决方案

  1. 布隆过滤器:一种数据结构,对所有可能查询的参数以hash形象存储,当查询时,在控制层先进行校验,过滤不符合的查询请求。
  2. 缓存空对象:持久层数据库查不到时,将返回的空对象也缓存起来,并设置一个过期时间,后面查询这个值时,就会在缓存中获取了,减少持久层数据库的压力(数据一致性有影响)

10 缓存击穿

10.1 定义

  1. 在某个热点key过期的瞬间,大量该值的请求在缓存中查不到,都会涌入数据库。

10.2 解决方案

  1. 热点词不过期
  2. 加互斥锁:使用分布式锁,对每个key同时只有一个线程去查询,其他该key的查询等待。

11 缓存雪崩

11.1 定义

  1. 在某个时间段,缓存集中过期,或者reids宕机。

11.2 解决方案

  1. redis高可用(多台redis集群)
  2. 加互斥锁:使用分布式锁,对每个key同时只有一个线程去查询,其他该key的查询等待
  3. 数据预热:正式部署前,将可能大量访问的数据先访问一边,让它加载到缓存中去。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
尚硅谷Redis7脑图总结了Redis分布式缓存相关的知识点,该脑图共包含六个主要模块:Redis简介、Redis基础命令、Redis高级命令、Redis持久化、Redis主从复制和Redis哨兵集群。 在Redis简介部分,脑图首先介绍了Redis的特点和适用场景,如高性能、支持丰富的数据结构以及适用于高并发、大规模数据的存储和缓存场景。接着介绍了Redis的数据结构,包括字符串、哈希、列表、集合和有序集合,并配以相应的基础命令。 在Redis基础命令模块中,详细列出了常用的基础命令,如字符串操作、哈希操作、列表操作、集合操作和有序集合操作,并给出了示例和使用场景。 在Redis高级命令模块中,介绍了一些高级的命令,如事务、流水线、发布订阅和Lua脚本。这些命令可以进一步提升Redis的性能和功能,满足更多场景的需求。 在Redis持久化模块中,介绍了RDB和AOF两种持久化方式的原理和使用方法,并讲解了它们的优缺点以及如何选择适合的持久化方式。 在Redis主从复制模块中,详细介绍了主从复制的原理和实现过程,并介绍了复制的配置和相关命令。 在Redis哨兵集群模块中,介绍了Redis哨兵的作用和原理,以及如何搭建和管理Redis哨兵集群。这一模块进一步保证了Redis的高可用性和容灾能力。 总的来说,尚硅谷Redis7脑图全面而详细地介绍了Redis的相关知识点,对于学习和使用Redis来说是一份非常有用的资料。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值