前言
Redis(Remote Dictionary Server)是一个开源的高性能键值对存储系统。它通常被称为数据结构服务器,因为它不仅支持简单的字符串类型数据存储,还支持列表、集合、有序集合、哈希表等多种复杂数据结构。
总结了一下Redis的主要特点:
- 高性能:Redis以内存作为主要存储介质,读写速度非常快,适合处理高并发的应用场景。
- 持久化:Redis支持两种持久化方式,即RDB快照和AOF日志,可以在系统崩溃时恢复数据。
- 数据类型丰富:除了简单的键值对外,还支持列表、集合、有序集合、哈希表等多种数据结构。
- 原子操作:Redis的所有操作都是原子的,适合用于实现分布式锁、计数器等功能。
- 主从复制:Redis支持主从复制功能,可以实现数据的高可用和读写分离。
- 发布/订阅:Redis支持发布/订阅模式,可以用于构建消息系统。
安装配置
首先上链接:https://download.csdn.net/download/qq_40558166/11965269Redis的连接地址
1、首先解压文件
2、配置环境变量
3.变成服务,进入安装目录下,地址栏cmd,然后输入命令
3.2 执行reids文件
redis-server --service-install redis.windows.conf --loglevel verbose
3.2 启动redis
redis-server --service-start
3.3 验证是否启动
Get-Service -Name Redis
5.启动客户端和服务端命令
打开cmd,启动redis-server:服务器命令
redis-server redis.windows.conf
再打开cmd。启动redis-cli :客户端命令
redis-cli
注意:一个redis。windows.conf配置就是一个redis服务器,需要启动多个服务器时,只需要修改一下这个配置文件的名称redis.windows.conf,再用redis-server就可以启动
1、Redis的数据类型
redis是一个高性能的key-value存储系统数据库。它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)
数据类型 | 特点 | 使用场景 |
---|---|---|
String | 最基本的数据类型,可以存储字符串、整数或浮点数。 支持原子性的自增和自减操作。 | 缓存数据,如网页内容。 计数器,如网站访问量统计。 存储会话信息,如用户登录状态。 |
List | 有序的字符串列表。 可以在列表的头部或尾部添加元素。 可以获取某个范围内的元素。 | 消息队列,如消息发布和订阅系统。 >最近使用的项目列表,如最近浏览的商品。 任务队列,如后台任务处理。 |
Set | 无序的字符串集合。 每个元素都是唯一的。 支持交集、并集和差集操作。 | 存储唯一值,如用户标签。 多个集合的操作,如共同好友、共同兴趣等。随机事件,如抽奖系统。 |
Sorted Set | 每个元素都有一个分数(score)。 元素按分数从小到大排序。 <br> 支持按分数范围获取元素。 | 排行榜,如游戏积分排行榜。 带有时间戳的数据,如最新消息列表。 带权重的任务调度,如优先级队列。 |
Hash | 存储键值对的无序散列表。 适合存储对象。 可以一次性获取或修改多个字段。 | 存储对象,如用户信息。 存储配置信息,如系统参数。 存储复杂的结构化数据,如购物车。 |
2、Redis的基础命令
命令类别 | 命令 |
---|---|
字符串 (String) | |
SET key value | 设置指定键的值。 |
GET key | 获取指定键的值。 |
INCR key | 将键的值递增1。 |
DECR key | 将键的值递减1。 |
MSET key1 value1 key2 value2 ... | 同时设置多个键的值。 |
MGET key1 key2 ... | 同时获取多个键的值。 |
列表 (List) | |
LPUSH key value | 将值插入列表的头部。 |
RPUSH key value | 将值插入列表的尾部。 |
LPOP key | 移除并返回列表头部的元素。 |
RPOP key | 移除并返回列表尾部的元素。 |
LRANGE key start stop | 获取列表中指定范围的元素。 |
集合 (Set) | |
SADD key member | 向集合添加一个或多个成员。 |
SREM key member | 从集合移除一个或多个成员。 |
SMEMBERS key | 获取集合中的所有成员。 |
SISMEMBER key member | 判断成员是否在集合中。 |
有序集合 (Sorted Set) | |
ZADD key score member | 向有序集合添加一个或多个成员及其分数。 |
ZREM key member | 从有序集合移除一个或多个成员。 |
ZRANGE key start stop | 按分数从小到大获取有序集合中的成员。 |
ZREVRANGE key start stop | 按分数从大到小获取有序集合中的成员。 |
哈希 (Hash) | |
HSET key field value | 为哈希表中的字段设置值。 |
HGET key field | 获取哈希表中指定字段的值。 |
HMSET key field1 value1 field2 value2 ... | 同时为哈希表中的多个字段设置值。 |
HMGET key field1 field2 ... | 同时获取哈希表中多个字段的值。 |
HGETALL key | 获取哈希表中的所有字段和值。 |
通用命令 | |
DEL key | 删除指定键。 |
EXISTS key | 检查键是否存在。 |
TYPE key | 返回键的类型。 |
KEYS pattern | 查找所有符合给定模式的键。 |
FLUSHALL | 清空所有数据库 |
Redis的事务
数据库事务是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。
特性 | Redis 事务 | MySQL 事务 |
---|---|---|
原子性 | 支持基本的原子性,但命令执行失败不会回滚。 | 支持原子性,所有操作作为一个整体执行,要么全部成功,要么全部失败。 |
一致性 | 不保证一致性,事务中的失败操作不会影响其他操作。 | 保证一致性,事务执行后数据库从一个一致状态转换到另一个一致状态。 |
隔离性 | 没有传统的事务隔离级别,所有命令按顺序执行,无并发控制。 | 提供多种隔离级别(如READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE),防止并发操作带来的问题。 |
持久性 | 不保证持久性,默认情况下数据存储在内存中,重启后丢失。 | 保证持久性,数据写入磁盘,重启后数据不丢失。 |
锁定机制 | 没有传统的事务锁定机制,使用乐观锁(WATCH命令)控制并发。 | 使用悲观锁机制,如行锁、表锁,防止并发操作对数据的影响。 |
事务命令 | MULTI , EXEC , DISCARD , WATCH | START TRANSACTION , COMMIT , ROLLBACK |
失败处理 | 命令执行失败不会自动回滚,需要手动处理。 | 失败时自动回滚,恢复到事务开始前的状态。 |
性能 | 由于内存存储,性能非常高,但不保证持久性。 | 性能相对较低,但保证持久性和数据一致性。 |
适用场景 | 适用于对速度要求高、对持久性要求不高的场景。 | 适用于对数据一致性和持久性要求高的场景。 |
Redis持久化配置
1.RDB和AOF比较
为了防止数据丢失以及服务重启时能够恢复数据,Redis支持数据的持久化,主要分为两种方式:RDB和AOF,redis默认采用的是RDB的方式。
特性 | RDB(Redis DataBase) | AOF(Append-Only File) |
---|---|---|
持久化方式 | 定期快照,将内存中的数据集以二进制格式保存到磁盘。 | 追加日志,将每个写操作追加到文件末尾。 |
文件格式 | 二进制文件(.rdb) | 文本文件,记录每个写操作的命令。 |
恢复速度 | 快,因为恢复时只需加载二进制文件到内存。 | 较慢,因为需要逐条执行日志中的命令。 |
文件大小 | 较小,因为只保存数据集的快照。 | 较大,因为记录了每个写操作的详细信息。 |
数据丢失风险 | 较高,如果在两次快照之间发生故障,数据可能会丢失。 | 较低,除非 AOF 文件被破坏,否则数据丢失风险较小。 |
写入频率 | 不频繁,定期执行快照。 | 较频繁,每个写操作都会被记录。 |
配置选项 | save 配置选项,如 save 900 1 表示900秒内有1个键变化时触发快照。 | appendonly 配置选项,如 appendonly yes 启用 AOF。 |
重启性能 | 较高,重启时加载快照文件到内存。 | 较低,重启时需要逐条执行 AOF 文件中的命令。 |
恢复点 | 固定时间点,如每小时、每天的快照。 | 无限接近实时,因为每个写操作都被记录。 |
适用场景 | 对数据丢失容忍度较高,需要快速备份和恢复的场景。 | 对数据完整性和一致性要求较高,能够容忍较慢恢复速度的场景。 |
混合使用 | 可以与 AOF 混合使用,先加载 RDB 快照,再执行 AOF 日志。 | 可以与 RDB 混合使用,先加载 RDB 快照,再执行 AOF 日志(Redis 4.0+)。 |
两种持久化机制的比较
特性 | RDB(Redis DataBase) | AOF(Append-Only File) |
---|---|---|
持久化方式 | 定期生成快照,保存某个时间点上的数据集。 | 记录每个写操作的命令,追加到文件末尾。 |
文件格式 | 二进制文件(.rdb) | 文本文件,记录每个写操作的命令。 |
恢复速度 | 快,因为只需要加载一个二进制文件。 | 较慢,因为需要逐条执行文件中的命令。 |
文件大小 | 较小,只包含数据集的快照。 | 较大,包含所有写操作的详细信息。 |
数据丢失风险 | 较高,如果在两次快照之间发生故障,数据可能会丢失。 | 较低,除非 AOF 文件被破坏,否则数据丢失风险较小。 |
写入频率 | 不频繁,定期执行快照。 | 较频繁,每个写操作都会被记录。 |
配置选项 | save 配置选项,如 save 900 1 表示900秒内有1个键变化时触发快照。 | appendonly 配置选项,如 appendonly yes 启用 AOF。 |
重启性能 | 较高,重启时加载快照文件到内存。 | 较低,重启时需要逐条执行 AOF 文件中的命令。 |
恢复点 | 固定时间点,如每小时、每天的快照。 | 无限接近实时,因为每个写操作都被记录。 |
适用场景 | 对数据丢失容忍度较高,需要快速备份和恢复的场景。 | 对数据完整性和一致性要求较高,能够容忍较慢恢复速度的场景。 |
混合使用 | 可以与 AOF 混合使用,先加载 RDB 快照,再执行 AOF 日志。 | 可以与 RDB 混合使用,先加载 RDB 快照,再执行 AOF 日志(Redis 4.0+)。 |
详细比较
-
RDB 优点:
- 恢复速度快: 因为只加载一个二进制文件,恢复速度非常快。
- 文件小: 只包含数据集的快照,文件体积较小。
- 备份方便: 可以方便地将 RDB 文件复制到其他地方进行备份。
-
RDB 缺点:
- 数据丢失风险高: 如果在两次快照之间发生故障,可能会丢失部分数据。
- 不实时: 不是实时持久化,而是定期快照。
-
AOF 优点:
- 数据丢失风险低: 除非 AOF 文件被破坏,否则数据丢失风险较小。
- 实时性高: 每个写操作都会被记录,接近实时持久化。
- 可重写: AOF 文件可以被重写,减少文件体积。
-
AOF 缺点:
- 恢复速度慢: 因为需要逐条执行文件中的命令,恢复速度较慢。
- 文件大: 包含所有写操作的详细信息,文件体积较大。
- 性能影响: 每个写操作都会被记录,可能会对性能产生一定影响。
混合持久化
在 Redis 4.0 之后,引入了混合持久化(Mixed Persistence)的方式,结合了 RDB 和 AOF 的优点,以提供更高效和可靠的数据持久化方案。
混合持久化的工作原理
在开启混合持久化的情况下,AOF 重写时会将 Redis 的持久化数据以 RDB 的格式写入到 AOF 文件的开头,之后的数据再以 AOF 的格式追加到文件的末尾。这种方式结合了 RDB 的高效性和 AOF 的可靠性。
混合持久化的优点
- 快速启动: 由于 AOF 文件的开头部分是以 RDB 格式存储的数据快照,Redis 可以快速加载这部分数据,从而加快启动速度。
- 减少数据丢失风险: 结合了 AOF 的实时性,减少了在故障发生时数据丢失的风险。
- 高效性: RDB 格式的数据快照使得文件体积较小,减少了文件大小和加载时间。
混合持久化的缺点
- 可读性差: AOF 文件中添加了 RDB 格式的内容,使得 AOF 文件的可读性变得很差,难以直接查看或手动修改。
- 兼容性差: 混合持久化的 AOF 文件不能用于 Redis 4.0 之前的版本,因为这些版本不支持混合持久化格式。
关键字
- RDB:Redis DataBase,高效的二进制文件格式,快速加载。
- AOF:Append-Only File,记录每个写操作的命令,提供更高的数据可靠性。
- 混合持久化:结合 RDB 和 AOF 的优点,提供更高效和可靠的数据持久化方案。
- 快速启动:混合持久化使得 Redis 可以更快的启动。
- 减少数据丢失风险:结合 AOF 的优点,减少了数据丢失的风险。
- 可读性差:AOF 文件中添加了 RDB 格式的内容,使得文件可读性变差。
- 兼容性差:混合持久化的 AOF 文件不能用于 Redis 4.0 之前的版本。
如何配置持久化
在 Redis 中配置持久化可以通过修改 redis.conf
配置文件来实现。以下是如何配置 RDB 和 AOF 持久化的详细步骤。
配置 RDB 持久化
RDB 持久化通过定期生成数据快照来保存数据。可以通过 redis.conf
文件中的 save
指令来配置 RDB 持久化策略。
1. 打开 redis.conf
文件
sudo nano /etc/redis/redis.conf
2. 配置 save
指令
在文件中找到并修改 save
指令。save
指令的格式是 save <seconds> <changes>
,表示在指定的秒数内有指定的键变化时触发快照。
例如:
save 900 1 # 900 秒内有 1 个键变化时触发快照
save 300 10 # 300 秒内有 10 个键变化时触发快照
save 60 10000 # 60 秒内有 10000 个键变化时触发快照
3. 配置 RDB 文件的保存路径和名称
在文件中找到并修改 dir
和 dbfilename
指令
dir /var/lib/redis # 指定 RDB 文件保存的目录
dbfilename dump.rdb # 指定 RDB 文件的名称
4. 保存并退出
保存文件并退出编辑器。
5. 重启 Redis 服务
使配置生效:
sudo systemctl restart redis
配置 AOF 持久化
AOF 持久化通过记录每个写操作的命令来保存数据。可以通过 redis.conf
文件中的 appendonly
和相关指令来配置 AOF 持久化策略。
1. 打开 redis.conf
文件
sudo nano /etc/redis/redis.conf
2. 启用 AOF 持久化
找到并修改 appendonly
指令:
appendonly yes # 启用 AOF 持久化
3. 配置 AOF 文件的保存路径和名称
在文件中找到并修改 dir
和 appendfilename
指令:
dir /var/lib/redis # 指定 AOF 文件保存的目录
appendfilename "appendonly.aof" # 指定 AOF 文件的名称
4. 配置 AOF 重写策略
在文件中找到并修改 appendfsync
指令,控制 AOF 文件的同步频率
appendfsync everysec # 每秒同步一次(推荐)
# appendfsync always # 每次写操作都同步(性能较差)
# appendfsync no # 不主动同步,由操作系统决定(性能最好)
5. 保存并退出
保存文件并退出编辑器。
6. 重启 Redis 服务
使配置生效:
sudo systemctl restart redis
配置混合持久化
如果你使用的是 Redis 4.0 及以上版本,并且希望启用混合持久化,可以通过以下步骤配置:
1. 打开 redis.conf
文件
sudo nano /etc/redis/redis.conf
2. 启用混合持久化
找到并修改 aof-use-rdb-preamble
指令:
aof-use-rdb-preamble yes # 启用混合持久化
3. 保存并退出
保存文件并退出编辑器。
4. 重启 Redis 服务
使配置生效:
sudo systemctl restart redis
通过以上步骤,你可以根据需求配置 Redis 的持久化策略,确保数据的安全性和可靠性。