文章目录
- redis的基本命令
- 1.授权密码
- 2.增加、覆盖、查询、删除、切换库名、移动、清空数据库
- Redis持久化
- RDB模式
- 主动备份
- 自动备份
- RDB备份过程
- AOF备份模式
- 开启AOF备份模式
- 执行流程
- 总结
redis的基本命令
1.授权密码
config set requirepass 密码
设置完密码需要认证密码以后才能进行redis数据库的操作
auth 密码
查看密码
config get requirepass
我的密码为123123
2.增加、覆盖、查询、删除、切换库名、移动、清空数据库
增加键值对
set 键名 值
查询键值
get 键名
可以查出ry1的值为8701
删除键值
del 键名
覆盖 rename 覆盖会直接覆盖原来的键名,确定需要修改后再进行覆盖
rename 老键名 新键名
查看数据库中有多少条数据
dbsize
查看此库中所有键名
keys *
切换库名
redis数据库有0-15个库总共有16个库,进入redis默认是库0。
select 1
多数据库间移动数据
move 键名 库号
将10键从0库移到1库了
清空当前数据库
flushdb
清空所有数据库
flushall
Redis持久化
Redis持久化有两种模式,分别为RDB模式和AOF模式,其中RDB模式是类似与MySQL的回滚点,原理是将数据库数据作为快照保存在硬盘上AOF模式是原理是将 Reids 的操作日志以追加的方式写入文件
RDB模式
RDB持久化是指在指定的时间间隔内将内存中当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),用二进制压缩存储,保存的文件后缀是rdb;当Redis重新启动时,可以读取快照文件恢复数据
RDB模备份条件一共有两种
自动备份和主动备份
主动备份
RDB(Redis Database File)主动备份是指通过执行特定的命令来手动触发Redis的RDB持久化过程,从而创建一个数据快照。这个过程可以通过以下两个命令来实现:
- SAVE命令:
- 当执行SAVE命令时,Redis主进程会立即开始执行RDB快照的创建工作。
- 在这个过程中,主进程会阻塞,直到RDB文件创建完成。这意味着在
SAVE
命令执行期间,Redis将无法处理客户端的任何请求。 - 一旦SAVE命令执行完毕,Redis会返回一个成功响应,表示快照已经创建完成。
- BGSAVE命令:
- 当执行BGSAVE命令时,Redis主进程会fork一个子进程来执行实际的RDB快照写入操作。
- 在fork过程中,主进程会暂时阻塞,以便复制其内存页表给子进程。一旦fork完成,子进程开始创建RDB快照,而主进程可以继续处理客户端的请求。
- 子进程创建完RDB快照后,会用新的RDB文件替换掉旧的RDB文件,然后退出。
- BGSAVE命令是异步执行的,因此它不会阻塞主进程,这使得BGSAVE比SAVE更适合在生产环境中使用。
主动备份通常用于以下场景:
- 定期备份:可以通过定时执行BGSAVE命令来定期创建数据快照,以便于进行数据备份和灾难恢复。
- 手动备份:在需要的时候,可以通过执行SAVE或BGSAVE命令来手动创建一个数据快照。
自动备份
在自动触发RDB持久化时,Redis也会选择bgsave而不是save来进行持久化。
vim /etc/redis/6379.conf
219行
242行–是否开启RDB文件压缩
254行–指定RDB文件名
264行–指定RDB文件和AOF文件所在目录
RDB备份过程
您描述的RDB备份过程基本上是正确的,但是有一些细节需要澄清。以下是RDB备份过程的详细步骤:
- 执行
BGSAVE
命令:- 当客户端向Redis发送
BGSAVE
命令时,主进程会检查是否有其他子进程正在执行BGSAVE
或SAVE
命令。 - 如果有其他子进程正在执行这些命令,主进程会立即返回,因为同时只能有一个子进程用于RDB快照。
- 如果没有子进程正在执行
BGSAVE
或SAVE
命令,但有一个子进程正在执行BGREWRITEAOF
命令,BGSAVE
命令会等待BGREWRITEAOF
命令完成后再执行。
- 当客户端向Redis发送
- Fork子进程:
- 主进程fork一个子进程。在这个过程中,主进程会暂时阻塞,以便复制其内存页表给子进程。
- 一旦fork完成,子进程开始执行RDB快照的创建工作,而主进程可以继续处理客户端的请求。
- 生成RDB文件:
- 子进程遍历数据库,生成一个包含所有数据库数据的RDB文件。这个文件是当前数据库状态的快照。
- 替换旧的RDB文件:
- 当子进程完成RDB文件的写入后,它会用这个新的RDB文件替换掉旧的RDB文件。
- 替换完成后,子进程退出。
- 备份完成:
- 此时,
BGSAVE
命令执行完毕,一个新的RDB快照已经创建并替换了旧的快照文件。
在整个过程中,主进程只在fork子进程时短暂阻塞,之后可以继续处理客户端的请求。这使得BGSAVE
命令适合在生产环境中使用,因为它不会阻塞主进程太长时间。相比之下,SAVE
命令会阻塞主进程直到RDB快照创建完成,因此不适合在生产环境中使用。
- 此时,
AOF备份模式
开启AOF备份模式
Redis服务器默认是关闭AOF的,而不是开启。要开启AOF持久化,你需要修改Redis的配置文件
vim /etc/redis/6379.conf
700行–修改,开启AOF
704行–指定AOF文件名称
796行–是否忽略最后一条可能存在问题的指令
执行流程
AOF(Append Only File)持久化的执行流程包括以下三个主要步骤:
- 命令追加(Append):
当Redis执行写操作时,如设置键值、删除键等,这些操作的命令会被追加到AOF缓冲区(aof_buf)中。 - 文件写入与同步(Write and Sync):
根据配置的同步策略,Redis会将AOF缓冲区中的内容写入到硬盘上的AOF文件。 同步策略决定了何时将缓冲区中的内容写入到硬盘,以及如何保证数据的一致性。 - 文件重写(Rewrite):
为了优化性能和减少AOF文件的大小,Redis会定期对AOF文件进行重写。 重写过程会创建一个新的AOF文件,其中包含重建当前数据库状态所需的最小命令集。
通过这个流程,AOF持久化确保了数据的安全性和可靠性,同时在保持高性能的同时减少了文件的大小。
AOF重写工作原理
AOF(Append Only File)重写是Redis中一个用于压缩和重建AOF文件的过程,以减少文件大小并加快重启时的恢复速度。AOF重写通过创建一个新的AOF文件来替换现有的AOF文件,新文件包含重建当前数据库状态所需的最少命令集合。以下是AOF重写的工作原理:
- 触发重写:
AOF重写可以由用户显式地通过执行BGREWRITEAOF
命令来触发,也可以由Redis服务器自动触发,当AOF文件的大小超过配置的阈值时,Redis会自动执行AOF重写。 - 创建子进程:
当AOF重写被触发时,Redis主进程会fork一个子进程。这个子进程负责执行AOF重写操作,而主进程则继续处理客户端的请求。 - 构建新AOF文件:
子进程在内存中构建一个新的AOF文件,它遍历数据库中的每个键,并对其进行分析,生成对应的写入命令。对于每个键,它会生成一个最短的命令序列来重建当前的值。例如,对于一个经过多次修改的键,重写过程会生成一个单一的SET
命令,而不是之前的多个修改命令。 - 追加新命令:
在子进程进行AOF重写的同时,主进程会继续处理客户端的请求。这些新请求会被写入到AOF缓冲区,并且也会追加到旧的AOF文件中,以保证数据的持久性。同时,这些新命令也会被复制到一个AOF重写缓冲区。 - 同步和替换文件:
当子进程完成新AOF文件的构建后,它会通知主进程。主进程会将AOF重写缓冲区中的新命令追加到新AOF文件中,然后使用新的AOF文件替换旧的AOF文件。此时,新的AOF文件包含了重建当前数据库状态所需的最少命令集合。 - 清理和后续处理:
替换文件后,Redis会清理旧的AOF文件,并继续将新的写入命令追加到新的AOF文件中。如果在这个过程中发生故障,Redis可以在重启时使用新的AOF文件来恢复数据。
AOF重写是一个高效的过程,因为它不会阻塞主进程,并且生成的AOF文件通常会比原始文件小得多,这有助于减少磁盘空间的使用和加快Redis的启动时间。
总结
Redis的基本命令包括:
- 授权密码:通过
config set requirepass
设置密码,使用auth 密码
进行认证。 - 增加、覆盖、查询、删除、切换库名、移动、清空数据库:这些命令用于管理数据库中的键值对,包括增加键值对(
set 键名 值
)、查询键值(get 键名
)、删除键值(del 键名
)、重命名键(rename 老键名 新键名
)、查看数据库中的数据条数(dbsize
)、查看库中所有键名(keys *
)、切换库名(select 库号
)、在不同数据库间移动数据(move 键名 库号
)以及清空当前数据库(flushdb
)和清空所有数据库(flushall
)。
Redis的持久化机制包括两种模式:
- RDB模式:类似MySQL的回滚点,将数据库数据作为快照保存在硬盘上。RDB持久化可以通过主动备份(如执行
SAVE
或BGSAVE
命令手动创建数据快照)和自动备份(Redis自动执行BGSAVE
命令)来实现。 - AOF模式:将Redis的操作日志以追加的方式写入文件,用于数据恢复和灾难恢复。
这些命令和机制对于Redis的日常管理和维护至关重要,有助于确保数据的安全性和可用性。