Redis面试常见问题

news/2024/11/8 9:49:19/

Redis中的Lua脚本到底能不能保证原子性?

Redis中Lua脚本的执行,可以保证并发编程中不可再拆分的这个原子性,但是没有保证数据库ACID中要么都执行要么都回滚的这个原子性。Lua脚本执行过程中命令产生错误,是不会回滚的,后续命令不会执行。

在数据库中的原子性,确实是一个不可拆分的工作单元,要么都执行,要么都不执行。因为事务可以Commit、也可以Rollback。

在并发编程中,我们把一个或者多个操作在 CPU 执行的过程中不被中断的特性称为原子性。

redis为什么快?

  1. 操作基于内存

  2. IO多路复用

  3. 单线程操作:省去多线程时CPU上下文会切换的时间

    Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程,仍会使用了多个线程。

  4. 数据结构。

redis为什么设计16384槽

Normal heartbeat packets carry the full configuration of a node, that can be replaced in an idempotent way with the old in order to update an old config. This means they contain the slots configuration for a node, in raw form, that uses 2k of space with16k slots, but would use a prohibitive 8k of space using 65k slots.At the same time it is unlikely that Redis Cluster would scale to more than 1000 mater nodes because of other design tradeoffs.So 16k was in the right range to ensure enough slots per master with a max of 1000 maters, but a small enough number to propagate the slot configuration as a raw bitmap easily. Note that in small clusters the bitmap would be hard to compress because when N is small the bitmap would have slots/N bits set that is a large percentage of bits set.
  1. 如果槽位为65536,发送心跳信息的消息头达8k(65536÷8÷1024=8kb),发送的心跳包过于庞大。所以槽位(16394÷8÷1024=2kb)比较合适。
  2. redis的集群主节点数量基本不可能超过1000个。
  3. 槽位越小,节点少的情况下,压缩率高

热key问题

概念:在Redis中,热key问题指的是某个key被频繁访问,导致该key所在的数据结构增长过大,进而导致Redis性能下降甚至宕机。

对于热key的处理,主要在于事前预测和事中解决。

在事中解决方面,主要可以考虑,热点key拆分、多级缓存、热key备份、限流等方案来解决。

LRU、LFU

LRU指的是最近最少使用(Least Recently Used),是一种缓存淘汰策略。在实现缓存时,为了让缓存的命中率更高,我们需要选择合适的缓存淘汰策略。LRU的具体做法是将最近最少使用的缓存块置换出去,即将最久未被访问的缓存块淘汰掉。

LFU是Least Frequently Used的缩写,意为最不经常使用。LFU算法是一种用于缓存管理的算法,它根据数据项在最近一段时间内被访问的频率来确定哪些数据应该从缓存中删除以腾出空间。当缓存达到容量限制时,LFU算法会优先删除被访问次数最少的数据项。与其他缓存替换算法相比,LFU算法可以更加高效地利用缓存空间。

Redis怎么保证数据不丢失

  1. 持久化:redis支持AOF和RDB、混合的持久化方式,可以保证数据不丢失。
  2. 集群:有主从模式,哨兵模式和cluster集群模式集群来保证应用的可靠性,保证数据不丢失。

http://www.ppmy.cn/news/1251744.html

相关文章

基于51单片机超声波测距汽车避障系统

**单片机设计介绍, 基于51单片机超声波测距汽车避障系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的超声波测距汽车避障系统是一种用于帮助汽车避免碰撞和发生事故的设备,以下是一个基本…

【Linux小项目】实现自己的bash

0. bash原理介绍 bash实际上就是一个负责解析输入字符串工具. 我们需要做的事是这些: 手动分割出输入的字符串判断哪些变量是内建命令(自己执行),哪些命令是普通命令(创建子进程执行)实现的功能有: echo export cd 常规指令 输入、输出流重定向 #include<stdio.h> #i…

Pinia仓库统一管理

pinia独立维护 在src/stores文件夹下创建index.js文件&#xff0c;将main.js中关于pinia的语句放到index.js中 index.js文件内容&#xff1a; import { createPinia } from pinia import piniaPluginPersistedstate from pinia-plugin-persistedstate const pinia createPi…

详解API开发【电商平台API封装商品详情SKU数据接口开发】

1、电商API开发 RESTful API的设计 RESTful API是一种通过HTTP协议发送和接收数据的API设计风格。它基于一些简单的原则&#xff0c;如使用HTTP动词来操作资源、使用URI来标识资源、使用HTTP状态码来表示操作结果等等。在本文中&#xff0c;我们将探讨如何设计一个符合RESTfu…

数据库设计范式

摘要&#xff1a; 数据库设计是构建可靠和高效系统的关键步骤之一。设计范式是一种规范&#xff0c;它帮助开发人员减少数据冗余、提高数据一致性和完整性。本文将探讨数据库设计范式的重要性&#xff0c;并通过基于MySQL的表设计示例来佐证其应用。 引言&#xff1a; 数据库…

如何使用 JavaScript 实现图片上传并转换为 LaTeX 公式

在本教程中&#xff0c;我们将学习如何使用 JavaScript 创建一个上传图片的功能&#xff0c;并将所选图片转换为 LaTeX 公式。我们将使用 FileReader 对象来读取图片并将其转换为 Base64 格式&#xff0c;然后利用 img2latex API 将其转换为 LaTeX 公式。 1. HTML 结构 首先&…

详解ClickHouse的ReplaceMergeTree

区别于MergeTree表引擎&#xff0c;ReplacingMergeTree删除重复数据时是通过相同的分区值&#xff08;ORDER BY的值&#xff09; 数据去重发生在后台合并数据时&#xff0c;后台合并数据是随机的&#xff0c;所以有时会有一些没处理的数据&#xff0c;可以通过OPTIMIZI来手动合…

二分算法(整数二分、浮点数二分)

文章目录 二分一、整数二分&#xff08;一&#xff09;整数二分思路&#xff08;二&#xff09;整数二分算法模板1.左查找&#xff08;寻找左侧边界&#xff09;2.右查找&#xff08;寻找右侧边界&#xff09;3.总模板 &#xff08;三&#xff09;题目&#xff1a;数的范围 二、…