有关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.mzph.cn/bicheng/66629.shtml

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

相关文章

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer(WebGL渲染器) THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

Idea-离线安装SonarLint插件地址

地址: SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace 选择Install Plugin from Disk..,选中下载好的插件,然后重启idea

Unity:删除注册表内的项目记录

然后WinR按键输入regedit 打开注册表 在注册表 HKEY CURRENT USER—>SOFTWARE—>Unity—>UnityEditor—>DefaultCompany —>language_Test 中,删除我们的之前存储的语言环境数据。在 “ 三、文本调用和替换 ” 测试时已经将语言环境存储到注册表中了…

JAVA学习记录3

文章为个人学习记录,仅供参考,如有错误请指出。 上期说到使用记事本编写Java程序太过繁琐,所以我们后面都将使用IDEA进行代码的编写、编译和运行。 如何下载安装IDEA? 这个的下载途径也很多,我还是推荐去官网下载(h…

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…

GMDH自组织网络模型时间序列预测,可预测未来

GMDH自组织网络模型时间序列预测&#xff0c;可预测未来 目录 GMDH自组织网络模型时间序列预测&#xff0c;可预测未来效果一览基本介绍模型构建程序设计学习总结参考资料 效果一览 基本介绍 GMDH自组织网络模型是自组织数据挖掘中的一种模型方法&#xff0c;是基于计算机科学和…

【docker系列】可视化Docker 管理工具——Portainer

1. 介绍 Portainer是一个可视化的Docker操作界面&#xff0c;提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作&#xff08;包括上传下载镜像&#xff0c;创建容器等操作&#xff09;、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录…

Linux/Ubuntu/银河麒麟 arm64 飞腾FT2000 下使用 arm64版本 linuxdeployqt 打包Qt程序

文章目录 一、前言二、环境三、准备1、下载Linuxdeployqt源码2、下载Appimagetool-aarch64.AppImage四、编译linuxdeployqt1.配置环境变量2.编译linuxdeployqt五、安装patchelf六、配置Appimagetool七、打包Qt程序重要提示:测试启动应用八、其他九、最后一、前言 因为项目需要…

pg数据库运维经验2024

这篇文章主要是讲pg运维常见问题&#xff0c;两三年见一次的疑难杂症就不说了。 主要是技术性运维总结&#xff0c;主打通俗易懂和快速上手&#xff0c;尽量避免源码层面等深入分析。 SQL性能与执行计划 执行计划突变 pg官方不支持hint功能&#xff0c;并且计划永远不支持&…

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载&#xff1a;https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…

个人博客搭建(二)—Typora+PicGo+OSS

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; 做个超努力的小奚-CSDN博客 一、前言 博客搭建完一直没有更新&#xff0c;因为WordPress自带的文档编辑器不方便&#xff0c;以前用CSDN写作的时候&#xff0c;习惯了Typora。最近对比了…

【向量数据库】搜索算法

最近几年&#xff0c;一种叫做向量数据库的产品&#xff0c;正趁着AI的热潮开始崭露头角。伴随着AI时代的到来&#xff0c;向量将成为一种重要的数据形式&#xff0c;而传统数据库并不适合用来存储和检索向量数据&#xff0c;因此我们大约需要一种专门设计的数据库来处理这些问…

ARM CCA机密计算安全模型之安全生命周期管理

安全之安全(security)博客目录导读 目录 一、固件启用的调试 二、CCA系统安全生命周期 三、重新供应 四、可信子系统与CCA HES 启用 CCA&#xff08;机密计算架构&#xff09;的安全系统是指 CCA 平台的实现处于可信状态。 由于多种原因&#xff0c;CCA 启用系统可能处于不…

k8s排错集:zk集群的pod报错 Init:CrashLoopBackOff无法启动

zk三节点集群&#xff0c;zk-0无法启动 statefulset 进到该node节点上查看容器的报错日志&#xff0c;发现在初始化container的时候一个命令有问题 查看正常zk集群的pod的资源配置文件 解决办法&#xff1a; 修改资源配置文件 应该修改为 chown -R 1000:1000 /zkenv kubec…

Golang的并发编程框架比较

# Golang的并发编程框架比较 中的并发编程 在现代软件开发中&#xff0c;处理高并发的能力愈发重要。Golang作为一门支持并发编程的编程语言&#xff0c;提供了丰富的并发编程框架和工具&#xff0c;使得开发者能够更轻松地处理并发任务。本文将介绍Golang中几种常用的并发编程…

【Web】软件系统安全赛CachedVisitor——记一次二开工具的经历

明天开始考试周&#xff0c;百无聊赖开了一把CTF&#xff0c;还顺带体验了下二开工具&#xff0c;让无聊的Z3很开心&#x1f642; CachedVisitor这题 大概描述一下&#xff1a;从main.lua加载一段visit.script中被##LUA_START##(.-)##LUA_END##包裹的lua代码 main.lua loca…

单纯形法的学习笔记

文章目录 A. 单纯形法概述1. 优化模型示例 B. 理论基础C. 算法思想D. 实现算法1. 线性规划的标准型2. 顶点解的理解及表示2.1 在标准型中变量取值为零的意义2.2 顶点解的表示 3. 最优性判断4. 解的更新5. 完成迭代过程 E. 单纯形法的基本概念与本文对照F. 文档源码 前言&#x…

【VBA】【EXCEL】将某列内容横向粘贴到指定行

Sub CopyRowToColumn()On Error GoTo ErrorHandler 添加错误处理Application.ScreenUpdating FalseApplication.Calculation xlCalculationManualApplication.EnableEvents False 禁用事件处理Dim lastCol As LongDim lastRow As LongDim i As Long, colCount As LongDim …

JS进阶--JS听到了不灭的回响

作用域 作用域&#xff08;scope&#xff09;规定了变量能够被访问的“范围”&#xff0c;离开了这个“范围”变量便不能被访问 作用域分为局部和全局 局部作用域 局部作用域分为函数和块 那 什么是块作用域呢&#xff1f; 在 JavaScript 中使用 { } 包裹的代码称为代码块…