Redis简介、数据结构、高性能读写、持久化机制、分布式架构
Redis 是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件等,以下是对 Redis 的详细介绍:
数据结构丰富
- Redis 支持多种数据结构,如字符串(String)、哈希(Hash)、列表(List)、集合(Set)、有序集合(Sorted Set)等。这些数据结构使得 Redis 能够满足各种不同的应用场景,例如:
- 字符串:可以用来存储用户的登录信息、配置参数等简单的键值对数据。
- 哈希:适合存储对象类型的数据,如用户信息、商品信息等,将对象的各个属性作为哈希的字段进行存储。
- 列表:可以实现消息队列、任务队列等功能,还可以用于存储文章的评论列表、商品的浏览历史等有序的数据集合。
- 集合:常用于处理标签、好友关系等不重复的数据集合,例如可以快速查找某个用户的所有好友。
- 有序集合:在集合的基础上增加了每个元素的分数,可以根据分数进行排序,常用于排行榜、优先级队列等场景。
高性能读写
- Redis 将数据存储在内存中,内存的读写速度远远快于磁盘,因此 Redis 具有极高的读写性能。这使得它能够在处理大量并发请求时快速响应,满足对性能要求极高的应用场景,如实时数据处理、高频交易系统等。
- Redis 采用了单线程的架构,但通过高效的事件驱动模型和非阻塞 I/O 等技术,充分利用了 CPU 资源,避免了多线程带来的上下文切换开销,进一步提高了性能和并发处理能力。
持久化机制
- 为了保证数据的安全性和可靠性,Redis 提供了两种持久化方式:RDB(Redis Database Backup file)和 AOF(Append Only File)。
- RDB 持久化:是将 Redis 在内存中的数据以快照的形式保存到磁盘上的一个二进制文件中。可以通过配置文件指定在一定时间间隔内或满足一定条件时自动执行快照操作,例如每隔 15 分钟或数据发生了 100 次修改时进行一次 RDB 持久化。RDB 文件是一个紧凑的二进制文件,非常适合用于数据备份和恢复,恢复数据时可以直接将 RDB 文件加载到内存中。
- AOF 持久化:则是将 Redis 执行的每一条写命令追加到一个日志文件中,当需要恢复数据时,重新执行 AOF 文件中的所有命令来重建数据集。AOF 持久化可以提供更可靠的数据安全性,因为它记录了数据的每一次修改操作,但由于需要不断地追加写命令,AOF 文件可能会变得很大,需要定期进行重写以优化文件大小。
分布式架构支持
- Redis 支持多种分布式架构模式,以满足不同规模和性能需求的应用场景,常见的有以下几种:
- 主从复制:一个 Redis 服务器可以作为主服务器,多个 Redis 服务器作为从服务器,从服务器会自动从主服务器同步数据。主从复制可以实现数据的备份、读写分离等功能,提高系统的可用性和扩展性。
- 哨兵模式:是在主从复制的基础上,引入了哨兵节点来监控主从服务器的运行状态。当主服务器出现故障时,哨兵会自动选举一个从服务器作为新的主服务器,实现自动故障转移,保证系统的高可用性。
- 集群模式:Redis 集群将数据分布在多个节点上,通过哈希槽的方式对数据进行分片存储,每个节点负责一部分哈希槽。集群模式可以实现数据的自动分片、负载均衡和高可用性,能够支持大规模的数据存储和高并发的访问。
应用场景广泛
- 缓存:由于 Redis 具有高性能的读写能力,常被用作缓存层来缓存热点数据,减轻后端数据库的压力,提高系统的整体性能和响应速度。例如,在一个电商网站中,可以将热门商品的信息、用户的登录状态等缓存到 Redis 中,下次请求时直接从 Redis 中获取数据,大大提高了系统的并发处理能力和响应时间。
- 消息队列:Redis 的列表数据结构可以很方便地实现消息队列的功能。生产者可以将消息插入到列表的一端,消费者则从列表的另一端取出消息进行处理。通过这种方式,可以实现异步消息处理,解耦不同系统之间的依赖关系,提高系统的可扩展性和可靠性。
- 实时数据统计:Redis 的原子操作和高性能使其非常适合用于实时数据统计,如网站的实时访问量统计、在线用户数统计等。可以使用 Redis 的原子自增操作来实时更新统计数据,并且能够快速地获取当前的统计结果。
- 分布式锁:在分布式系统中,为了保证同一时间只有一个客户端能够访问某个资源或执行某个操作,可以使用 Redis 来实现分布式锁。通过在 Redis 中设置一个特定的键值对,并使用原子操作来判断和设置该键值对的状态,从而实现对资源的互斥访问控制。
- 社交网络:Redis 的集合和有序集合数据结构可以用于处理社交网络中的好友关系、关注列表、点赞数、排行榜等功能。例如,可以使用集合来存储用户的好友列表,使用有序集合来实现热门话题的排行榜等。
相关文章:
Redis简介、数据结构、高性能读写、持久化机制、分布式架构
Redis 是一个开源的、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件等,以下是对 Redis 的详细介绍: 数据结构丰富 Redis 支持多种数据结构,如字符串(String)、哈希(Hash&am…...

鸿蒙自定义UI组件导出使用
上期讲解了在Entry入口写了一个系统的下拉列表组件,如果我们想要封装一个可供复用的组件供团队其他人使用,那么需要掌握一下自定义组件的写法: 1、自定义可导入组件 - export 声明模块 如果要定义一个在外部可使用的组件 , 需要再定义组件…...
python os.path.join 详解
os.path.join 是 Python 中 os 模块提供的一个函数,用于智能地连接一个或多个路径组件。它可以根据操作系统的不同,自动选择合适的路径分隔符(如 Windows 上的反斜杠 \ 或 Unix/Linux 上的正斜杠 /),从而生成正确的路径…...
JavaScript高效处理CSV文件的操作指南
前言 CSV(Comma-Separated Values)文件是一种广泛应用于数据存储和交换的格式,尤其在数据分析、数据迁移和系统集成等场景中有着重要作用。作为高级计算机工程师,本文将通过专业且通俗易懂的方式,介绍如何利用JavaScr…...

Go开发指南- Goroutine
目录: (1)Go开发指南-Hello World (2)Go开发指南-Gin与Web开发 (3)Go开发指南-Goroutine Goroutine 在java中我们要实现并发编程的时候,通常要自己维护一个线程池,并且需要去包装任务、调度任务和维护上下文切换。这个过程需要消耗大量的精…...

Dubbo 3.x源码(24)—Dubbo服务引用源码(7)接口级服务发现订阅refreshInterfaceInvoker
基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo3.1版本的MigrationRuleHandler这个处理器,它用于通过动态更改规则来控制迁移行为。MigrationRuleListener的onrefer方法是Dubbo2.x 接口级服务发现与Dubbo3.x应用级服务发现…...
高级java每日一道面试题-2024年11月04日-Redis篇-Redis如何做内存优化?
如果有遗漏,评论区告诉我进行补充 面试官: Redis如何做内存优化? 我回答: 在Java高级面试中,关于Redis如何做内存优化的问题,可以从以下几个方面进行详细解答: 一、Redis内存优化概述 Redis内存优化主要是指通过一系列策略和技术&#…...

数据结构 -二叉搜索树
一.什么是二叉搜索树 树插入删除方便比线性数组 二.二叉搜索树的查找操作 尾递归可以用循环递归 三.二叉树的插入操作 35要挂在33上面必须记住33的位置 解决方法,要求递归函数返回一个 结点插到33的右子树 四.二叉搜索树的删除 要是删除的是叶子节点之间删除 只有一…...
Ubuntu配置阿里云docker apt源
一、配置阿里云docker apt源 Ubuntu 放弃了apt-key的GPG 密钥的管理方法,用户可以直接添加gpg密钥到/etc/apt/trusted.gpg.d/目录下。 同时添加删除apt source 直接在/etc/apt/sources.list.d/目录下操作即可。 1、删除旧的镜像源 #旧版操作方法 apt-key list # …...

【React】状态管理之Redux
🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 💫个人格言: "如无必要,勿增实体" 文章目录 状态管理之Redux引言1. Redux 的核心概念1.1 单一数据源(Single Sou…...

3195. 有趣的数-13年12月CCF计算机软件能力认证(组合数)
题目 思路 统计方案的时候先去分类,先放01,然后在考虑23对于第k类, 对于01的选择 对于所有的分类:本题我觉得要考虑的几个点就是:状态分类得到数学公式组合数的计算防越界处理 代码 计算组合数的代码模板࿱…...

基于 Python 的 Bilibili 评论分析与可视化
一、项目概述 本项目利用 Python 对 Bilibili (哔哩哔哩)平台上的视频评论数据进行爬取、清洗和分析,并通过可视化展示数据的主要特征。我们通过以下几个步骤实现了这一过程: 数据爬取:使用 Bilibili 提供的 API 获取…...

大语言模型理论基础
文章目录 前言大语言模型必需知识概述大语言模型目标模型上下文神经网络的神经元常见激活函数SigmoidTanhRelusoftmax 通用近似定理多层感知机(MLP)拟合最后 前言 你好,我是醉墨居士,我们接下来对大语言模型一探究竟,…...

【 LLM论文日更|检索增强:大型语言模型是强大的零样本检索器 】
论文:https://aclanthology.org/2024.findings-acl.943.pdf代码:GitHub - taoshen58/LameR机构:悉尼科技大学 & 微软 & 阿姆斯特丹大学 & 马里兰大学领域:retrieval & llm发表:ACL2024 研究背景 研究…...
【基于轻量型架构的WEB开发】课程 作业3 Spring框架
一. 单选题(共12题,48分) 1. (单选题)以下有关Spring框架优点的说法不正确的是( )。 A. Spring就大大降低了组件之间的耦合性。 B. Spring是一种侵入式框架 C. 在Spring中,可以直接通过Spring配置文件管理…...

14.最长公共前缀-力扣(LeetCode)
题目: 解题思路: 解决本题的关键点是确定扫描的方式,大体上有两种方式:横向扫描和纵向扫描。 1、横向扫描:首先比较第一个字符串和第二个字符串,记录二者的公共前缀,然后用当前公共前缀与下一个…...

客户案例|智能进化:通过大模型重塑企业智能客服体验
01 概 述 随着人工智能技术的快速发展,客户对服务体验的期待和需求不断升级。在此背景下,大模型技术的崛起,为智能客服领域带来了创造性的变革。 在上篇文章《在后LLM时代,关于新一代智能体的思考》中有提到,智能客服…...
Flink Job更新和恢复
Checkpoints 的主要目的是为意外失败的作业提供恢复机制。 Savepoints的设计更侧重于可移植性和操作灵活性,尤其是在 job 变更方面。Savepoint 的用例是针对计划中的、手动的运维。例如,可能是更新你的 Flink 版本,更改你的作业图等等。 fli…...
读多写少业务中,MySQL如何优化数据查询方案?
小熊学Java站点:https://www.javaxiaobear.cn 编程资料合集:https://pqgmzk7qbdv.feishu.cn/base/QXq2bY5OQaZiDksJfZMc30w5nNb?from=from_copylink 看一看当面试官提及“在读多写少的网络环境下,MySQL 如何优化数据查询方案”时,你要从哪些角度出发回答问题??? 案例…...

Bugku CTF_Web——点login咋没反应
Bugku CTF_Web——点login咋没反应 进入靶场 随便输个试试 看来确实点login没反应 抓包看看 也没有什么信息 看了下源码 给了点提示 一个admin.css try ?12713传参试试 拿到一个php代码 <?php error_reporting(0); $KEYctf.bugku.com; include_once("flag.php&q…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
C++.OpenGL (20/64)混合(Blending)
混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...

21-Oracle 23 ai-Automatic SQL Plan Management(SPM)
小伙伴们,有没有迁移数据库完毕后或是突然某一天在同一个实例上同样的SQL, 性能不一样了、业务反馈卡顿、业务超时等各种匪夷所思的现状。 于是SPM定位开始,OCM考试中SPM必考。 其他的AWR、ASH、SQLHC、SQLT、SQL profile等换作下一个话题…...