Redis 面试题 | 02.精选Redis高频面试题

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

文章目录

    • 5. Redis的分布式锁实现方式有哪些?
    • 6. Redis的过期键处理机制是怎样的?
    • 7. Redis的LRU算法是如何工作的?
    • 8. Redis的事务是如何实现的?

5. Redis的分布式锁实现方式有哪些?

Redis的分布式锁实现方式有以下几种:

  1. 客户端锁:客户端锁是指在客户端使用Redis的SET命令设置锁,当客户端尝试获取锁时,如果锁已经被其他客户端持有,则返回失败。客户端锁适用于简单的场景,如单客户端并发操作。

  2. 服务端锁:服务端锁是指在Redis服务器上使用SET命令设置锁,当客户端尝试获取锁时,如果锁已经被其他客户端持有,则返回失败。服务端锁适用于复杂的场景,如多客户端并发操作,可以保证锁的公平性和一致性。

  3. 分布式锁:分布式锁是指在Redis集群中使用SET命令设置锁,当客户端尝试获取锁时,如果锁已经被其他客户端持有,则返回失败。分布式锁可以保证锁的公平性和一致性,适用于高并发场景。

  4. 布隆过滤器:布隆过滤器是指使用Redis的布隆过滤器数据结构实现分布式锁,当客户端尝试获取锁时,如果锁已经被其他客户端持有,则返回失败。布隆过滤器可以保证锁的公平性和一致性,适用于高并发场景。

  5. 乐观锁:乐观锁是指在客户端使用Redis的WATCH、MULTI、EXEC等命令实现分布式锁,当客户端尝试获取锁时,如果锁已经被其他客户端更新,则返回失败。乐观锁可以保证锁的公平性和一致性,适用于高并发场景。

  6. 分布式锁服务:分布式锁服务是指使用第三方开源服务,如Redisson、REDIS-CLUSTER等,实现分布式锁。分布式锁服务可以提供高性能、高可用性和可扩展性的分布式锁服务。

6. Redis的过期键处理机制是怎样的?

Redis的过期键处理机制如下:

  1. 设置过期时间:在设置键值对时,可以通过EXPIRE命令设置键的过期时间,单位为秒。例如,SET mykey “Hello, World!” EXPIRE 10。

  2. 自动过期:当键的过期时间到达时,Redis会自动删除该键。

  3. 定期检查过期键:Redis会定期执行TTL命令,检查键的过期时间,如果过期时间到达,则自动删除该键。

  4. 手动删除过期键:可以使用PERSIST命令,将键的过期时间设置为永久,从而避免该键被自动删除。例如,PERSIST mykey。

  5. 过期键的内存占用:Redis会优先删除内存占用较大的过期键,以保证Redis的内存使用效率。

  6. 过期键的过期处理优先级:Redis会优先处理设置的过期时间,其次处理自动过期和定期检查过期的时间。

  7. 过期键的处理方式:Redis会根据键的过期时间、内存占用和处理优先级等条件,决定是否删除过期键。

  8. 过期键的处理策略:Redis提供了多种过期键的处理策略,如定期清理、LRU算法、LFU算法等,可以根据实际需求进行选择。

7. Redis的LRU算法是如何工作的?

Redis的LRU(Least Recently Used,最近最少使用)算法是一种缓存淘汰策略,用于根据键的使用情况决定是否删除缓存。

LRU算法的实现过程如下:

  1. 初始化:当Redis启动时,将所有键的访问时间设置为0,表示未访问。

  2. 访问键:当客户端访问键时,将该键的访问时间设置为当前时间,表示该键被访问。

  3. 淘汰键:当Redis的内存使用达到限制时,会执行LRU算法,选择最近最少使用的键进行淘汰。具体步骤如下:

    a. 计算每个键的访问时间,并将访问时间按照从小到大的顺序进行排序。

    b. 删除访问时间最早的键,即最近最少使用的键。

  4. 访问键:当客户端再次访问该键时,将该键的访问时间设置为当前时间,表示该键被访问。

  5. 更新访问时间:当Redis执行其他操作时,如设置键值对、执行过期处理等,也会更新键的访问时间,从而保证LRU算法的正确性。

  6. 定期检查:Redis会定期执行LRU命令,检查键的访问时间,以确保LRU算法的正确性。

LRU算法的优点是能够根据键的访问情况自动淘汰缓存,从而保证Redis的内存使用效率。但缺点是可能会导致客户端访问某个键时需要等待较长时间,因为该键的访问时间可能会被更新。

8. Redis的事务是如何实现的?

Redis的事务(Transaction)是指一组原子操作,保证整个操作要么全部成功,要么全部失败。Redis的事务实现是基于Redis的WATCH、MULTI、EXEC三个命令。

以下是Redis事务的实现过程:

  1. 客户端发送WATCH命令,指定要监视的键。例如,WATCH mykey1 mykey2。

  2. 客户端执行事务内的操作,例如设置键值对、修改键值等。

  3. 客户端发送MULTI命令,表示事务开始。例如,MULTI。

  4. 客户端执行事务内的操作,例如设置键值对、修改键值等。

  5. 客户端发送EXEC命令,表示事务提交。例如,EXEC。

  6. Redis服务器根据客户端发送的命令执行事务,如果事务执行成功,则返回客户端执行的所有操作的结果;如果事务执行失败,则返回错误信息。

Redis事务的优点是能够保证整个操作的原子性,即要么全部成功,要么全部失败。但缺点是需要客户端与服务器之间同步通信,可能会导致性能下降。

以下是Redis事务的示例:

WATCH mykey
SET mykey "Hello, World!"
MULTI
EXEC

在这个示例中,客户端首先使用WATCH命令监视mykey键,然后使用SET命令设置键的值为"Hello, World!"。接着,客户端使用MULTI命令开始事务,然后使用EXEC命令提交事务。如果mykey键已经被其他客户端修改,则事务执行失败,返回错误信息。如果mykey键未被修改,则事务执行成功,返回设置的键值对。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源项目_大模型应用_Chat2DB

1 基本信息 项目地址:https://github.com/chat2db/Chat2DBStar:10.7K 2 功能 Chat2DB 是一个智能且多功能的 SQL 客户端和报表工具,适用于各种数据库。 对于那些平时会用到数据库,但又不是数据库专家的程序员来说,…

数据结构之树和二叉树定义

数据结构之树和二叉树定义 1、树的定义2、树的基本概念3、二叉树的定义 数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以…

【每日一题】按分隔符拆分字符串

文章目录 Tag题目来源解题思路方法一:遍历方法二:getline 写在最后 Tag 【遍历】【getline】【字符串】【2024-01-20】 题目来源 2788. 按分隔符拆分字符串 解题思路 方法一:遍历 思路 分隔符在字符串开始和结束位置时不需要处理。 分隔…

【JavaEE】_网络编程基础

目录 1. 网络编程基础 1.1 网络编程定义 1.2 网络编程中的基本概念 1.2.1 API 1.2.2.发送端和接收端 1.2.3 请求和响应 1.2.4 客户端和服务端 2. Socket 套接字 2.1 概念 2.2 分类 3. UDP数据报套接字编程 3.1 DatagramSocket API 3.1.1 含义 3.1.2 构造方法 3…

C++---判断闰年

一.闰年的定义 闰年是指在公历中,年份可以被4整除但不能被100整除的年份,或者可以被400整除的年份。简单来说,闰年是一个比平年多出一天的年份,即2月有29天。闰年的目的是校准公历与地球公转周期的差异,确保时间计算的…

记录一次QT乱码问题

问题描述 在敲陆文周的书《QT5开发及实例》的示例代码时,出现乱码,如下图所示 具体代码如下 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->treeWidget->clear();int groupSize 2;int ite…

【C++类与对象】继承

继承 一、继承基本语法二、继承方式1、公共继承public2、保护继承protected3、私有继承private 三、对象模型四、继承中的构造与析构顺序五、同名成员处理方式同名静态成员处理方法 六、多继承语法(不建议使用)七、菱形继承(钻石继承&#xf…

R 语言学习 case3:柱状图(ggchart)

主要涉及到对图的优化,使用ggchart工具包 ggchart 链接:https://thomas-neitmann.github.io/ggcharts/index.html step1: 安装工具包 install.packages("ggcharts") install.packages("tidytext")step2: 导入工具包 library(dplyr…

高性能前端UI库 SolidJS | 超棒 NPM 库

SolidJS是一个声明式的、高效的、编译时优化的JavaScript库,用于构建用户界面。它的核心特点是让你能够编写的代码既接近原生JavaScript,又能够享受到现代响应式框架提供的便利。 SolidJS的设计哲学强调了性能与简洁性。它不使用虚拟DOM(Vir…

makefile中的伪目标和模式匹配

文章目录 makefile,伪目标和模式匹配 makefile,伪目标和模式匹配 伪目标 .PHONY:clean 声明目标为伪目标之后,makefile将不会判断目标是否存在或该目标是否需要更新, 简单来说就是不会受到一些同名的文件的影响,也会进来makefi…

Ubuntu使用docker-compose安装mysql8或mysql5.7

ubuntu环境搭建专栏🔗点击跳转 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7 文章目录 Ubuntu系统环境搭建(十四)——使用docker-compose安装mysql8或mysql5.7MySQL81.新建文件夹2.创建docke…

ERP进出库+办公用品管理系统

系统架构 简介系统架构部分页面结构图UML逻辑图办公用品入出库 简介 本系统适用于ERP企业公司职员关于系统化的申请相关办公用品,提高整体系统整合行,加大上下级之间的联系,规避因人员过多,而浪费人力在简单重复的工作中&#xf…

Python项目——搞怪小程序(PySide6+Pyinstaller)

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

【前后端分离与不分离的区别】

Web 应用的开发主要有两种模式: 前后端不分离 前后端分离 理解它们的区别有助于我们进行对应产品的测试工作。 前后端不分离 在早期,Web 应用开发主要采用前后端不分离的方式,它是以后端直接渲染模板完成响应为主的一种开发模式。以前后端不…

探索Vue3:深入理解响应式语法糖

🚀 欢迎来到我的专栏!专注于Vue3的实战总结和开发实践分享,让你轻松驾驭Vue3的奇妙世界! 🌈✨在这里,我将为你呈现最新的Vue3技术趋势,分享独家实用教程,并为你解析开发中的难题。让我们一起深入Vue3的魅力,助力你成为Vue大师! 👨‍💻💡不再徘徊,快来关注…

Java编程练习之this关键字(2)

this关键字除了可以调用成员变量或成员方法之外,还可以作为方法的返回值。 示例:创建一个类文件,在类中定义Book类型的方法,并通过this关键字进行返回。 public class Book{ public Book getBook(){ return this; } } 在getB…

list列表可编辑状态

有时候list需要修改或选择属性,mfc自带的只能显示内容,基本上是不可以修改,为了实现这个功能需求,需要完成一下步骤转换. 第一步记录选择的单元格. 第二步创建一个编辑框CComboBox对象, 设置字体,窗口属性. 第三步获取选中单元格的位置信息. 第四步获取单元格内容信息. 第五步…

图论:最短路(dijkstra算法、bellman算法、spfa算法、floyd算法)详细版

终于是学完了,这个最短路我学了好几天,当然也学了别的算法啦,也是非常的累啊。 话不多说下面看看最短路问题吧。 最短路问题是有向图,要求的是图中一个点到起点的距离,其中我们要输入点和点之间的距离,来求…

【EFCore仓储模式】介绍一个EFCore的Repository实现

阅读本文你的收获 了解仓储模式及泛型仓储的优点学会封装泛型仓储的一般设计思路学习在ASP.NET Core WebAPI项目中使用EntityFrameworkCore.Data.Repository 本文中的案例是微软EntityFrameworkCore的一个仓储模式实现,这个仓储库不是我自己写的,而是使…

Eyes Wide Shut? Exploring the Visual Shortcomings of Multimodal LLMs

大开眼界?探索多模态模型种视觉编码器的缺陷。 论文中指出,上面这些VQA问题,人类可以瞬间给出正确的答案,但是多模态给出的结果却是错误的。是哪个环节出了问题呢?视觉编码器的问题?大语言模型出现了幻觉&…