Redis牛客网学习笔记(一)

·  阅读 153

第1章 Redis入门,学会运用五个核心的数据结构

1.1 Redis简介

1.1.1 Redis是什么?

image.png

1.1.2 Redis有哪些优势?

image.png

1.1.3 Redis可以做什么?

image.png

1.2 安装Redis

在Linux环境下安装Redis,参考【尚硅谷】Redis 6 入门到精通 超详细 教程_哔哩哔哩_bilibili 然后按照视频修改redis.conf,这里不作过多赘述。

  1. 将原始redis.conf拷贝到/root/6379目录下
cp redis.conf /root/6379
复制代码
  1. 修改拷贝好的redis.conf
  • 显示行号:set nu
  • # bind 127.0.0.1 -::1 注释掉这行
  • daemonize yes 是不是后台运行模式,改为yes
  • logfile /root/6379/redis.log 修改日志文件保存路径
  • dir /root/6379 修改持久化文件存放路径
  • requirepass nowcoder123 设置密码
  1. 启动redis服务端
redis-server /root/6379/redis.conf
复制代码
  1. 启动redis客户端
redis-cli -a nowcoder123
复制代码

1.3 字符串

1.3.1 字符串简介

image.png 使用mset mget可以减少网络开销,提升性能。

1.3.2 典型使用场景

image.png

1.4 哈希

1.4.1 哈希简介

image.png

1.4.2 典型使用场景

image.png image.png

1.5 列表

1.5.1 列表简介

image.png

1.5.2 典型使用场景

image.png

1.6 集合

1.6.1 集合简介

image.png

1.6.2 典型使用场景

image.png

1.7 有序集合

1.7.1 有序集合简介

image.png

1.7.2 典型使用场景

image.png

1.8 管理Redis

1.9 Redis客户端

本课程采用Jedis来学习,具体导包可从Jedis链接

1.10 Redis使用示例

1.10.1 💖【Jedis连接不上的原因】:防火墙没有关闭

  1. 查看防火墙状态
    • systemctl status firewalld
    • service iptables status
  2. 暂时关闭防火墙
    • systemctl stop firewalld
    • service iptables stop
  3. 永久关闭防火墙
    • systemctl disable firewalld
    • chkconfig iptables off
  4. 重启防火墙
    • systemctl enable firewalld
    • service iptables restart

1.11 Redis通信协议

1.11.1 Redis采用的通信协议

image.png

1.11.2 发送命令的数据格式

image.png

1.11.3 返回结果的数据格式

image.png

第2章 探究对象编码,理解Redis底层的实现机制

2.1 Redis的对象体系

2.1.1 Reids的类型与编码

image.png

2.1.2 查看类型与编码

image.png

2.1.3 查看Redis的源码

image.png

2.2 简单动态字符串

2.2.1 什么是简单动态字符串

image.png

2.2.2 为什么不用C原生字符串

image.png

2.2.3 Redis3.2之前的实现方案

image.png image.png image.png image.png

2.2.4 Redis3.2改进的实现方案

image.png image.png

2.3 整数集合

2.3.1 整数集合简介

image.png

2.3.2 整数集合的实现

image.png

2.3.3 集合的升级与降级

image.png

2.4 字典

2.4.1 字典简介

image.png

2.4.2 字典实现

image.png image.png

2.4.3 哈希算法

image.png

2.4.4 REHASH

image.png image.png image.png image.png

2.5 链表

2.5.1 链表简介

image.png

2.5.2 链表的实现

image.png

2.5.3 链表的特点

image.png

2.6 压缩列表

2.6.1 压缩列表简介

image.png

2.6.2 压缩列表的实现

image.png image.png image.png

2.6.3 压缩列表的连锁更新

image.png image.png

2.7 快速列表

2.7.1 快速列表简介

image.png

2.7.2 快速列表的实现

image.png image.png

2.7.3 数据压缩机制

image.png

2.8 跳跃表

2.8.1 跳跃表简介

image.png

2.8.2 跳跃表的实现

image.png image.png image.png

2.8.3 跳跃表小结

image.png

2.9 Redis对象的底层实现

2.9.1 Redis对象的源码

image.png

2.9.2 对象的类型

image.png

2.9.3 对象的编码

image.png

2.9.4 类型与编码

image.png

2.9.5 对象的访问时间

image.png

2.9.6 对象的引用计数

image.png

2.10 Redis对象的类型与编码

2.10.1 字符串

image.png

2.10.2 哈希

image.png

2.10.3 列表

image.png

2.10.4 集合

image.png

2.10.5 有序集合

image.png image.png image.png 为了展示方便,上图在字典和跳跃表中重复展示了各个元素的成员和分值,但在实际中,字典和跳跃表会共享元素的成员和分值,所以并不会造成任何数据重复,也不会因此而浪费任何内存。

为什么有序集合需要同时使用跳跃表和字典来实现?
在理论上,有序集合可以单独使用字典或者跳跃表的其中一种数据结构来实现,但无论单独使用字典还是跳跃表,在性能上对比起同时使用字典和跳跃表都会有所降低。举个例子,如果我们只使用字典来实现有序集合,那么虽然以O(1)复杂度查找成员的分值这一特性会被保留,但是,因为字典以无序的方式来保存集合元素,所以每次在执行范围型操作————比如ZRANKZRANGE等命令时,程序都需要对字典保存的所有元素进行排序,完成这种排序需要至少O(NlogN)时间复杂度,以及额外的O(N)内存空间(因为需要创建一个数组来保存排序后的元素)。 另一方面,如果我们只使用跳跃表来实现有序集合,那么跳跃表执行范围型操作的所有优点都会被保留,但因为没有字典,所以根据成员查找分值这一操作的复杂度将从O(1)上升为O(logN)。因为以上原因,为了让有序集合的查找和范围型操作都尽可能快地执行,Redis选择了同时使用字典和跳跃表两种数据结构来实现有序集合。

2.11 Redis的线程模型

2.11.1 Redis真的是单线程吗

image.png

2.11.2 Redis为什么采用单线程

image.png

2.11.3 Redis的单线程IO模型

image.png

第3章 Redis进阶,学会运用高级数据结构和功能

3.1 BitMap

3.1.1 BitMap简介

image.png

3.1.2 BitMap的扩展

image.png

3.1.3 BitMap的使用场景

image.png

3.2 HyperLogLog

3.2.1 HyperLogLog简介

image.png

3.2.2 HyperLogLog的使用场景

image.png

3.3 GEO

3.3.1 GEO简介

image.png

3.3.2 GEO的使用场景

image.png

3.4 发布订阅

3.4.1 发布订阅简介

image.png

3.4.2 发布订阅的使用场景

image.png

3.5 Stream

3.5.1 Stream之前

image.png

3.5.2 Stream简介

image.png

3.5.3 Stream特征

image.png

3.6 Pipeline流水线

3.6.1 RTT往返时间

image.png

3.6.2 Pipeline

image.png

3.6.3 Pipeline与批量命令对比

image.png

3.7 事务

3.7.1 事务简介

image.png

3.7.2 带乐观锁的事务

image.png

3.8 Lua脚本

3.8.1 Lua脚本简介

image.png

3.8.2 使用Lua脚本

image.png

3.8.3 管理Lua脚本

image.png image.png image.png

3.9 模块(了解即可,暂不需要学习)

3.9.1 模块简介

image.png

3.9.2 使用模块

image.png

3.10 慢查询日志

3.10.1 慢查询日志简介

image.png

3.10.2 慢查询配置参数

image.png

3.10.3 慢查询相关命令

image.png

第4章 持久化与复制,保障Redis服务的数据安全

4.1 RDB持久化

4.1.1 RDB简介

image.png

4.1.2 SAVE、BGSAVE命令

image.png

4.1.3 配置选项

image.png

4.1.4 BGSAVE流程

image.png

4.1.5 BGSAVE的原理

image.png

4.1.6 RDB的优缺点

image.png

4.2 RDB的文件结构

4.2.1 RDB的文件结构

image.png

4.2.2 载入RDB文件

image.png

4.3 AOF持久化

4.3.1 AOF简介

image.png

4.3.2 启用AOF

image.png

4.3.3 命令写入

image.png

4.3.4 文件同步

image.png

4.3.5 AOF的缺点

image.png

4.4 AOF的重写机制

4.4.1 AOF重写

image.png

4.4.2 AOF重写的触发方式

image.png

4.4.3 AOF重写的流程

image.png

4.4.4 重启加载

image.png

4.5 RDB-AOF混合持久化

4.5.1 RDB-AOF混合持久化

image.png

4.5.2 RDB-AOF混合文件的载入过程

image.png

4.6 Redis持久化方式小结

4.6.1 选择哪种持久化方式?

image.png

4.6.2 无持久化

image.png

4.6.3 SHUTDOWN与持久化

image.png

4.7 Redis持久化性能调优

4.7.1 改善fork操作的耗时

image.png

4.7.2 优化子进程的开销

image.png

4.7.3 AOF追加阻塞

image.png

4.8 复制

4.8.1 复制功能简介

image.png

4.8.2 复制功能的拓扑结构

image.png

4.8.3 复制功能的相关命令

image.png

4.9 复制的原理

4.9.1 复制过程

image.png

4.9.2 数据同步

image.png

4.9.3 psync命令

image.png

4.9.4 全量复制

image.png

4.9.5 部分复制

image.png

4.9.6 其他

image.png

4.10 复制的常见问题

4.10.1 读写分离

image.png

4.10.2 主从配置不一致

image.png

4.10.3 规避全量复制

image.png

第5章 哨兵与集群,构建高可用和高并发的Redis服务

5.1 哨兵

image.png image.png

5.1.1 故障转移

image.png

5.1.2 主从复制的问题

image.png

5.1.3 哨兵

image.png

5.1.4 哨兵的拓扑结构

image.png

5.1.5 哨兵节点的特征

image.png

5.2 哨兵的配置与部署

5.2.1 配置参数

image.png image.png image.png image.png

5.2.2 部署技巧

image.png

5.3 哨兵的实现原理

5.3.1 三个定时监控任务

image.png

5.3.2 主观下线和客观下线

image.png

5.3.3 领导者哨兵节点的选举

image.png

5.3.4 故障转移

image.png

5.4 集群

5.4.1 数据分布理论

image.png image.png image.png image.png

5.4.2 Redis数据分区

image.png

5.4.3 集群功能的限制

image.png

5.5 集群的配置与部署

image.png

redis-cli -a nowcoder123 --cluster create 192.168.175.131:9001 192.168.175.131:9002 192.168.175.131:9003 192.168.175.131:9004 192.168.175.131:9005 192.168.175.131:9006 --cluster-replicas 1
复制代码

image.png image.png

5.6 集群的扩容与收缩

5.7 集群中节点的通信

5.7.1 通信过程

image.png

5.7.2 Gossip协议

image.png

5.7.3 节点选择

image.png

5.8 集群的请求路由

5.8.1 请求重定向

image.png

5.8.2 Smart客户端

image.png image.png

5.8.3 ASK重定向

image.png

5.9 集群的故障转移

5.9.1 故障发现

image.png image.png image.png

5.9.2 故障恢复

image.png image.png image.png image.png image.png

5.9.3 故障转移的时间

image.png

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改