欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > Redis核心机制(一)

Redis核心机制(一)

2025/3/25 19:12:00 来源:https://blog.csdn.net/qq_74056922/article/details/146378809  浏览:    关键词:Redis核心机制(一)

目录

Redis的特性

1.速度快

2.以键值对方式进行存储

3.丰富的功能

4.客户端语言多

5.持久化

6.主从复制

7.高可用和分布式

 Redis使用场景

Redis核心机制——持久化

RDB

bgsave执行流程

​编辑

AOF

AOF重写流程

3.混合持久化(RDB+AOF) 

Redis核心机制——事务

事务介绍(和MySQL对比)

事务操作


Redis的特性

1.速度快

Redis读写命令的速度非常快:

Redis的所有数据都是存储到内存中的。

Redis使用单线程,预防了多线程产生的竞争问题。

2.以键值对方式进行存储

Redis是基于<key,value>的形式进行存储数据的,Redis中的值不仅可以是字符串,还支持多种数据结构:字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset)、位图(Bitmap)、GEO(地理信息位置)。

3.丰富的功能

提供了键过期功能,可以实现缓存

提供了发布订阅功能,可以实现消息队列

支持Lua脚本,可以利用Lua创造出新的Redis命令

提供了简单的事务,支持打包命令

提供了流水线功能,客户端命令批次到达Redis,减少网络的开销

4.客户端语言多

Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到Redis,并且由于Redis收到社区和各大公司的认可,支持Redis客户端语言也非常多,几乎涵盖了主流编程语言:C、C++、Java、Python等 

5.持久化

Redis虽然将读写数据都是到内存中,一旦服务器关闭,数据都会丢失,Redis提供了RDB和AOF两种持久化机制,使用这两种机制就可以将内存的数据保存到硬盘中,保证了数据的可持久性。 

6.主从复制

Redis提供了复制功能,实现了多个相同数据的Redis副本,复制是分布式Redis的基础。

7.高可用和分布式

 Redis提供了哨兵模式,保障Redis节点故障发现和故障自动转移。也提供了Redis集群,真正的分布式实现,提供了高可用、读写和容量拓展。

 Redis使用场景

1.缓存(验证码)

Redis提供了过键值过期时间的设置,提供了内存淘汰策略。

2.排行榜系统(积分排名)

Redis提供了列表和有序集合的结构

3.计数器应用(点赞,浏览量)

Redis天然提供了技术功能

Redis核心机制——持久化

RDB

RDB持久化就是将当前进程数据以生成快照保存到硬盘中,触发RDB分为自动触发和手动触发。

手动触发:使用save命令,此时会阻塞当前Redis服务器,直到RDB执行完毕,此时对内存影响较大,基本不采用这种方式去手动进行触发RDB操作。使用bgsave命令:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在创建子进程阶(fork),时间很短。

自动触发:Redis运行时会自动触发持久化机制。通过配置文件进行触发,通过修改配置文件中的save选项,save m n表示m秒内数据发生n次修改,自动进行RDB持久化。从节点进行全量复制操作时,主节点自动进行RDB持久化,随后将RDB文件内容发送给从节点。执行shoutdown命令关闭Redis时,执行RDB持久化。

bgsave执行流程

Redis执行bgsave命令,父进程判断是否存在其他正在执行的子进程,RDB/AOF子进程,如果存在bgsave命令直接返回。 

父进程执行fork创建子进程,fork过程中父进程会阻塞。

创建子进程完成后bgsave会返回信息通知父进程不在阻塞,继续响应其他命令。

子进程创建RDB文件,根据父进程内存生成的临时快照文件对原有文件进行替换。

子进程发送信号给父进程表示完成,父进程更新统计信息。

优缺点:RDB是一个紧凑压缩的二进制文件,代表

AOF

AOF持久化以日志的形式将每次执行的命令记录下来,重启服务器时执行AOF文件的命令达到恢复数据的目的。AOF的主要作用是解决了数据持久化的实时性。

AOF工作流程:

1.所有写入的命令会追加到aof_buf(缓冲区)中。

2.AOF缓冲区根据对应策略向硬盘做同步操作。

3.随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩目的。

4.当Redis服务器启动时,可以加载AOF文件进行数据恢复。 

Redis使用单线程进行命令的响应,如果每次都将数据直接写入硬盘会使性能下降,此时可以先将数据写入缓冲区中,然后在一同写入硬盘中,有效减少IO次数,提高性能。

随着命令不断写入AOF文件,这个文件会越来越大,AOF文件会进行重写,压缩文件体积。即进程内已超时数据不会写入文件,重复,失败的命令不会写入文件,多条操作合并为一条。 

AOF重写触发时机:手动触发,调用bgrewriteaof命令。自动触发:根据配置文件进行指定,如触发重写时AOF的最小文件大小,AOF占用大小相较于上次重写时增加的比例。

AOF重写流程

1.执行 AOF重写请求

如果当前请求正在执行AOF重写,请求不执行。如果当前进程正在执行bgsave操作,重写命令延迟到bgsave完成后执行。

2.父进程执行fork创建子进程。

3.重写

a.主进程fork之后,继续响应其他命令。所有修改操作都会写入AOF缓冲区,然后同步到硬盘

b.子进程只有执行fork之前的所有内存信息,父进程中需要将fork之后这段时间的修改操作写入AOF重写缓冲区中。

4.子进程根据内存快照,将命令合并到新的AOF文件中。

5.子进程重写完成。

a.新文件写入后,子进程发送信号给父进程。

b.父进程把AOF重写缓存区临时保存的命令追加到AOF文件中

c.用新的AOF文件代替老的AOF文件。

3.混合持久化(RDB+AOF) 

结合RDB和AOF文件特点,使用RDB文件+AOF增量文件存放在一起,即RDB持久化时,执行的命令使用AOF进行记录。

Redis核心机制——事务

事务介绍(和MySQL对比)

Redis事务和MySQL的事务概念上类似,都是把一系列操作打包在一起,批量执行。

原子性

Redis不支持回滚操作,只能将操作打包进行批量执行。

一致性

不保证数据一致性,Redis不支持回滚操作,不能保证数据前后一致性。

隔离性

没有隔离级别,Redis是单线程模型,不会并发执行事务。

持久性

不需要持久性,数据保存在内存中,是否开启持久化,是Redis服务器的事情,和事务无关。

Redis事务本质是在服务器上内置了一个“事务队列”,客户端在事务中进行一个操作,会将这个命令发送给服务器,服务器放到“事务队列”中(但是并不会立即执行),收到EXEC命令后,才会真正执行队列中的所有操作。正因如此,Redis的事务相比于MySQL来说,是弱化很多的,,只能保证事务中的操作是“连续的”,不会被别的客户端”加塞“。

事务操作

MULTI:开启事务

EXEC:真正执行事务

DISCARD:放弃当前事务,此时直接清空事务队列,之前的操作都不会真正执行到。

WATCH:在执行事务的时候,如果某个事务中修改的值被别的客户端修改,此时就容易出现数据不一致的情况。watch在客户端上监控一组具体的key。

当开启事务时,如果对watch的key进行修改,就会记录当前key的“版本号”,在真正提交事务的时候,如果发现服务器上的key版本号已经超过了事务开始时的版本号,就会让事务执行失败。(事务中的所有操作都不执行)

UNWATCH:取消对key的监控,相当于watch的逆操作。

文章结束,感谢观看

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词