当前位置: 首页 > article >正文

微服务day10-Redis面试篇

Redis主从

搭建主从集群

建立集群时主节点会生成同一的replicationID,交给各个从节点。 

集群中的缓冲区是一个环型数组,即若从节点宕机时间过长,可能导致命令被覆盖。

主从集群优化

哨兵原理

哨兵是一个集群来确保哨兵不出现问题。

服务状态监控

选举新主节点

故障转移

哨兵原理小结

搭建哨兵集群

操作文档

Redis分片

搭建分片集群

第三小章,详细操作icon-default.png?t=O83Ahttps://b11et3un53m.feishu.cn/wiki/Jck7w4GBSia4sukQn1vc9s3anMf

redis-cli --cluster create --cluster-replicas 1 \
192.168.21.101:7001 192.168.21.101:7002 192.168.21.101:7003 \
192.168.21.101:7004 192.168.21.101:7005 192.168.21.101:7006

散列插槽

[root@server02 redis-cluster]# docker exec -it r1 bash
root@server02:/data# redis-cli -p 7001
127.0.0.1:7001> set user jack
(error) MOVED 5474 192.168.21.101:7002
127.0.0.1:7001>

当我们读写数据时,Redis基于CRC16 算法对keyhash运算,得到的结果与16384取余,就计算出了这个keyslot值。然后到slot所在的Redis节点执行读写操作。

不过hash slot的计算也分两种情况:

  • key中包含{}时,根据{}之间的字符串计算hash slot

  • key中不包含{}时,则根据整个key字符串计算hash slot

例如:

  • key是user,则根据user来计算hash slot

  • key是user:{age},则根据age来计算hash slot

测试:进入r1容器,先于7001建立连接,写入数据。

[root@server02 redis-cluster]# docker exec -it r1 bash
root@server02:/data# redis-cli -p 7001
127.0.0.1:7001> set user jack
(error) MOVED 5474 192.168.21.101:7002
127.0.0.1:7001>

出现包错:

提示我们MOVED 5474,其实就是经过计算,得出user这个keyhash slot5474,而5474是在7002节点,不能在7001上写入!!

连接集群时,要加-c参数:

# 通过7001连接集群
redis-cli -c -p 7001
# 存入数据
set user jack

可知它会根据插槽不同跳转到不同的主节点:

root@server02:/data# redis-cli -c -p 7001
127.0.0.1:7001> set user jack
-> Redirected to slot [5474] located at 192.168.21.101:7002
OK
192.168.21.101:7002>

如果要将不同的key存放到同一个主从集群中需要再key前添加{}其中添加相同的数据。:

127.0.0.1:7001> set {user}:name tom
-> Redirected to slot [5474] located at 192.168.21.101:7002
OK
192.168.21.101:7002> set {user}:age 21
OK
192.168.21.101:7002>

Redis数据结构

RedisObject

SkipList

SortedSet

Redis内存回收

过期KEY的处理

内存淘汰策略

Redis缓冲问题

缓冲一致性

缓冲穿透

缓存雪崩

缓存击穿


http://www.kler.cn/a/399495.html

相关文章:

  • 华为HCIP——MSTP/RSTP与STP的兼容性
  • 脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾
  • 问题分析与解决:Android开机卡动画问题分析
  • 平台整合是网络安全成功的关键
  • PlantUML——时序图
  • 【项目开发】理解SSL延迟:为何HTTPS比HTTP慢?
  • Rust:原子操作 AtomicBool
  • 基本数据类型和包装类型的区别、缓存池、自动拆箱装箱(面试题)
  • JVM堆(1.6、1.7、1.8)
  • 【route】route add命令详解
  • 2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序
  • PHP 语法基础
  • 电商系统开发:Spring Boot框架实战
  • Java | Leetcode Java题解之第564题寻找最近的回文数
  • 关于网络安全里蜜罐的详细介绍
  • 机器学习———特征工程
  • 使用Python和BeautifulSoup进行网页抓取:通过Python编程语言,结合BeautifulSoup库,可以轻松地从网站上抓取所需的信息。
  • TCP协议(一)
  • 【Golang】——Gin 框架简介与安装
  • <项目代码>YOLOv8 番茄识别<目标检测>
  • Towards Reasoning in Large Language Models: A Survey
  • OpenGL 进阶系列09 - 计算着色器
  • 力扣整理版七:二叉树(待更新)
  • 小程序-基于java+SpringBoot+Vue的驾校预约平台设计与实现
  • windbg 关于L10比L9多更多行,和poi的含义
  • 【Linux---09】Crontab定时调度