有关Redis的相关概述

一、Redis概述

1.1 Redis简介

        Redis是一个开源的高性能键值对数据库,使用C语言编写,支持多种数据结构,如字符串(String)、列表(List)、哈希(Hash)、集合(Set)、有序集合(Sorted Set)等。它具有高性能、低延迟、丰富的数据结构、持久化、高可用等特性,广泛应用于各种场景,如缓存、消息队列、排行榜、计数器等.

1.2 Redis特点

  • 高性能:Redis将数据存储在内存中,访问速度快,能够处理大量的并发请求.
  • 低延迟:由于数据存储在内存中,Redis的响应时间非常短,适合实时性要求高的应用.
  • 丰富的数据结构:支持多种数据结构,能够满足不同的业务需求.
  • 持久化:提供RDB和AOF两种持久化方式,确保数据的持久性和安全性.
  • 高可用:支持主从复制、哨兵系统和集群架构,提高系统的可用性和可靠性.

二、Redis在数据库中的运用

2.1 缓存

  • 作用:作为缓存层,将热点数据存储在内存中,提高数据访问速度,减轻后端数据库的压力.
  • 运用方式
    • 读取数据:客户端请求数据时,先从Redis缓存中查询,如果缓存命中,则直接返回结果;如果缓存未命中,则查询后端数据库,并将结果存入Redis缓存.。
    • 更新数据:当数据发生变化时,更新后端数据库的同时,也需要更新Redis缓存中的数据,以保证数据的一致性。

示例代码如下:

# Python示例,使用redis-py库
import redis
r = redis.Redis(host='localhost', port=6379, db=0)# 设置缓存数据
r.set('key', 'value')# 获取缓存数据
value = r.get('key')
print(value)

2.2 消息队列

  • 作用:实现消息队列功能,用于异步处理任务和消息传递,提高系统的响应速度和吞吐量.
  • 运用方式
    • 发布/订阅模式:使用Redis的发布/订阅功能,发布者将消息发布到指定的频道,订阅者订阅该频道,当有新消息发布时,订阅者会收到消息。
    • List数据结构:利用List的先进先出(FIFO)特性,将任务或消息存储在List中,生产者将任务添加到List的末尾,消费者从List的头部取出任务进行处理。

示例代码:

# Python示例,使用redis-py库
import redis
r = redis.Redis(host='localhost', port=6379, db=0)# 发布消息
r.publish('channel', 'message')# 订阅消息
p = r.pubsub()
p.subscribe('channel')
for message in p.listen():print(message)

2.3 排行榜

  • 作用:用于实现排行榜功能,快速获取排名信息,适用于需要实时排名的场景.
  • 运用方式:使用Sorted Set数据结构,将数据项作为成员,分数作为排名依据,通过Sorted Set的命令进行数据的添加、删除、获取排名等操作.
  • 示例代码
# Python示例,使用redis-py库
import redis
r = redis.Redis(host='localhost', port=6379, db=0)# 添加排行榜数据
r.zadd('leaderboard', {'user1': 100, 'user2': 80})# 获取排名前N的用户
top_users = r.zrevrange('leaderboard', 0, 1, withscores=True)
print(top_users)

2.4 计数器

  • 作用:作为计数器,用于统计和计数,如访问量统计、点赞数统计等.
  • 运用方式:使用String数据结构,通过INCRDECRINCRBYDECRBY等命令对计数器进行自增、自减等操作.
  • 示例代码
# Python示例,使用redis-py库
import redis
r = redis.Redis(host='localhost', port=6379, db=0)# 计数器自增
r.incr('counter')# 获取计数器的值
count = r.get('counter')
print(count)

三、Redis持久化

3.1 RDB持久化

  • 原理:通过创建数据的快照(snapshot)来实现持久化,将内存中的数据集保存到磁盘上的一个RDB文件中.
  • 触发方式
    • 自动触发:在redis.conf配置文件中设置自动快照的频率,例如save 900 1.
    • 手动触发:使用SAVE命令立即触发快照,推荐使用BGSAVE命令在后台创建子进程执行快照操作.
  • 优点:快速恢复,适合全量备份.
  • 缺点:数据丢失风险,内存消耗.

3.2 AOF持久化

  • 原理:通过记录Redis服务器接收到的每个写命令来实现持久化,写命令会被追加到AOF文件的末尾.
  • 配置
    • 开启AOF:在redis.conf配置文件中设置appendonly yes.
    • 写入策略:通过appendfsync参数设置AOF的写入策略,如everysec.
  • 优点:数据安全性高,可读性好.
  • 缺点:文件体积大,恢复速度慢.

3.3 混合持久化

  • 原理:结合了RDB和AOF的优点,在AOF重写时,先将当前内存中的数据以RDB格式写入AOF文件的开头,然后再追加后续的写命令.
  • 配置:在redis.conf配置文件中设置aof-use-rdb-preamble yes.
  • 优点:启动速度快,数据安全性高.

四、Redis集群负载均衡

4.1 数据分片

  • 原理:将所有的键空间划分为多个片段(槽),每个片段由一个或多个Redis节点负责存储.
  • 数据分布:根据键通过哈希函数计算出对应的槽号,然后将数据存储在负责该槽的节点上.
  • 负载均衡效果:将数据和请求分散到多个节点上,避免单个节点过载,提高系统吞吐量和响应速度.

4.2 读写分离

  • 主从复制:每个节点可以有一个或多个从节点,主节点负责写操作,从节点负责读操作.
  • 读写请求分配:将写请求发送到主节点,将读请求发送到从节点,从节点可以有多个,客户端可以根据负载情况将读请求均匀分配到各个从节点上.
  • 负载均衡效果:有效分担负载,提高系统读取性能.

4.3 动态扩容与缩容

  • 节点添加:向集群中添加新的节点,集群会自动将一部分槽的数据迁移到新节点上,重新分配数据和请求.
  • 节点移除:移除部分节点前,将该节点负责的槽数据迁移到其他节点上,确保数据完整性和请求均衡分配.
  • 负载均衡效果:根据实际负载情况灵活调整资源,避免资源浪费和过载问题.

4.4 客户端请求路由

  • 客户端智能路由:客户端根据键计算出对应的槽号,并将请求发送到负责该槽的节点上,维护一个槽到节点的映射表.
  • 负载均衡效果:请求直接到达负责相应数据的节点,减少数据传输和节点间通信,提高请求响应速度和系统性能.

五、Redis数据库架构

5.1 单机架构

  • 特点:Redis服务器运行在单个机器上,所有数据存储在该机器的内存中.
  • 优点:部署简单,性能高.
  • 缺点:存在单点故障风险,存储容量受限.

5.2 主从复制架构

  • 特点:由一个主节点和多个从节点组成,主节点负责写操作,从节点负责读操作,数据从主节点同步到从节点.
  • 优点:提高可用性和读取性能,实现数据冗余备份.
  • 缺点:写操作性能受限,主从同步可能有延迟.

5.3 哨兵系统架构

  • 特点:由一个主节点和多个从节点组成,主节点负责写操作,从节点负责读操作,数据

    从主节点同步到从节点.

  • 优点:提高可用性和读取性能,实现数据冗余备份.
  • 缺点:写操作性能受限,主从同步可能有延迟.
  • 特点:在主从复制架构的基础上,引入哨兵节点,哨兵节点负责监控主从节点的状态,当主节点宕机时,自动进行故障转移,选举一个从节点作为新的主节点.
  • 优点:提高系统的高可用性,快速恢复服务.
  • 缺点:增加了系统复杂性.

5.4 集群架构

  • 特点:将数据分散存储在多个Redis节点上,每个节点负责一部分数据,通过分布式的方式实现数据的存储和访问.
  • 优点:提高可扩展性和存储容量,实现负载均衡.
  • 缺点:增加了系统复杂性,需要解决数据一致性、数据迁移等问题.

5.5 混合架构

  • 特点:结合了以上多种架构的特点,根据具体的业务需求和场景,灵活地部署Redis节点.
  • 优点:充分发挥各种架构的优势,满足不同的业务需求.
  • 缺点:部署和维护更加复杂,需要综合考虑各种因素进行优化和调整.

六、总结与建议

     Redis作为一种高性能的键值对数据库,具有广泛的应用场景和多种架构选择。在实际应用中,可以根据业务规模、性能要求、数据一致性需求等因素,选择合适的Redis架构和持久化策略,以实现高效、可靠、可扩展的存储和访问。

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

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

相关文章

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

计算机网络 (23)IP层转发分组的过程

一、IP层的基本功能 IP层(Internet Protocol Layer)是网络通信模型中的关键层,属于OSI模型的第三层,即网络层。它负责在不同网络之间传输数据包,实现网络间的互联。IP层的主要功能包括寻址、路由、分段和重组、错误检测…

国产游戏崛起,燕云十六移动端1.9上线,ToDesk云电脑先开玩

游戏爱好者的利好消息出新了!网易大型武侠仙游《燕云十六声》正式官宣,移动端要在1月9日正式上线了!你期待手游版的燕云吗?不妨评论区留言说说你的看法。小编分别花了几个小时在台式机电脑和手机上都试了下,欣赏画面还…

【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码

【HarmonyOS NEXT】鸿蒙应用实现屏幕录制详解和源码 一、前言 官方文档关于屏幕录制的API和示例介绍获取简单和突兀。使用起来会让上手程度变高。所以特意开篇文章,讲解屏幕录制的使用。官方文档参见:使用AVScreenCaptureRecorder录屏写文件(ArkTS) 二…

java mail 535 Login Fail. Please enter your authorization code to login

报错信息提示查看 https://service.mail.qq.com/detail/0/53 帮助页面意思就是说你要使用授权码登录, 但是授权码我已经正确的设置上去了 后面从 QQ邮箱出现错误 Please enter your authorization code to_邮件群发-双翼邮件群发软件官方网 看到 账户 需要是 QQ号 例如…

怎样修改el-table主题样式

起因:el-table有主题样式,部分需要单独设置 环境:ideanodejs插件谷歌浏览器 第一步:找到scss文件: 谷歌浏览器打开表格页面,ctrlshifti打开开发者工具,点击后鼠标移动到表格单元格上单击一下…

记录一次面试中被问到的问题 (HR面)

文章目录 一、你对公司的了解多少二、为什么对这个岗位感兴趣三、不能说的离职原因四、离职原因高情商回复五、你的核心优势是什么六、你认为你比其他面试候选人的优势是什么七、不要提及情感 一、你对公司的了解多少 准备要点: 在面试前,对公司进行充分…

从零开始:使用VSCode搭建Python数据科学开发环境

引言 在数据科学领域,一个高效、稳定的开发环境是成功的关键。本文将详细介绍如何使用Visual Studio Code搭建一个完整的Python数据科学开发环境。通过本指南,您将学会: 安装和配置VSCode,包括基本设置和快捷键配置设置Python开…

【C++习题】20. 两个数组的交集

题目:349. 两个数组的交集 - 力扣(LeetCode) 链接🔗:349. 两个数组的交集 - 力扣(LeetCode) 题目: 代码: class Solution { public:// 函数功能:求两个数组…

【深度学习】深度(Deep Learning)学习基础

深度学习(Deep Learning) 深度学习是一种基于人工神经网络的机器学习方法,通过多个层次(深度)的神经网络从数据中自动学习特征和模式。它是人工智能的一个核心领域,尤其在处理复杂数据(如图像、…

【MySQL 保姆级教学】用户管理和数据库权限(16)

数据库账户管理是指对数据库用户进行创建、修改和删除等操作,以控制用户对数据库的访问权限。通过账户管理,可以设置用户名、密码、主机地址等信息,确保数据库的安全性和可控性。例如,使用 CREATE USER 创建用户,ALTER…

STM32+WIFI获取网络时间+8位数码管显示+0.96OLED显

资料下载地址:STM32WIFI获取网络时间8位数码管显示0.96OLED 1、项目介绍 主控芯片STM32C8T6 接线:串口1:PA9 PA10 OELD :PB6 PB7 数码管使用:MAX7219 8位数码管 Max7219_pinCLK PAout(5) Max7219_pinC…

决定系数(R²分数)——评估回归模型性能的一个指标

目录 1.定义 2.计算举例 3. 结果分析 1.定义 R(R平方)分数,也称为决定系数,是用来评估回归模型性能的一个指标。它表示自变量解释因变量变异性的比例。R分数的取值范围通常在0到1之间,其值越接近1,说明…

代码随想录算法训练营day23

代码随想录算法训练营 —day23 文章目录 代码随想录算法训练营前言一、39. 组合总和二、40.组合总和II三、131.分割回文串总结 前言 今天是算法营的第23天,希望自己能够坚持下来! 今日任务: ● 39. 组合总和 ● 40.组合总和II ● 131.分割回…

【电子通识】PWM驱动让有刷直流电机恒流工作

电机的典型驱动方法包括电压驱动、电流驱动以及PWM驱动。本文将介绍采用PWM驱动方式的恒流工作。 首先介绍的是什么是PWM驱动的电机恒流工作,其次是PWM驱动电机恒流工作时电路的工作原理。 PWM驱动 当以恒定的电流驱动电机时,电机会怎样工作呢&#xff1…

基于html5实现音乐录音播放动画源码

源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI,点击按钮后,会变成为一个监听按钮。旁边会有音符飞入这个监听按钮,最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码

精度论文:【Coordinate Attention for Efficient Mobile Network Design】

Coordinate Attention for Efficient Mobile Network Design 《用于高效移动网络设计的坐标注意力机制》1.引言2.相关工作2.1 移动网络架构2.2 注意力机制 3. 坐标注意力3.1. 回顾SE注意力 (Squeeze-and-Excitation Attention)3.2. 坐标注意力块3.2.1 坐标信息嵌入3.2.2 坐标注…

高等数学学习笔记 ☞ 一元函数微分的基础知识

1. 微分的定义 (1)定义:设函数在点的某领域内有定义,取附近的点,对应的函数值分别为和, 令,若可以表示成,则称函数在点是可微的。 【 若函数在点是可微的,则可以表达为】…

openai swarm agent框架源码详解及应用案例实战

文章目录 简介数据类型Agent类Response类Result类Swarm类run_demo_loop交互式会话 基础应用agent-handsofffunction-callingcontext_variablestriage_agent 高阶应用通用客服机器人(support bot)构建航班服务agent 参考资料 openai 在24年10月份开源了一个教育性质的多agents协…

【测试】——Cucumber入门

📖 前言:Cucumber框架是行为驱动(BDD)框架的一种,通过自然语言站在功能使用者视角,描述编写测试用例。简单来说就是通过feature文件编写脚本,脚本对应java写的方法,会有一个启动器配…