Redis数据库(五):Redis数据库基本特性

这一节我们来介绍如何使用C语言的库来操作Redis数据库。

目录

一、hiredis的安装

[1.1 下载源码](#1.1 下载源码)

[1.2 解压](#1.2 解压)

[1.3 进入hiredis路径下](#1.3 进入hiredis路径下)

[1.4 利用makefile文件进行编译](#1.4 利用makefile文件进行编译)

二、接口介绍

三、C程序操作Redis代码

四、redis.conf配置文件详解

五、Redis的持久化

[5.1 RDB (Redis DataBase)](#5.1 RDB (Redis DataBase))

[5.2 AOF(Append Only File)](#5.2 AOF(Append Only File))

六、Redis发布订阅(了解)

[6.1 发布/订阅模型](#6.1 发布/订阅模型)

[6.2 相关命令](#6.2 相关命令)


一、hiredis的安装

Hiredis 是一个用于C 语言的轻量级 Redis 客户端库,旨在提供高效、可靠的 Redis 服务器通信接口。它支持同步和异步 API,适用于高性能应用。Hiredis 提供高效的内存管理,减少内存泄漏风险,广泛用于实时数据处理、缓存系统和高并发网络服务中。hiredis是Redis官方推荐的基于C接口的客户端组件,它提供接口,供c语言调用以操作数据库。

1.1 下载源码

进入终端,执行以下命令:

等待下载完成,会有如下的压缩包:

1.2 解压

执行如下解压命令,会得到如上图的安装包:

1.3 进入hiredis路径下

打开Redis的源码包,进入deps/hiredis路径下,如下所示:

1.4 利用makefile文件进行编译

执行make命令,如下所示:

切换到管理员身份,执行make install命令,如下:

执行ldconfig命令, 使动态库在系统中更新生效

二、接口介绍

三、C程序操作Redis代码

四、redis.conf配置文件详解

`redis.conf` 是 Redis 服务器的配置文件,用于定义 Redis 服务器的运行参数和行为。以下是一些关键配置项的详细说明

基本配置

  1. daemonize
  • 描述:是否以守护进程模式运行。

  • 默认值:`no`

  • 配置示例:`daemonize yes`

  1. pidfile
  • 描述:指定 Redis 进程的 PID 文件路径。

  • 默认值:`/var/run/redis.pid`

  • 配置示例:`pidfile /var/run/redis_6379.pid`

  1. port
  • 描述:监听的端口号。

  • 默认值:`6379`

  • 配置示例:`port 6380`

  1. bind
  • 描述:绑定的 IP 地址。

  • 默认值:未设置则绑定所有可用地址

  • 配置示例:`bind 127.0.0.1`

性能优化

  1. tcp-backlog
  • 描述:TCP连接队列的最大长度。

  • 默认值:`511`

  • 配置示例:`tcp-backlog 1024`

  1. timeout
  • 描述:客户端闲置超时断开连接的时间(秒)。

  • 默认值:`0` (永不超时)

  • 配置示例:`timeout 300`

  1. tcp-keepalive
  • 描述:TCP连接的keepalive时间(秒)。

  • 默认值:`300`

  • 配置示例:`tcp-keepalive 60`

内存管理

  1. maxmemory
  • 描述:最大内存使用量。

  • 默认值:无上限

  • 配置示例:`maxmemory 256mb`

  1. maxmemory-policy
  • 描述:内存达到最大限制后的淘汰策略。

  • 可选值:`noeviction`、`allkeys-lru`、`volatile-lru`、`allkeys-random`、`volatile-random`、`volatile-ttl`

  • 默认值:`noeviction`

  • 配置示例:`maxmemory-policy allkeys-lru`

持久化

  1. save
  • 描述:指定在多长时间内,有多少次写操作,就进行持久化。

  • 默认值:`save 900 1`(15分钟内至少1次写操作)

  • 配置示例:`save 900 1` `save 300 10` `save 60 10000`

  1. rdbcompression
  • 描述:是否启用RDB文件的压缩。

  • 默认值:`yes`

  • 配置示例:`rdbcompression no`

  1. appendonly
  • 描述:是否启用AOF(Append Only File)持久化。

  • 默认值:`no`

  • 配置示例:`appendonly yes`

  1. appendfsync
  • 描述:AOF文件的同步策略。

  • 可选值:`always`、`everysec`、`no`

  • 默认值:`everysec`

  • 配置示例:`appendfsync always`

安全性

  1. requirepass
  • 描述:设置访问Redis的密码。

  • 默认值:无

  • 配置示例:`requirepass yourpassword`

  1. rename-command
  • 描述:重命名或禁用某个命令以提高安全性。

  • 配置示例:`rename-command FLUSHALL ""` (禁用 FLUSHALL 命令)

日志和监控

  1. loglevel
  • 描述:日志记录级别。

  • 可选值:`debug`、`verbose`、`notice`、`warning`

  • 默认值:`notice`

  • 配置示例:`loglevel verbose`

  1. logfile
  • 描述:日志文件路径。

  • 默认值:空 (日志输出到标准输出)

  • 配置示例:`logfile /var/log/redis/redis.log`

复制与高可用

  1. slaveof
  • 描述:配置当前实例为其他 Redis 实例的从节点。

  • 配置示例:`slaveof 127.0.0.1 6379`

  1. masterauth
  • 描述:配置从节点连接主节点时使用的密码。

  • 配置示例:`masterauth yourmasterpassword`

  1. replica-announce-ip
  • 描述:指定在复制设置中从节点向主节点报告的 IP 地址。

  • 配置示例:`replica-announce-ip 192.168.1.100`

这些是 `redis.conf` 文件中常见且重要的配置项。根据实际需求和环境,可以进一步调整和优化这些配置。

五、Redis的持久化

Redis是内存数据库,如果不将内存中的数据库状态保存到磁盘中,那么一旦服务器进程退出,服务 器中的数据库状态也会消失。所以Redis提供了持久化的功能。

持久化就是把内存上的东西往磁盘上存,Redis进行持久化有两种方式:RDB方式和AOF方式,redis默认的是RDB方式,以及各自的优缺点。(面试)

5.1 RDB (Redis DataBase)

Redis 的持久化方式之一是 RDB(Redis DataBase),它通过生成数据库的快照(snapshot)来保存数据。

什么是 RDB 持久化?

RDB 持久化会在指定的时间间隔内创建整个 Redis 数据集的快照,并将快照保存到磁盘上。这种方式确保了 Redis 数据在意外重启或服务器宕机时不会丢失太多。

RDB 的工作原理

  1. 创建快照:RDB 持久化机制在特定条件满足时触发,比如在一定时间内有一定数量的写操作时。Redis 会在内存中生成一个快照,然后将这个快照写入到磁盘文件中,文件通常以 `.rdb` 为扩展名。
  2. 写入磁盘:生成的快照文件是 Redis 数据的二进制压缩副本,写入磁盘后保存起来。

RDB 的触发条件

RDB 持久化的触发条件可以在 `redis.conf` 配置文件中设置,比如:

  • `save 900 1` 表示 900 秒内至少有 1 次写操作时触发 RDB 持久化。

  • `save 300 10` 表示 300 秒内至少有 10 次写操作时触发 RDB 持久化。

  • `save 60 10000` 表示 60 秒内至少有 10000 次写操作时触发 RDB 持久化。

RDB 的优缺点

优点:

  1. 高效的恢复速度:RDB 文件体积小,加载速度快,适合快速恢复大量数据。
  2. 对性能影响小:在保存快照时,Redis 主进程可以继续处理客户端请求,不会被阻塞。

缺点:

  1. 数据可能丢失:因为 RDB 是在特定时间间隔内进行快照,所以在最后一次快照后到 Redis 崩溃之间的数据可能会丢失。
  2. 快照耗时:如果数据量很大,生成快照的过程可能会耗费较长时间,导致性能下降。

使用场景

  1. 需要快速启动和恢复 Redis 数据的情况。
  2. 数据不经常变动且对丢失少量数据不敏感的应用场景。

总结来说,RDB 持久化通过定期将内存数据生成快照并保存到磁盘,确保 Redis 的数据在服务器重启或意外崩溃时能得到一定程度的保护。虽然可能会丢失最后一次快照后的部分数据,但它为快速恢复数据提供了有效的手段。

5.2 AOF(Append Only File)

每执行一个命令,就存一次磁盘,恢复时,把曾经所有执行过的命令全部执行一遍。

AOF(Append Only File)是 Redis 提供的另一种持久化方式,通过记录每一个写操作来实现数据持久化。

什么是 AOF 持久化?

AOF 持久化记录了 Redis 服务器执行的每一个写操作,将这些操作以日志的形式追加到文件中。这种方式确保了每一个写操作都被记录下来,可以用来在服务器重启时重放操作日志,恢复数据。

AOF 的工作原理

  1. 记录写操作:每次有写操作(如 `SET`、`DEL` 等)时,Redis 会将这个操作以命令的形式记录到 AOF 文件中。比如,执行 `SET key value` 时,这个命令会被追加到 AOF 文件中。
  2. 同步写入磁盘:为了保证数据安全,AOF 文件需要定期同步到磁盘。Redis 提供了多种同步策略来控制同步的频率和方式。
  3. 重写日志:随着时间的推移,AOF 文件会变得越来越大。为了防止文件过大,Redis 会在后台自动进行日志重写(rewrite),通过生成一个新的 AOF 文件来包含当前数据集的最简操作序列。

AOF 的同步策略

可以通过 `appendfsync` 配置项来控制 AOF 文件的同步策略:

  1. 1always:每次有写操作时,立即将操作同步到磁盘。这种方式最安全,但性能最差。- 配置示例:`appendfsync always`
  2. everysec:每秒将写操作同步到磁盘。这种方式在性能和数据安全之间做了平衡,通常是推荐的选择。 配置示例:`appendfsync everysec`
  3. no:让操作系统自行决定何时将数据同步到磁盘。性能最好,但可能会丢失几秒钟的数据。配置示例:`appendfsync no`

AOF 的优缺点

优点:

  1. 数据丢失少:AOF 可以最大程度地减少数据丢失,特别是在配置 `appendfsync always` 或 `everysec` 时。
  2. 日志可读性好:AOF 文件以 Redis 命令的形式记录,便于理解和审查。
  3. 灵活的同步策略:可以根据应用的需求选择不同的同步策略,平衡性能和数据安全。

缺点:

  1. 文件体积大:AOF 文件比 RDB 文件大,因为它记录了每一个写操作。
  2. 恢复速度慢:由于需要重放所有写操作,恢复数据的时间比加载 RDB 文件要长。
  3. 性能影响:频繁的磁盘写操作可能会影响 Redis 的性能,特别是在高并发写入的场景下。

使用场景

  1. 高数据安全性要求:需要最小化数据丢失的应用场景。
  2. 写操作频繁:数据更新频繁且对数据丢失敏感的应用。
  3. 需要可读日志:需要能够查看和分析写操作日志的应用。

组合使用 RDB 和 AOF

Redis 允许同时开启 RDB 和 AOF 持久化,以利用两者的优势:

  1. RDB 提供了快速的全量数据恢复。
  2. AOF 提供了更高的数据安全性。

六、Redis发布订阅(了解)

Redis发布订阅(pub/sub)是一种 消息通信模式:发布者(pub)发送消息,订阅者(sub)接受消 息。 应用: 微信、抖音等的关注系统! Redis客户端可以订阅任意数量的频道。

6.1 发布/订阅模型

6.2 相关命令

至此,Redis数据库第五节就介绍完毕,这一节内容作个简单了解,更多精彩内容见后期博客!感谢阅读,如果喜欢,点赞加关注!

相关推荐
数据智能老司机2 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机1 天前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿1 天前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
Kagol1 天前
macOS 和 Windows 操作系统下如何安装和启动 MySQL / Redis 数据库
redis·后端·mysql
无名之逆1 天前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601011 天前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机1 天前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构