Redis底层原理

ops/2025/2/19 15:32:45/

1、Redis是什么

Redis是一个开源的、内存中的数据结构存储系统,它支持多种类型的数据结构,如字符串(strings)、哈希表(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等。Redis还提供了事务、持久化、复制等功能。

2、Redis的基本工作原理

1.内存存储

       Redis将所有数据存储在内存中,这使得读写操作非常快。为了保持数据的持久性,Redis提供了RDB(Redis Database)和AOF(Append Only File)两种持久化机制。 

2.单线程模型

        Redis基于Reactor模式使用了一个单线程的event loop来处理客户端的请求。这意味着所有的命令都是顺序执行的,这避免了多线程环境中常见的上下文切换和竞态条件等问题,从而简化了设计并提高了性能。

3.网络IO多路复用

        Redis使用IO多路复用来处理多个客户端的连接。这通常通过epoll(在Linux上)、kqueue(在BSD系统中)或select/poll(在其他系统上)等系统调用来实现。这种方式可以有效地管理大量的并发连接。

4.命令执行

        当接收到客户端的命令请求时,Redis会查找相应的命令实现,然后执行该命令。命令执行的结果会被返回给客户端。

3、Redis的持久化机制

1.RDB持久化

        RDB是Redis数据的一个时间点快照。Redis会定期将内存中的数据写入磁盘文件。这种机制适用于灾难恢复,但不适合数据备份频繁的场景。

2.AOF持久化

        AOF记录了Redis服务器接收到的每个写操作(例如SET和LPUSH),以追加的方式写入文件。服务器重启时,可以通过重新执行AOF文件中的命令来重建数据集。AOF持久化更适合数据完整性要求高的场景。

4、Redis 数据类型

1.字符串(String)

 基本的数据存储单元,可以存储字符串、整数或者浮点数。

2.列表(List)

一个简单的列表,可以存储一系列的字符串元素。

3.集合(Set)

一个无序集合,可以存储不重复的字符串元素。

4.有序集合(Sorted Set)

 类似于集合,但是每个元素都有一个分数(score)与之关联。

5.哈希(Hash)

一个键值对集合,可以存储多个字段。

6.位图(Bitmaps)

基于字符串类型,可以对每个位进行操作。

7.超日志(HyperLogLogs)

用于基数统计,可以估算集合中的唯一元素数量。

8.流(Streams)

用于消息队列和日志存储,支持消息的持久化和时间排序。


http://www.ppmy.cn/ops/158800.html

相关文章

vue3 pinia状态管理

文章目录 安装 Pinia创建 Pinia 实例定义 Store在组件中使用 Storepinia 增删改查在组件中使用响应式和插件1. 安装插件2. 配置 Pinia 插件3. 在 Store 中启用持久化4. 自定义持久化配置 安装 Pinia 首先,你需要安装 Pinia。可以通过 npm 或 yarn 来进行安装&#…

cmake项目,多模块的一些自我摸索

我的项目是:有一个根cmakelist,下面有若干个子项目,在这个基础上,需要在根下的common目录下存放公用的代码文件 如果你的项目结构是一个根 CMakeLists.txt 管理若干个子项目,并且需要在 common 目录下存放公共代码文件…

CTF-web:java-h2 堆叠注入rce -- N1ctf Junior EasyDB

代码存在sql注入 // 处理登录表单的POST请求PostMapping({"/login"})public String handleLogin(RequestParam String username, RequestParam String password, HttpSession session, Model model) throws SQLException {// 验证用户凭据if (this.userService.valid…

Grafana-使用Button修改MySQL数据库

背景 众所周知,Grafana是一个用来展示数据的平台,但是有时候还是会有需求说能不能有一个按钮,点击的时候再对数据库进行修改,从而达到更新数据的效果 经过多方查证,终于实现了一个简单的,点击button执行sq…

ArcGIS注册开发账号及API KEY

注册与激活 Sign up | ArcGIS Location Platform 填写信息,然后邮箱收到激活邮件,激活,再补充信息。 参考 Tutorial: Create an API key | Documentation | Esri Developer 产生API KEY Tutorial: Create an API key | Documentation |…

JavaScript作用域与闭包

一 作用域 在JavaScript中,作用域(Scope)指的是变量和函数的可访问性范围。在JavaScript中,作用域有全局作用域和局部作用域之分。 全局作用域(Global Scope):全局作用域指的是在代码中任何位置…

ASP.NET Core SixLabors.ImageSharp v1.0 的图像实用程序类 web示例

这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 1.0.4)添加到.NET Core 3.1/ .NET 6 / .NET 8项目中。它与Windows、Linux和 MacOS兼容。 这已针对 ImageSharp v3.0.1 进行了重新设计。 它可以根据百万像素数或长度乘以宽度来调整图像大…

C++17中的clamp函数

一、std::clamp() 其实在前面简单介绍过这个函数&#xff0c;但当时只是一个集中的说明&#xff0c;为了更好的理解std::clamp的应用&#xff0c;本篇再详细进行阐述一次。std::clamp在C17中其定义的方式为&#xff1a; template< class T > constexpr const T& cl…