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

相关推荐
deadknight92 小时前
Oracle密码过期处理方式
数据库·oracle
Ljubim.te2 小时前
数据库第01讲章节测验(选项顺序可能不同)
数据库
吱吱喔喔2 小时前
数据分表和分库原理
数据库·分表·分库
快乐非自愿2 小时前
KES数据库实践指南:探索KES数据库的事务隔离级别
数据库·oracle
一只fish2 小时前
Oracle的RECYCLEBIN回收站:轻松恢复误删对象
数据库·oracle
weixin_440401692 小时前
分布式锁——基于Redis分布式锁
java·数据库·spring boot·redis·分布式
TOR-NADO2 小时前
数据库概念题总结
数据库·oracle
云计算练习生2 小时前
理解MySQL核心技术:存储过程与函数的强大功能
数据库·mysql·存储过程·函数·mysql函数
zengson_g2 小时前
当需要对大量数据进行排序操作时,怎样优化内存使用和性能?
java·数据库·算法·排序算法
胡尚3 小时前
Nacos源码分析:心跳机制、健康检查、服务发现、AP集群
java·数据库·服务发现