与面试相关的redis

这里写自定义目录标题

  • 📝 redis的知识点
    • 数据结构及其特性,用途和操作方法
    • 持久化
    • 高可用
    • 分布式锁
    • 发布订阅
    • 性能优化
    • 安全性
    • 数据分片
    • 缓存策略
      • 键过期删除策略
      • 内存淘汰策略
  • 🤗 总结归纳
  • 📎 参考文章

📝 redis的知识点

数据结构及其特性,用途和操作方法

数据结构底层特性用途操作方法
StringSDS简单的kv缓存,计数器,分布式锁set key value
List双端链表/压缩链表key v1,v2 有序,可重复消息队列,评论列表,时间线等有序数据lpush/rpush key value value
Hash压缩链表/字典key key,value[key,value…]用户,商品信息等对象,更接近java里的对象hset key key1 value1
Set字典key v1,v2… 无序,唯一标签,用户id集合等,方便去重sadd key v1 v2
ZSet压缩列表/跳表排序,权重排行榜,带权重的消息队列等需要排序的场合zadd key score v1 score v2

持久化

特性rdbaof
存储类型二进制文件操作命令日志文件
命令SAVE # 阻塞服务器进程,保存快照 BGSAVE # 在后台异步保存快照bgrewriteaof 重写
配置save 900 1 # 900秒内至少有1个键被修改时自动保存RDB快照 save 300 10 # 300秒内至少有10个键被修改时自动保存RDB快照 save 60 10000 # 60秒内至少有10000个键被修改时自动保存RDB快照 dbfilename dump.rdb # RDB文件名 dir /path/to/your/backup/directory # RDB文件保存目录appendonly yes # 启用AOF持久化 appendfsync always # 每个写操作都同步到磁盘 appendfilename “appendonly.aof” # AOF文件名 dir /path/to/your/appendonly/directory # AOF文件保存目录
是否主线程save主线程 bgsave子线程子线程
优点数据快照,恢复速度块文件大,恢复速度慢
缺点会丢失最后一次快照后的数据安全性高,高可用

高可用

特性主从哨兵集群
说明一主多从一主多从+哨兵监控主节点多主多从+hash槽 数据分片
设置slaveof通过sentinel.conf配置CLUSTER MEET
故障转移不支持支持支持

分布式锁

特性描述
获取锁使用SETNX命令(Set if Not eXists)来在Redis中设置一个键值对作为锁,如果该键不存在,则设置成功,表示获取到锁。
锁的持有时间可以为锁设置一个超时时间,以防止锁被持有太久而导致死锁。可以使用EXPIRE命令来为锁设置过期时间。
释放锁使用DEL命令来删除锁键来释放锁。
避免竞态条件在设置锁时,可以为锁键设置一个唯一的标识(例如,使用UUID),以确保只有持有锁的一方才能释放它。
处理死锁可以使用Lua脚本来原子性地释放锁,避免在解锁过程中由于某些原因导致死锁。
自动续期使用SET命令和EX选项来为锁键设置超时时间,并在持有锁期间定期更新超时时间,以避免锁过期。
并发控制可以使用WATCH和MULTI/EXEC命令组合来实现乐观锁,以确保在锁被释放之前,其他客户端无法获取锁。
锁粒度可以实现多种锁粒度,例如全局锁和分布式资源锁,以满足不同的应用场景需求。

附上什么情况下会发生死锁:

在使用Redis来实现分布式锁时,死锁通常是由于不正确的锁的使用和释放方式引起的。以下是一些可能导致死锁的情况:

  1. 未释放锁:如果一个客户端成功获取锁但在后续操作中没有正确释放锁,那么其他客户端将永远无法获取这个锁,从而导致死锁。
  2. 锁的超时时间不合理:如果设置锁的超时时间太短,那么在锁还有效的情况下,其他客户端可能会尝试获取锁,导致死锁。另一方面,如果锁的超时时间太长,那么即使一个客户端意外宕机或崩溃,其他客户端也无法获得锁,同样可能导致死锁。
  3. 并发更新:如果多个客户端同时尝试获取和更新锁的状态,可能会导致竞争条件,从而破坏了锁的正确性,进而导致死锁。
  4. 网络问题:如果由于网络问题或Redis集群分区,某个客户端无法及时获得锁释放的消息,它可能会陷入等待锁释放的状态,导致死锁。
  5. 复杂的锁协议:一些复杂的锁协议,如读写锁或带有多个状态的锁,可能更容易出现问题,需要更谨慎的实现和测试,以防止死锁。

发布订阅

PUBLISH channel “消息内容”

SUBSCRIBE channel

性能优化

安全性

数据分片

缓存策略

键过期删除策略

Redis的过期删除策略就是:惰性删除和定期删除两种策略配合使用。

惰性删除:Redis的惰性删除策略由 db.c/expireIfNeeded 函数实现,所有键读写命令执行之前都会调用 expireIfNeeded 函数对其进行检查,如果过期,则删除该键,然后执行键不存在的操作;未过期则不作操作,继续执行原有的命令。

定期删除:由redis.c/activeExpireCycle 函数实现,函数以一定的频率运行,每次运行时,都从一定数量的数据库中取出一定数量的随机键进行检查,并删除其中的过期键。

注意:并不是一次运行就检查所有的库,所有的键,而是随机检查一定数量的键。

定期删除函数的运行频率,在Redis2.6版本中,规定每秒运行10次,大概100ms运行一次。在Redis2.8版本后,可以通过修改配置文件redis.conf 的 hz 选项来调整这个次数。

内存淘汰策略

在配置文件redis.conf 中,可以通过参数 maxmemory 来设定最大内存

当现有内存大于 maxmemory 时,便会触发redis主动淘汰内存方式,通过设置 maxmemory-policy ,有如下几种淘汰方式:

1)volatile-lru 利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ) 。

2)allkeys-lru 利用LRU算法移除任何key (和上一个相比,删除的key包括设置过期时间和不设置过期时间的)。通常使用该方式

3)volatile-random 移除设置过过期时间的随机key 。

4)allkeys-random 无差别的随机移除。

5)volatile-ttl 移除即将过期的key(minor TTL)

6)noeviction 不移除任何key,只是返回一个写错误 ,默认选项,一般不会选用。

🤗 总结归纳

掌握这些高级Redis知识点将使你在面试中展现出对Redis的深刻理解和实际应用经验。同时,还应准备答案,以解释你在实际项目中如何使用Redis来解决特定的问题和挑战。

📎 参考文章

  • chatGPT和claude2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/73318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android屏幕录制

这里使用Java语言编写实现&#xff0c;完整代码如下&#xff1a; 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…

第5章:传输层

文章目录 一、传输层概述1.传输层功能2.传输层的寻址与端口1.端口2.端口号3.套接字二、UDP协议1.UDP概述2.UDP首部格式3.UDP校验三、TCP协议1.TCP协议的特点2.TCP报文段的首部格式3.TCP连接管理(1)TCP连接的建立 (三次握手)(2)TCP连接的释放 (四次挥手)4.TCP可靠传输5.TCP流量控…

Halcon不改变目标大小尺寸及坐标,放大图像或区域

如果需要检测一张图像中很细小的物体&#xff0c;计算机可能可以观察到&#xff0c;但人的肉眼很难判别。这时候就需要放大图像中目标所在区域进行观测&#xff0c;放大观察可能会导致图像被放大&#xff0c;目标相对原始图像的坐标大小信息会被改变。如下&#xff0c;分割图中…

CloudCompare 二次开发(13)——点云投影到圆柱

目录 一、概述二、代码集成三、结果展示一、概述 不依赖任何第三方点云相关库,使用CloudCompare编程实现点云投影到指定圆柱,具体计算原理见:PCL 点云投影到圆柱 二、代码集成 1、mainwindow.h文件public中添加: void doActionProjectToCylinder(); // 投影到圆柱2、mai…

rt-thread系列文章目录

rt-thread系列文章目录 本文是rt-thread系列文章目录&#xff0c;后续关于rt-thread的更新都会添加到此文内。 实战篇 rt-thread------生成工程模板 rt-thread------fal移植 内核篇 rt-thread-------内存管理&#xff08;内存堆&#xff09; 设备和驱动篇 C语言面向对象…

单例模式(饿汉式单例 VS 懒汉式单例)

所谓的单例模式就是保证某个类在程序中只有一个对象 一、如何控制只产生一个对象&#xff1f; 1.构造方法私有化&#xff08;保证对象的产生个数&#xff09; 创建类的对象&#xff0c;要通过构造方法产生对象 构造方法若是public权限&#xff0c;对于类的外部&#xff0c;可…

JAR will be empty - no content was marked for inclusion!

现象 在对自建pom依赖组件打包时&#xff0c;出现JAR will be empty - no content was marked for inclusion!错误。 方案 在pom中怎么加packaging标签内容为pom&#xff0c;标识只打包pom文件 <?xml version"1.0" encoding"UTF-8"?> ...<grou…

科技互联网领域,怎样才算突破性创新?

在科技互联网领域&#xff0c;一个突破性的创新应该具备以下特征&#xff1a; 革命性&#xff1a;突破性创新应该能够彻底改变行业或市场&#xff0c;引起根本性的变革。前瞻性&#xff1a;突破性创新应该有前瞻性&#xff0c;能够在未来产生重大影响。这意味着创新应该不仅考…

基于VUE3+Layui从头搭建通用后台管理系统(前端篇)十二:通用详情组件封装实现

一、本章内容 本章实现通用详情组件,自动识别实体配置信息,并自动生成对应组件,填充组件数据,并完成数据自动加载等过程。 1. 详细课程地址: 待发布 2. 源码下载地址: 待发布 二、界面预览 三、开发视频 3.1 B站视频地址࿱

对比学习与simclr详解

对比学习&#xff08;Contrastive Learning&#xff09;是一种机器学习方法&#xff0c;旨在通过比较数据样本之间的相似性和差异性来学习有用的表示&#xff08;特征&#xff09;。其核心思想是通过将相似的样本映射到相邻的位置&#xff0c;将不相似的样本映射到远离的位置&a…

微信小程序——简易复制文本

在微信小程序中&#xff0c;可以使用wx.setClipboardData()方法来实现复制文本内容的功能。以下是一个示例代码&#xff1a; // 点击按钮触发复制事件 copyText: function() {var that this;wx.setClipboardData({data: 要复制的文本内容,success: function(res) {wx.showToa…

ARM指令集

CPU是计算机的中央处理器&#xff0c;负责执行组成计算机程序的指令。为此&#xff0c;CPU必须能够解释机器码即计算机程序的最低级别表示形式&#xff0c;以让CPU可以直接执行。机器码是一系列的二进制指令&#xff0c;每个指令都代表CPU可以执行的特定操作。指令由一系列1和0…

微信小程序onReachBottom事件使用

在微信小程序中&#xff0c;onReachBottom事件用于监听页面滚动到页面底部的时候触发的事件。当用户滑动页面到底部时&#xff0c;可以通过监听该事件来执行相应的操作。 要使用onReachBottom事件&#xff0c;需要在对应的页面或组件中定义一个函数&#xff0c;并在Page或Comp…

vue3 将 HTML 网页内容生成为 PDF 文件

使用 html2pdf.js 实现 npmjs 地址&#xff1a;html2pdf.js github 仓库地址&#xff1a;html2pdf.js 使用 html2pdf.js 的方法非常简单&#xff0c;只需要能获取到要生成 PDF 的 HTML 元素即可 安装 npm i html2pdf.js引入 先在需要使用导出的页面引入 import html2pdf fr…

操作系统 --- 计算机系统引论

&#xff08;一&#xff09;操作系统的目的和作用 概念&#xff08;定义&#xff09; 操作系统 &#xff08; Operating System &#xff0c; OS &#xff09;是指控制和 管理 整个计算机系统的 硬件和软件 资源&#xff0c;并合理地组织调度计算机的工作和资源的分配&#…

数据分析面试题(2023.09.08)

数据分析流程 总体分为四层&#xff1a;需求层、数据层、分析层和结论层 一、统计学问题 1、贝叶斯公式复述并解释应用场景 公式&#xff1a;P(A|B) P(B|A)*P(A) / P(B)应用场景&#xff1a;如搜索query纠错&#xff0c;设A为正确的词&#xff0c;B为输入的词&#xff0c;那…

vue-elementPlus自动按需导入和主题定制

elementPlus自动按需导入 装包 -> 配置 1. 装包&#xff08;主包和两个插件包&#xff09; $ npm install element-plus --save npm install -D unplugin-vue-components unplugin-auto-import 2. 配置 在vite.config.js文件中配置&#xff0c;配置完重启&#xff08;n…

Leetcode.664 奇怪的打印机

题目链接 Leetcode.664 奇怪的打印机 hard 题目描述 有台奇怪的打印机有以下两个特殊要求&#xff1a; 打印机每次只能打印由 同一个字符 组成的序列。每次可以在从起始到结束的任意位置打印新字符&#xff0c;并且会覆盖掉原来已有的字符。 给你一个字符串 s &#xff0c;你…

数学建模--Seaborn库绘图基础的Python实现

目录 1.绘图数据导入 2. sns.scatterplot绘制散点图 3.sns.barplot绘制条形图 4.sns.lineplot绘制线性图 5.sns.heatmap绘制热力图 6.sns.distplot绘制直方图 7.sns.pairplot绘制散图 8.sns.catplot绘制直方图 9.sns.countplot绘制直方图 10.sns.lmplot绘回归图 1.绘图数…

React中函数式组件与类组件有何不同?

Function Component 与 Class Component 有何不同 目录 Function Component 与 Class Component 有何不同 文章核心观点&#xff1a; 解释一下&#xff1a; 总结&#xff1a; 文章核心观点&#xff1a; Function components capture the rendered values.函数式组件捕获…