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

       这一节我们来介绍如何使用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 的工作原理

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/35870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32CubeMX与RT-Thread Studio协助使用(实现点亮LED)

1创建自己的项目 1-1选择板子 1-2生成的项目 运行一下看是否创建成功 零警告零错误 2配置STM32Cude 2-1找打如图图标点击(CubeMX的图标) 2-2输入自己安装的路径选中exe文件 点击Browse 找到如图选中,在打开(STM32CubeMX的安装路…

echarts 5.5.0版本下的层叠柱形图,每个值都从0开始,会有覆盖情况

需求: 1、每个公司,需要两个柱子去展示(stack: 1是第一个柱子,stack:2,是第二个柱子); 2、必须每个数据都是从0开始,不在上一个值上累加; 3、鼠标滑上去的时候,最大值…

什么是API?如何进行API对接?

目录 一、API和API对接的定义 二、API接口的应用场景 三、为什么需要API对接 四、如何进行API对接 GET请求 POST请求 五、API对接的注意事项 在这个数字化时代,API像一把万能钥匙,让数据流动起来,创造出无限可能。本文旨在介绍API及其…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…

科普:什么是 BC-404 ?全方位解读最新通缩型 NFT 标准

区块链技术飞速发展的今天,创新从未停歇。继 ERC-404 标准问世后,一个名为 BC-404 的新标准应运而生,为 NFT 市场带来了全新的可能性。BC-404(Bonding Curve 404)—基于对 ERC-404 的改进,加密货币中第一个…

三、知识库搭建

知识库搭建 1 介绍词向量向量数据库 2 使用embedding API3 数据处理数据加载数据清洗文档分割 4 搭建并使用向量数据库4.1 自定义embedding封装4.2 chroma数据库4.3 向量检索 详细代码参考:https://github.com/lin902/llm-application 1 介绍 词向量 词向量就是把…

RK3568平台开发系列讲解(调试篇)分析内核调用的利器 ftrace

🚀返回专栏总目录 文章目录 一. 指定 ftrace 跟踪器二、设置要 trace 的函数三、ftrace 的开关四、查看 trace五、trace-cmd 的使用六、trace-cmd 的常用选项6.1、查看可以跟踪的事件6.2、跟踪特定进程的函数调用6.3、函数过滤6.4、限制跟踪深度6.5、追踪特定事件沉淀、分享、…

CesiumJS【Basic】- #016 多边形面渲染“花了”的问题

文章目录 多边形面渲染“花了”的问题1 目标2 问题代码3 修正后代码4 总结多边形面渲染“花了”的问题 1 目标 解决多边形的面“花了”的问题 2 问题代码 使用Cesium.PerInstanceColorAppearance渲染后出现色斑 import * as Cesium from "cesium";const viewer …

防火墙双机热备

防火墙双机热备 随着移动办公、网上购物、即时通讯、互联网金融、互联网教育等业务蓬勃发展,网络承载的业务越来越多,越来越重要。所以如何保证网络的不间断传输成为网络发展过程中急需解决的一个问题。 防火墙部署在企业网络出口处,内外网之…

Orangepi Zero2使用外设驱动库wiringOP配合时间函数驱动HC-SR04超声波测距模块

目录 一、HC-SR04超声波模块原理和硬件接线 1.1 超声波测距原理: 1.2 超声波时序图: 1.3 HC-SR04超声波模块硬件接线: 二、时间函数 2.1 时间函数gettimeofday()原型和头文件: 2.2 使用gettimeofday()函数获取当前时间的秒数…

【osgEarth】Ubuntu 22.04 源码编译osgEarth 3.5

下载源代码 git clone --depth1 https://dgithub.xyz/gwaldron/osgearth -b osgearth-3.5 下载子模块 git submodule update --init 如果下载不过来,就手动修改下.git/config文件,将子模块的地址替换成加速地址 (base) yeqiangyeqiang-Default-string…

打印一张A4纸多少钱?打印a4多少钱一张

在数字化日益发展的今天,打印服务依然是办公、学习和生活中不可或缺的一部分。对于广大用户来说,了解A4纸打印的价格成为选择打印服务的重要参考因素。那么,A4纸打印到底多少钱一张呢? 在琢贝云打印平台,打印价格非常实…

Arcengine 添加字段时,显示General function failuer

一、现象 Arcengine开发的时候,在addfield(添加字段)操作时,显示General function failuer。如下图所示: 二、问题原因 General function failuer是常规故障,问题原因是文件占用,只要把文件在…

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码

文华wh6均线交易策略多空波段止盈止损提示主图指标公式源码&#xff1a; EMA120:EMA(C,120); RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1); D:SMA(K,3,1); J:3*K-2*D; DRAWTEXT(C>EMA120&&J<0,L,多),VALIGN0; DRAWTEXT(C<EMA…

AcWing算法基础课笔记——求组合数3

求组合数Ⅲ 20万组数据&#xff0c; 1 ≤ b ≤ a ≤ 1 0 18 , 1 ≤ p ≤ 1 0 5 1 \le b \le a \le 10^{18}, 1\le p \le 10 ^5 1≤b≤a≤1018,1≤p≤105&#xff0c;使用卢卡斯定理。 卢卡斯定理&#xff1a; C a b ≡ C a m o d p b m o d p C a / p b / p ( m o d p ) C_a…

SSI 注入漏洞

0x00漏洞描述 SSI 英文是 Server Side Includes 的缩写&#xff0c;翻译成中文就是服务器端包含的意思。从技术角度上说&#xff0c;SSI 就是在 HTML 文件中&#xff0c;可以通过注入注释调用的命令或指针。SSI 具有强大的功能&#xff0c;只要使用一条简单的 SSI 命令就可以实…

day2-web安全漏洞攻防-基础-弱口令、HTML注入(米斯特web渗透测试)

day2-web安全漏洞攻防-基础-弱口令、HTML注入&#xff08;米斯特web渗透测试&#xff09; 1&#xff0c;漏洞2&#xff0c;弱口令3&#xff0c;爆破&#xff08;1&#xff09;Burpsuite&#xff08;2&#xff09;攻击类型 4&#xff0c;HTML针剂注入 1&#xff0c;漏洞 挖掘和利…

批量打造怀旧风情:视频批量剪辑将现代视频打造成怀旧经典老视频效果

在繁忙的现代生活中&#xff0c;我们时常怀念那些旧时光&#xff0c;那些充满岁月痕迹的老电影片段。它们不仅记录了一个时代的风貌&#xff0c;更承载了无数人的情感与记忆。你是否想过&#xff0c;将现代的视频素材打造成这种怀旧经典的老视频效果&#xff0c;让每一帧都充满…

【手眼标定】使用kalibr对imu和双目摄像头进行联合标定

使用kalibr对imu和双目摄像头进行联合标定 前言一、IMU标定二、双目摄像头标定三、手眼标定&#xff08;imu和双目摄像头的联合标定&#xff09; 前言 由于本文的imu、双目摄像头都是在ros2环境下开发&#xff0c;数据传输自然也是在ros2中。 但想要使用kalibr进行标定&#x…

骑马与砍杀战团mod制作-基础-军队笔记(一)

骑马与砍杀战团mod制作-基础-军队装备笔记&#xff08;一&#xff09; 资料来源 学习的资料来源&#xff1a; b站【三啸解说】手把手教你做【骑砍】MOD&#xff0c;基础篇&#xff0c;链接为&#xff1a; https://www.bilibili.com/video/BV19x411Q7No?p4&vd_sourcea507…