有关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,一经查实,立即删除!

相关文章

_controller_validate

在 controller 中我们首先对所有的请求进行日志记录,身份校验,参数校验之后直接把过滤后的数据丢给 logic(serviceImpl) 。这样子一来 controller 只是充当了 路由 过滤器 的作用,如果之后修改 API ,前端的请求地址不需要修改&am…

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

MyBatis面试-1

1、什么是MyBatis? MyBatis是一个半ORM框架(对象关系映射)。---》Hibernate全ORM框架 ---》基于JDBC封装的框架 专注于SQL语句,不用关心JDBC操作的其他流程 2、MyBatis有什么优点 基于SQL语句的编程,相对来说会更加的灵活和JDBC相比&#…

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

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

历代iPhone运行内存大小和电池容量信息

系列设备名称充电端口标配充电线PD快充无线充电 (W)标配充电器电池容量 (mAh)发布时间RAM运存iPhone 16iPhone 16 Pro MaxUSB Type-CUSB-C to USB-C支持25无47472024/9/108GB LPDDR5XiPhone 16 ProUSB Type-CUSB-C to USB-C支持25无35772024/9/108GB LPDDR5XiPhone 16 PlusUSB …

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;且…

如何在 Hive SQL 中处理复杂的数据类型?

目录 一、复杂数据类型简介 二、创建表时使用复杂数据类型 三、插入数据到复杂数据类型的表 四、查询复杂数据类型

Mysql 性能优化:索引条件下推(ICP)

MySQL 索引下推&#xff08;Index Condition Pushdown&#xff0c;ICP&#xff09;是一种查询优化技术&#xff0c;旨在提高使用索引的查询效率。它是在 MySQL 5.6 中引入的&#xff0c;通过将部分 WHERE 子句的过滤条件下推到索引扫描阶段来减少不必要的回表操作&#xff0c;从…

Linux 环境(Ubuntu)部署 Hadoop 环境

前置准备 准备三台机器 cat /etc/hosts 192.168.1.7 hadoop-master 192.168.1.11 hadoop-slave01 192.168.1.12 hadoop-slave02Linux 环境 cat /etc/os-release PRETTY_NAME"Ubuntu 24.10" NAME"Ubuntu" VERSION_ID"24.10" VERSION"24.…

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

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

JavaScrip中对于数组的操作的方法(!!是否改变原数组)

1. push() 功能&#xff1a;向数组的末尾添加一个或多个元素&#xff0c;并返回新数组的长度。&#xff08;改变原数组&#xff09;示例&#xff1a; let arr [1, 2, 3]; arr.push(4); // [1, 2, 3, 4] 2. pop() 功能&#xff1a;移除数组的最后一个元素&#xff0c;并返回…

C语言基本知识复习浓缩版:标识符、函数、进制、数据类型

C语言基本知识复习浓缩版&#xff1a;标识符、函数、进制、数据类型 【c语言期末复习3小时速成【完整全集】期末速成含考试题c语言期末速成突击复习C语言补考C语言期末大一】 B站看到的复习C语言视频&#xff0c;感觉非常棒&#xff0c;就跟着进行了一下学习。众所周知&#…

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

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

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

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

开源靶场1

我来为您介绍一些知名的开源漏洞靶场平台: DVWA (Damn Vulnerable Web Application) 最流行的 Web 漏洞靶场之一包含 SQL 注入、XSS、文件包含等常见漏洞基于 PHP MySQL适合 Web 安全入门学习 WebGoat OWASP 开源项目基于 Java包含大量 Web 安全漏洞练习提供详细的教程和解…

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

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

OpenCV相机标定与3D重建(49)将视差图(disparity map)重投影到三维空间中函数reprojectImageTo3D()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 将视差图像重投影到3D空间。 cv::reprojectImageTo3D 是 OpenCV 库中的一个函数&#xff0c;用于将视差图&#xff08;disparity map&#xff09…

Python 通过命令行在 unittest.TestCase 中运行单元测试

文章目录 unittest 模块简介编写单元测试在命令行中运行所有测试在命令行中运行单个测试使用装饰器跳过测试总结常用断言方法 unittest 模块简介 unittest是Python标准库中的一个模块&#xff0c;用于编写和运行单元测试。它提供了一个单元测试框架&#xff0c;使得编写测试用…