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

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键未被修改,则事务执行成功,返回设置的键值对。

相关文章:

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

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

大数据开发之kafka(完整版)

第 1 章:Kafka概述 1.1 定义 Kafka是一个分布式的基于发布/订阅模式的消息队列,主要应用于大数据实时处理领域。 发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只…...

单体架构、微服务和无服务器架构

前言 在这篇文章中,我将演示在决定使用单体架构、微服务架构和无服务器架构时的权衡的简化心智模型。目标是突显每种风格的固有优势和缺陷,并提供关于何时选择哪种架构风格的指导。 单体架构 对于小团队或项目来说是理想的入门架构。它简单易上手&…...

Github仓库使用方式

主要参考: 「详细教程」使用git将本地项目上传至Github仓库(MacOS为例)_github上传代码到仓库-CSDN博客 新建文件夹参考: GitHub使用指南——建立仓库、建立文件夹、上传图片详细教程-CSDN博客 一、新建一个 github 仓库&#…...

Harmony Ble蓝牙App(四)描述符

Harmony Ble蓝牙App(四)描述符 前言正文一、优化二、描述① 概念② 描述提供者③ 显示描述符 三、源码 前言 上一篇中了解了特性和属性,同时显示设备蓝牙服务下的特性和属性,本文中就需要来使用这些特性和属性来完成一些功能。 正…...

C# 实现单线程异步互斥锁

文章目录 前言一、异步互斥锁的作用是什么?示例一、创建和销毁 二、如何实现?1、标识(1)标识是否锁住(2)加锁(3)解锁 2、异步通知(1)创建对象(2&a…...

Java设计模式中策略模式可以解决许多if-else的代码结构吗? 是否能满足开闭原则?

Java设计模式中策略模式可以解决许多if-else的代码结构吗? 是否能满足开闭原则? 是的,策略模式可以帮助解决许多if-else的代码结构。通过将不同的算法封装成不同的策略类,然后在需要的时候动态地切换策略,可以避免使…...

[C#]C# winform部署yolov8目标检测的openvino模型

【官方框架地址】 https://github.com/ultralytics/ultralytics 【openvino介绍】 OpenVINO(Open Visual Inference & Neural Network Optimization)是由Intel推出的,用于加速深度学习模型推理的工具套件。它旨在提高计算机视觉和深度学…...

力扣刷MySQL-第五弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…...

用C语言实现简单的三子棋游戏

目录 1 -> 模块简介 2 -> test.c 3 -> game.c 4 -> game.h 1 -> 模块简介 test.c:测试游戏逻辑 game.c: 函数的实现 game.h:函数的声明 2 -> test.c #define _CRT_SECURE_NO_WARNINGS 1#include "game.h";void menu() {printf("****…...

Yaklang 中的类型和变量

Yaklang 的类型其实非常简单,我们仅需要记住如下类型即可 string 字符串类型,用以快速构建一个字符串int 整数类型:在 64 位机中,int 和 int64 是一样的float 浮点类型,用来定义和表示浮点数byte 本质上等同于 uint8u…...

C语言从入门到实战——编译和链接

编译和链接 前言一、 翻译环境和运行环境二、 翻译环境2.1 预处理(预编译)2.2 编译2.2.1 词法分析2.2.2 语法分析2.2.3 语义分析 2.3 汇编2.4 链接 三、 运行环境 前言 在C语言中,编译和链接是将源代码转换为可执行文件的两个主要步骤。 编…...

【实战教程】ThinkPHP6分页功能轻松实现,让你的网站更高效!

ThinkPHP是一款非常流行的PHP开发框架,其最新版本ThinkPHP6在性能和易用性方面都得到了很大的改善。分页功能是网页开发中非常常见的功能,而ThinkPHP6也提供了非常方便的分页方法。本文将介绍如何实现ThinkPHP6的分页功能。 一、了解分页功能 在Web应用…...

专业130+总分380+哈尔滨工程大学810信号与系统考研经验水声电子信息与通信

今年专业课810信号与系统130,总分380顺利考上哈尔滨工程大学,一年的努力终于换来最后的录取,期中复习有得有失,以下总结一下自己的复习经历,希望对大家有帮助,天道酬勤,加油!专业课&…...

旅游项目day08

1. 旅游日记(游记) 后端:实体类,列表,查看,审核 前端:目的地明细中-游记->带范围条件查询,游记首页,【扩展】游记添加/编辑,【扩展】添加游记时间没登录时…...

蓝桥杯真题(Python)每日练Day2

题目 题目分析 对于本题首先确定其数据结构为优先队列,即邮费最小的衣服优先寄,算法符合贪心算法。可以直接使用queue库的PriorityQueue方法实现优先队列。关于PriorityQueue的使用方法主要有: import queue q queue.Queue()# 队列 pq qu…...

IntelliJ IDEA 拉取gitlab项目

一、准备好Gitlab服务器及项目 http://192.168.31.104/root/com.saas.swaggerdemogit 二、打开 IntelliJ IDEA安装插件 打开GitLab上的项目,输入项目地址 http://192.168.31.104/root/com.saas.swaggerdemogit 弹出输入登录用户名密码,完成。 操作Comm…...

RHCSA上课笔记(前半部分)

第一部分 网络服务 第一章 例行性工作 1.单一执行的例行性工作 单一执行的例行性工作(就像某一个时间点 的闹钟):仅处理执行一次 1.1 at命令:定时任务信息 [rhellocalhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x…...

C++代码入门05 字符串容器

图源:文心一言 上机题目练习整理,本篇作为字符串容器的代码,提供了常规解法及其详细解释,供小伙伴们参考~🥝🥝 第1版:在力扣新手村刷题的记录~🧩🧩 方法:常…...

vue3 项目中 arguments 对象获取失败问题

问题 在 vue3 项目中 获取到的 arguments 对象与传入实参不符,打印出函数中的 arguments 对象显示如下: 原因 作者仔细回看代码才发现,自己一直用的是 vue3 的组合式写法,函数都是箭头函数,而箭头函数不存在 argumen…...

docker详细操作--未完待续

docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看

文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

flow_controllers

关键点: 流控制器类型: 同步(Sync):发布操作会阻塞,直到数据被确认发送。异步(Async):发布操作非阻塞,数据发送由后台线程处理。纯同步(PureSync…...

CSS3相关知识点

CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...