首页 > 数据库 >解密:Redis速度快的原因

解密:Redis速度快的原因

时间:2024-01-17 09:12:05浏览次数:33  
标签:文件 AOF 数据库 Redis 解密 RDB 速度 数据

Redis是一种基于内存的数据存储系统,其速度非常快。以下是几个原因

1. 数据存储在内存中:Redis将所有数据存储在内存中,因此它可以非常快速地读取和写入数据,而无需像传统数据库那样将数据从磁盘读取和写入磁盘。

2. 单线程模型:Redis采用单线程模型,这意味着它不需要在不同线程之间进行上下文切换,因此可以更快地处理请求。

3. 异步非阻塞I/O:Redis使用异步非阻塞I/O模型,这意味着它可以在进行一些I/O操作时继续执行其他任务,从而提高性能。

4. 简单数据结构:Redis支持一些简单的数据结构,如字符串、列表、哈希表、集合和有序集合。这些数据结构操作都非常快速,因为它们的实现非常简单。

5. 持久化选项:虽然Redis主要存储在内存中,但它还提供了多种持久化选项,如RDB快照和AOF日志,以确保数据即使在服务器崩溃时也不会丢失。

综上所述,Redis的快速性能是由多个因素共同作用所致,包括将数据存储在内存中、采用单线程模型、异步非阻塞I/O模型、简单数据结构和持久化选项等。

Redis 提供了多种数据结构,包括:

字符串(String):可以存储任何类型的数据,包括二进制数据。Redis 的字符串可以存储的最大长度为 512 MB。列表(List):由多个字符串元素组成的有序集合。可以在列表的两端插入和删除元素,还可以对列表进行分片操作。集合(Set):由多个字符串元素组成的无序集合。可以对集合进行交集、并集和差集等操作。散列表(Hash):由多个键值对组成的无序集合。可以通过键来获取值,并支持批量获取和批量设置键值对。有序集合(Sorted Set):由多个字符串元素和每个元素对应的分数值组成的有序集合。可以按照分数值进行排序,并支持范围查询和排名查询等操作。Bitmaps:位操作字符串 HyperLogLog :是用来做基数统计的算法,Geographic类型提供了经纬度设置、查询、范围查询、距离查询,经纬度Hash等常见操作。这些数据结构都支持多种操作,例如添加、删除、修改、查询、排序、聚合等,可以根据应用场景选择合适的数据结构来存储数据,并利用 Redis 提供的操作实现对数据的高效管理和处理。

Redis 的异步非阻塞 I/O 模型实现了以下优势

  1. 高并发:Redis 的单线程模型避免了多线程的上下文切换和锁竞争等开销,从而可以处理大量并发的连接请求。

  2. 高性能:Redis 采用非阻塞 I/O 操作和事件驱动机制,可以在等待 I/O 操作完成时执行其他任务,从而提高了 Redis 的吞吐量和响应速度。

  3. 低延迟:Redis 采用异步非阻塞 I/O 操作,可以立即响应客户端的请求,从而降低了 Redis 的延迟。

Redis 提供了两种持久化数据的方式:RDB 和 AOF。

RDB(Redis DataBase)是一种快照的形式,当Redis需要进行持久化时,它会将内存中的数据快照写入磁盘文件中。RDB 适合用于备份和数据恢复,因为它非常快速,且可以生成非常小的备份文件。但是,RDB 可能会导致数据丢失,因为在 Redis 发生故障时,最后一次快照之后的数据将无法恢复。以下是一些常用的 RDB 命令:
SAVE:将 Redis 数据库的快照保存到磁盘上的一个 RDB 文件中。当执行 SAVE 命令时,Redis 会暂停接受所有客户端的请求,并在主线程中创建 RDB 文件。
BGSAVE:将 Redis 数据库的快照保存到磁盘上的一个 RDB 文件中。当执行 BGSAVE 命令时,Redis 会暂停接受所有客户端的请求,并在后台创建 RDB 文件。
CONFIG SET save 60 1000:设置自动执行 SAVE 命令的条件。在这个例子中,当 60 秒内有至少 1000 个写操作时,Redis 将自动执行 SAVE 命令。
CONFIG SET dbfilename "redis.rdb":设置 RDB 文件名。
FLUSHALL:清空 Redis 数据库中的所有数据。
FLUSHDB:清空 Redis 数据库中当前选择的数据库的所有数据。
SELECT db_index:选择一个数据库。Redis 默认有 16 个数据库,编号从 0 到 15。
注意:在使用 RDB 时,要避免在 Redis 发生故障时丢失数据。可以使用 AOF 持久化来记录 Redis 执行的每个写命令,以便在 Redis 重新启动时重新执行这些命令,从而恢复数据状态。
AOF(Append Only File)是另一种持久化的方式,它会将 Redis 执行的每个写命令追加到一个文件的末尾。当 Redis 重新启动时,它会重新执行文件中的命令,以恢复最新的数据状态。AOF 适合用于数据完整性和持久性,因为它记录了每个写操作,这意味着即使 Redis 发生故障,也可以恢复最后一次写操作之后的所有数据。以下是一些常用的 AOF 命令
CONFIG SET appendonly yes:启用 AOF 持久化。
CONFIG SET appendfilename "redis.aof":设置 AOF 文件名。
BGREWRITEAOF:启动 AOF 文件重写操作。该操作将创建一个新的 AOF 文件,并从旧的 AOF 文件和内存中的数据库状态中重新构建新的 AOF 文件。
BGSAVE:将 Redis 数据库的快照保存到磁盘上的一个 RDB 文件中。当执行 BGSAVE 命令时,Redis 会暂停接受所有客户端的请求,并在后台创建 RDB 文件。
SAVE:将 Redis 数据库的快照保存到磁盘上的一个 RDB 文件中。当执行 SAVE 命令时,Redis 会暂停接受所有客户端的请求,并在主线程中创建 RDB 文件。
AOF REWRITE:启动 AOF 文件重写操作。该操作将创建一个新的 AOF 文件,并从旧的 AOF 文件和内存中的数据库状态中重新构建新的 AOF 文件。
AOF REWRITE --no-kill:使用新的 AOF 文件重写旧的 AOF 文件,但不删除旧的 AOF 文件。
AOF REWRITE --aof-rewrite-incremental-fsync yes:在 AOF 重写期间将 fsync 命令缓冲区的内容逐步写入磁盘,以防止 fsync 命令缓冲区过大导致 IO 阻塞。
AOF REWRITE --aof-rewrite-min-size 64mb:设置 AOF 重写最小文件大小。
AOF REWRITE --aof-rewrite-schedule [start..stop..end]:设置 AOF 重写任务的执行时间。
注意:在使用 AOF 时,要小心配置 AOF 缓冲区的大小,以避免缓冲区过大导致 Redis 的性能下降。
总体来说:RDB 和 AOF 两种持久化方式各有优缺点。如果您需要备份和快速恢复数据,可以选择 RDB。如果您需要最大程度地保证数据的完整性和持久性,可以选择 AOF。在实际应用中,可以将两种方式结合起来使用,以实现更好的数据持久化策略。

标签:文件,AOF,数据库,Redis,解密,RDB,速度,数据
From: https://www.cnblogs.com/liubaihui/p/17969014

相关文章

  • 基于centos环境的docker安装redis以及设置密码
    本篇的博客是因为之前的博客,写的存在问题,设置的密码无法使用,就是即使设置了密码,依旧提示认证失败,所以才有了本篇的博客文章 dockerpullredis 查看下载的镜像dockerimages新建redis配置文件mkdir-p/home/redis/conftouch/home/redis/conf/redis......
  • Redis小册
    安装Redis判断是否安装GCC环境以下命令均可检查是否安装GCCgcc--version#orgcc-vwhereisgcc#orwhereisg++如需安装,执行以下命令即可yum-yinstallgcc-c++安装下载redis,联网情况下可以wget命令直接下载,此方式默认下载至当前用户的家目......
  • Redis实战篇
    实战篇Redis优秀博客黑马点评项目学习笔记(15w字详解,堪称史上最详细,欢迎收藏)-CSDN博客Redis实战篇|Kyle'sBlog(cyborg2077.github.io)开篇导读hutol工具使用对象bean和JsonStr互转//功能:javabean转jsonstr用途:存入到redisStringjsonstr=JSONUtil.toJsonSt......
  • 开启php8的JIT 才能提现php8的速度
    找到php版本文件夹下面的php.ini文件,开启如下字段:zend_extension=opcache修改如下字段:[opcache];DeterminesifZendOPCacheisenabledopcache.enable=1;DeterminesifZendOPCacheisenabledfortheCLIversionofPHPopcache.enable_cli=0;TheOPcache......
  • Redis Stack
           ......
  • Redis - HyperLogLog
           ......
  • FastAPi Celery RabbitMQ 与 Redis 的使用,并使用 Flower 监控 Celery 状态
    FastAPiCeleryRabbitMQ与Redis的使用,并使用Flower监控Celery状态本文介绍了Windows下FastAPiCelery使用RabbitMQ与Redis做代理的使用方法,本文参考了国外大佬的文章,并做了修改与补充,原文见这里,SumanDas,他文章中的完整代码,见这里,GitHubRabbitMQ与Redis的......
  • redis 发布订阅 的简单用法
    背景目前所使用的爬虫管理平台在自动获取git代码时会有拉不下来代码的情况,导致服务器上运行的不是最新的代码解决方案代码合并到master分支上之后,通过webhook触发消息发布接口,服务器在收到监听到消息开始从git的master分支上拉去代码因为拉取的代码存放在宿主机中,dock......
  • Redis - SORT
                      ......
  • Redis未授权访问漏洞
    前置知识Redis是一个由c语言编写的基于内存且可以持久化的日志型,key-value型数据库。之所以说他是基于内存而且可以持久化,因为它大部分数据都存储在内存中,这样提高了读写效率。而且还可以定时将内存数据同步到磁盘中。他虽然不是web服务,但是很多web应用依赖他,所以它也属于web安......