这一节我们来介绍如何使用C语言的库来操作Redis数据库。
目录
一、hiredis的安装
1.1 下载源码
1.2 解压
1.3 进入hiredis路径下
1.4 利用makefile文件进行编译
二、接口介绍
三、C程序操作Redis代码
四、redis.conf配置文件详解
五、Redis的持久化
5.1 RDB (Redis DataBase)
5.2 AOF(Append Only File)
六、Redis发布订阅(了解)
6.1 发布/订阅模型
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`2. pidfile
- 描述:指定 Redis 进程的 PID 文件路径。
- 默认值:`/var/run/redis.pid`
- 配置示例:`pidfile /var/run/redis_6379.pid`3. port
- 描述:监听的端口号。
- 默认值:`6379`
- 配置示例:`port 6380`4. bind
- 描述:绑定的 IP 地址。
- 默认值:未设置则绑定所有可用地址
- 配置示例:`bind 127.0.0.1`性能优化
5. tcp-backlog
- 描述:TCP连接队列的最大长度。
- 默认值:`511`
- 配置示例:`tcp-backlog 1024`6. timeout
- 描述:客户端闲置超时断开连接的时间(秒)。
- 默认值:`0` (永不超时)
- 配置示例:`timeout 300`7. tcp-keepalive
- 描述:TCP连接的keepalive时间(秒)。
- 默认值:`300`
- 配置示例:`tcp-keepalive 60`内存管理
8. maxmemory
- 描述:最大内存使用量。
- 默认值:无上限
- 配置示例:`maxmemory 256mb`9. maxmemory-policy
- 描述:内存达到最大限制后的淘汰策略。
- 可选值:`noeviction`、`allkeys-lru`、`volatile-lru`、`allkeys-random`、`volatile-random`、`volatile-ttl`
- 默认值:`noeviction`
- 配置示例:`maxmemory-policy allkeys-lru`持久化
10. save
- 描述:指定在多长时间内,有多少次写操作,就进行持久化。
- 默认值:`save 900 1`(15分钟内至少1次写操作)
- 配置示例:`save 900 1` `save 300 10` `save 60 10000`11. rdbcompression
- 描述:是否启用RDB文件的压缩。
- 默认值:`yes`
- 配置示例:`rdbcompression no`12. appendonly
- 描述:是否启用AOF(Append Only File)持久化。
- 默认值:`no`
- 配置示例:`appendonly yes`13. appendfsync
- 描述:AOF文件的同步策略。
- 可选值:`always`、`everysec`、`no`
- 默认值:`everysec`
- 配置示例:`appendfsync always`安全性
14. requirepass
- 描述:设置访问Redis的密码。
- 默认值:无
- 配置示例:`requirepass yourpassword`15. rename-command
- 描述:重命名或禁用某个命令以提高安全性。
- 配置示例:`rename-command FLUSHALL ""` (禁用 FLUSHALL 命令)日志和监控
16. loglevel
- 描述:日志记录级别。
- 可选值:`debug`、`verbose`、`notice`、`warning`
- 默认值:`notice`
- 配置示例:`loglevel verbose`17. logfile
- 描述:日志文件路径。
- 默认值:空 (日志输出到标准输出)
- 配置示例:`logfile /var/log/redis/redis.log`复制与高可用
18. slaveof
- 描述:配置当前实例为其他 Redis 实例的从节点。
- 配置示例:`slaveof 127.0.0.1 6379`19. masterauth
- 描述:配置从节点连接主节点时使用的密码。
- 配置示例:`masterauth yourmasterpassword`20. 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 的工作原理
- 创建快照:RDB 持久化机制在特定条件满足时触发,比如在一定时间内有一定数量的写操作时。Redis 会在内存中生成一个快照,然后将这个快照写入到磁盘文件中,文件通常以 `.rdb` 为扩展名。
- 写入磁盘:生成的快照文件是 Redis 数据的二进制压缩副本,写入磁盘后保存起来。
RDB 的触发条件
RDB 持久化的触发条件可以在 `redis.conf` 配置文件中设置,比如:
- `save 900 1` 表示 900 秒内至少有 1 次写操作时触发 RDB 持久化。
- `save 300 10` 表示 300 秒内至少有 10 次写操作时触发 RDB 持久化。
- `save 60 10000` 表示 60 秒内至少有 10000 次写操作时触发 RDB 持久化。RDB 的优缺点
优点:
- 高效的恢复速度:RDB 文件体积小,加载速度快,适合快速恢复大量数据。
- 对性能影响小:在保存快照时,Redis 主进程可以继续处理客户端请求,不会被阻塞。
缺点:
- 数据可能丢失:因为 RDB 是在特定时间间隔内进行快照,所以在最后一次快照后到 Redis 崩溃之间的数据可能会丢失。
- 快照耗时:如果数据量很大,生成快照的过程可能会耗费较长时间,导致性能下降。
使用场景
- 需要快速启动和恢复 Redis 数据的情况。
- 数据不经常变动且对丢失少量数据不敏感的应用场景。
总结来说,RDB 持久化通过定期将内存数据生成快照并保存到磁盘,确保 Redis 的数据在服务器重启或意外崩溃时能得到一定程度的保护。虽然可能会丢失最后一次快照后的部分数据,但它为快速恢复数据提供了有效的手段。
5.2 AOF(Append Only File)
每执行一个命令,就存一次磁盘,恢复时,把曾经所有执行过的命令全部执行一遍。
AOF(Append Only File)是 Redis 提供的另一种持久化方式,通过记录每一个写操作来实现数据持久化。
什么是 AOF 持久化?
AOF 持久化记录了 Redis 服务器执行的每一个写操作,将这些操作以日志的形式追加到文件中。这种方式确保了每一个写操作都被记录下来,可以用来在服务器重启时重放操作日志,恢复数据。
AOF 的工作原理
- 记录写操作:每次有写操作(如 `SET`、`DEL` 等)时,Redis 会将这个操作以命令的形式记录到 AOF 文件中。比如,执行 `SET key value` 时,这个命令会被追加到 AOF 文件中。
- 同步写入磁盘:为了保证数据安全,AOF 文件需要定期同步到磁盘。Redis 提供了多种同步策略来控制同步的频率和方式。
- 重写日志:随着时间的推移,AOF 文件会变得越来越大。为了防止文件过大,Redis 会在后台自动进行日志重写(rewrite),通过生成一个新的 AOF 文件来包含当前数据集的最简操作序列。
AOF 的同步策略
可以通过 `appendfsync` 配置项来控制 AOF 文件的同步策略:
- 1always:每次有写操作时,立即将操作同步到磁盘。这种方式最安全,但性能最差。- 配置示例:`appendfsync always`
- everysec:每秒将写操作同步到磁盘。这种方式在性能和数据安全之间做了平衡,通常是推荐的选择。 配置示例:`appendfsync everysec`
- no:让操作系统自行决定何时将数据同步到磁盘。性能最好,但可能会丢失几秒钟的数据。配置示例:`appendfsync no`
AOF 的优缺点
优点:
- 数据丢失少:AOF 可以最大程度地减少数据丢失,特别是在配置 `appendfsync always` 或 `everysec` 时。
- 日志可读性好:AOF 文件以 Redis 命令的形式记录,便于理解和审查。
- 灵活的同步策略:可以根据应用的需求选择不同的同步策略,平衡性能和数据安全。
缺点:
- 文件体积大:AOF 文件比 RDB 文件大,因为它记录了每一个写操作。
- 恢复速度慢:由于需要重放所有写操作,恢复数据的时间比加载 RDB 文件要长。
- 性能影响:频繁的磁盘写操作可能会影响 Redis 的性能,特别是在高并发写入的场景下。
使用场景
- 高数据安全性要求:需要最小化数据丢失的应用场景。
- 写操作频繁:数据更新频繁且对数据丢失敏感的应用。
- 需要可读日志:需要能够查看和分析写操作日志的应用。
组合使用 RDB 和 AOF
Redis 允许同时开启 RDB 和 AOF 持久化,以利用两者的优势:
- RDB 提供了快速的全量数据恢复。
- AOF 提供了更高的数据安全性。
六、Redis发布订阅(了解)
Redis发布订阅(pub/sub)是一种 消息通信模式 :发布者(pub)发送消息,订阅者(sub)接受消 息。 应用: 微信、抖音等的关注系统! Redis客户端可以订阅任意数量的频道。
6.1 发布/订阅模型
6.2 相关命令
至此,Redis数据库第五节就介绍完毕,这一节内容作个简单了解,更多精彩内容见后期博客!感谢阅读,如果喜欢,点赞加关注!