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

news2025/2/23 23:19:22

       这一节我们来介绍如何使用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.coloradmin.cn/o/1866437.html

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

相关文章

优思学院|精益生产3大特征、5个步骤、8大浪费、10大工具

前言 精益生产作为一种先进的生产管理理念,起源于丰田汽车公司的生产方式,其核心在于消除浪费、优化流程,以最少的投入获取最大的产出。本文将详细解析精益生产的三大特征、五个步骤、八大浪费和十大工具,帮助读者深入理解这一理…

【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven项目源代码+文档

1项目功能 【java计算机毕设】学生作业管理系统java MySQL ssm JSP maven 项目设计源代码 文档 期末小组作业 2项目介绍 系统功能: 学生作业管理系统包括管理员、小管理员、教师、学生四种角色。 管理员功能包括个人中心模块用于修改个人信息和密码、管理员管理、学…

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…

vue封装原生table表格方法

适用场景:有若干个表格,前面几列格式不一致,但是后面几列格式皆为占一个单元格,所以需要封装表格,表格元素自动根据数据结构生成即可;并且用户可新增列数据。 分类: 固定数据部分 就是根据数据…

合合信息智能文档抽取:赋能不良资产管理行业的数字化转型

官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 随着数字化浪潮的汹涌澎湃,全球各行各业正经历着前所未有的变革。人工智能技术的快速发展,以其独特的创新能力和应用潜力,正在深刻地改变着业务模式,推动产业效率的…

【AIGC】AI技术兴起,设计师要大量失业了吗?

一、前言 随着技术的不断迭代,AIGC 能力的可控性得到了进一步提升,可应用的场景也越来越多,在文本、图像、视频等多个领域都有了广泛应用。 用户已经可以用自然语言来与 AI 工具进行交互,革新传统办公方式,工作任务可…

【Python datetime模块精讲】:时间旅行者的日志,精准操控日期与时间

文章目录 前言一、datetime模块简介二、常用类和方法三、date类四、time类五、datetime类六、timedelta类七、常用的函数和属性八、代码及其演示 前言 Python的datetime模块提供了日期和时间的类,用于处理日期和时间的算术运算。这个模块包括date、time、datetime和…

通过命令行配置调整KVM的虚拟网络

正文共:1234 字 20 图,预估阅读时间:2 分钟 在上篇文章中(最小化安装的CentOS7部署KVM虚拟机),我们介绍了如何在最小化安装的CentOS 7系统中部署KVM组件和相关软件包。因为没有GUI图形界面,我们…

【Java Web】XML格式文件

目录 一、XML是什么 二、常见配置文件类型 *.properties类型: *.xml类型: 三、DOM4J读取xml配置文件 3.1 DOM4J的使用步骤 3.2 DOM4J的API介绍 一、XML是什么 XML即可扩展的标记语言,由标记语言可知其基本语法和HTML一样都是由标签构成的文件…

深度之眼(二十六)——神经网络基础知识(一)

文章目录 一、前言二、神经网络与多层感知机2.1 人工神经元2.2 人工神经网络2.3 多层感知机2.4 激活函数 一、前言 看了下课程安排,自己还是没安排好,刚刚捋清了一下思路。 基础:python、数理 认识:神经网络基础、opencv基础、py…

一探究竟:板式家具生产线如何实现精细加工?

随着科技的进步,板式家具行业正经历着一场由传统手工加工向自动化、智能化生产的转变。板式家具生产线如何实现精细加工,已成为行业内关注的焦点。那么,一条完整的板式家具生产线如何实现精细加工的呢?本文将深入探讨。 板式家具生…

直流电机双闭环调速Simulink仿真

直流电机参数: 仿真模型算法介绍: 1)三相整流桥,采用半控功率器件SCR晶闸管; 2)采用转速环、电流环 双闭环控制算法; 3)外环-转速环,采用PI 比例积分控制;…

vue3 层级选择器 el-cascader展示 更多的信息

cascader 正常情况下可以满足我们所需&#xff0c;一般展示的就是 {label:‘’ &#xff1b;value:‘’} 但有时候需要展示更多的信息工用户查看&#xff0c;如下图。此时就需要我们进行一定的改造。 代码如下&#xff1a; <el-form-item label"相关人员"><…

240626_昇思学习打卡-Day8-稀疏矩阵

240626_昇思学习打卡-Day8-稀疏矩阵 稀疏矩阵 在一些应用场景中&#xff0c;比如训练二值化图像分割时&#xff0c;图像的特征是稀疏的&#xff0c;使用一堆0和极个别的1表示这些特征即费事又难看&#xff0c;此时就可以使用稀疏矩阵。通过参考大佬博文&#xff0c;结合个人理…

第十八课,函数基本语法规则

一&#xff0c;编程中函数的介绍 函数像一个黑盒子、加工厂、榨汁机等等&#xff08;你能想到的任何类似的比喻&#xff09;&#xff0c;它会经过一个固定的规则将你送入其中的参数变成另一个样子、或者实现某种预想的功能&#xff08;比如print()函数、input()函数、以及在tu…

npm-check【实用教程】升级项目中的依赖

安装 npm-check npm i -g npm-check检查项目中的依赖 npm-check会显示项目中没有使用&#xff0c;以及有新版本的依赖 升级项目中的依赖 npm-check -u方向键上下可以移动图中左侧的箭头空格键可选中/取消选中标注为 Major Update 和 Non-semver 类的版本&#xff0c;需去官网查…

对抗生成网络GANP52-

1.对抗生成网络的重点&#xff1a;有原始的输入&#xff0c;按照需求&#xff0c;生成新的数据。 eg1:超分辨率重构(首先先告诉神经网络什么是低分辨率&#xff0c;什么是高分辨率&#xff0c;让计算机学习两者的联系。 eg2:警察抓小偷的时候&#xff0c;由于录像太过模糊&…

STM32 HAL库里 串口中断回调函数是在怎么被调用的?

跟着正点原子学习的HAL库写串口接收程序的时候一直有困惑&#xff0c;使用HAL_UART_Receive_IT开启接收中断后&#xff0c;为啥处理函数要写在HAL_UART_RxCpltCallback里&#xff0c;中断发生的时候是怎么到这个回调函数里去的&#xff1f; void MX_USART1_UART_Init(void) {h…

three.js基础环境搭建

three.js three.js介绍安装threejs文件资源目录介绍本地静态服务器vscode配置live-server插件nodejs配置本地静态服务器项目的开发环境引入threejs 基础知识右手坐标系程序结构 three.js介绍 three.js官网 Three.js是一款基于WebGL的JavaScript 3D库&#xff0c;它使得开发者能…