Redis: 特色,业务场景举例,底层原理,持续进阶等问题梳理

news2024/11/17 3:00:08

Redis 的特色

  • Redis 是目前使用非常广泛的中间件,在于它功能强大,持续改进,经久不衰
  • 主要体现在以下几点
    • 1 ) 高性能: Redis 的底层是C语言编写的,它的定位是内存型数据库
    • 而且 Redis 的作者对操作系统也非常的精通
    • 它通讯方式采用了epoll 非阻塞 / IO多路复用的机制,提高了访问性
    • 2 ) 线程安全:Redis的操作都是单线程的, 保证了原子操作
    • 注意,最新版本都到版本8了,这都多线程的,怎么还单线程呢
    • 多线程,其实体现在的是网络协议解析和同步数据上
    • 对于它底层内部的核心操作,还是由单线程来完成的
    • 这样可以避免在高并发场景下数据不安全的问题
    • 3 )功能丰富:比如它的数据结构
    • 它的基本数据结构有:String、List、HashSet、SortedSet
    • 它的高阶数据结构有:GEO、BitMap、HyperLogLog
    • Redis 的数据都是存在内存中的, 但是在某些场景下
    • 可能也希望把这些数据给它存储起来, Redis 也提供了对应的持久化机制
    • 它有: RDB 持久化、AOF持久化、RDB-AOF混合持久化
    • 随着互联网的发展,网民越来越多,如果应用做的非常好
    • 并发肯定是需要解决的一个问题,Redis提供了Master/Slave主从模式
      • 可以通过这个模式来解决并发的问题, 需要考虑:主节点不能故障
      • 由此,我们要解决主节点的一个单点故障的问题
      • 可以使用 Sentinel 哨兵机制,通过哨兵监控主节点
      • 主节点故障之后,自动的完成主从切换
    • 随着我们的项目越来越庞大,数据集越来越多
    • 数据存储的一个压力问题也会成为我们的一个核心问题
      • 关于数据存储问题,可以通过cluster集群
      • 使用分片存储的方式来进行解决
    • Redis 在 4.0 的时候,还引入了模块化机制
    • 可以让我们自定义实现在项目中的一些个性化需求
    • 当然它还有很多的一些功能, 正因为它有这么多的丰富的功能
    • 所以, Redis 是能够支撑很多的互联网应用场景的
    • 比如: 缓存、分布式锁、队列、集合、GEO、BitMap操作等等

Redis 场景举例

  • 我们通过一个美食社交App来举例

1 )业务场景

  • 这里有典型的 Redis 使用场景
  • 会用到丰富的数据类型
  • 还会用到一些新特性,如:多线程IO
  • 最终通过微服务和分布式来部署搭建

2 ) 最终架构

  • 我们将应用服务化注册制注册中心,然后采用网关统一的进行认证访问
  • 我们的重点还是在Redis这里,目标是搭建一个三主三从的 Redis 集群
  • 对于Redis的架构升级,我们并不一定要一步到位,我们可以
    • 先从单节点开始,再到主从再到哨兵
    • 最后才是集群

3 )核心步骤举例

  • 3.1 比如按照Java的模式,通过SpringBoot整合Redis 以及 SpringCloud 搭建微服务,也可以选择自己喜欢的编程语言
  • 3.2 系统搭建好了,但是响应很慢怎么办?
    • 我们采用最合适的数据类型来缓存
    • 因为Redis的底层,针对于它的这些不同的数据类型存储的时候会做一个优化处理
    • 最后通过查看慢日志,优化BigKey,使用连接池等相关的方式进行优化
  • 3.2 缓存异常了,怎么办?
    • 使用限流,分布式锁,LUR淘汰算法来解决这方面的问题
    • 这里还涉及了缓存区分,缓存穿透,缓存击穿等问题的解决方案
  • 3.3 数据丢失不安全,怎么办?
    • 数据丢失,数据不安全,数据一致性等等问题
    • 可以使用RDB-AOF混合持续化的机制
    • 而且在主从模式下,还需要考虑什么时候全量复制
    • 什么时候增量复制或部分复制,出现了这个复制风暴之后,怎么解决优化
    • 在主从模式下那数据一致性的问题,脏读等等问题
  • 3.4 主从复制故障的问题
    • 这时候哨兵来救场
    • 哨兵监控主节点可以自动完成主从切换
    • 哨兵是如何工作的,以及它的底层原理
    • 故障如何自动转移的
  • 3.5 存储不够用,怎么办?
    • 随着项目的发展,最终数据集越来越多
    • 肯定是要考虑怎么来更好的去存储我们的数据
    • 可以使用集群的分片存储来解决这个问题,包括集群内部的原理
    • 集群内部其实也是有哨兵机制的
    • 它跟我们单独搭建哨兵,又有什么不同
  • 3.6 服务器宕机了,怎么办?
    • 集群动态收缩,MOVED/ASK转项
    • 故障演示和恢复方案
  • 3.7 底层原理是什么?
    • 网络底层
    • 事务处理
    • 持久化原理
    • 主从复制原理
    • 哨兵机制
    • 分片存储原理
  • 3.8 涉及的底层算法有哪些?
    • Sorted Set 底层
    • Bitmap、Geo 算法
    • 数据过期淘汰算法
    • Leader 选举流程
    • 槽位定位算法
    • 备份迁移及其算法
  • 3.9 性能提升方案
    • Key与Value的设计规范
    • 避免 BigKey
    • 避免耗时操作
    • Pipeline管道操作
    • 连接池性能优化
    • 子进程的开销与优化
  • 3.10 故障解决方案
    • 数据延迟
    • 数据脏读
    • 数据抖动
    • 数据一致性
    • 热点数据存储
    • RDB文件损坏

Redis 进阶建议

  • 对于小白,先来研究基础语法使用技巧
  • 对于了解日常操作的同学,多看底层原理部分的内容
    • 比如持久化原理,主从原理, 哨兵监控机制, 集群分片存储等原理
  • 对于工作中常用 Redis 的同学, 多看看故障解决方案及性能优化的部分
    • 比如慢日志查询,Fork进程优化,主从数据一致性,数据脏读,复制风暴

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

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

相关文章

MobileNetV2: Inverted Residuals and Linear Bottlenecks

Link:https://arxiv.org/abs/1801.04381 这篇文章是一篇关于MobileNetV2的学术论文,主要介绍了MobileNetV2的架构设计及其在图像分类、目标检测和语义分割任务中的应用。以下是对这些核心内容的简要概述: MobileNetV2架构设计: …

深度学习技术在超材料科学中的应用与实操

人工智能算法赋能材料设计与应用专题培训 前沿背景 人工智能与材料科学的融合趋势:在材料科学领域,人工智能(AI)的引入正在引发一场革命。传统的材料设计和优化依赖于经验和试错方法,这不仅耗时且成本高昂。关于AI赋…

Note_XML学习笔记

XML学习笔记 1. XML 教程 经常见到XML学习一下。由于是学到中间才想起记笔记,之前的就简略回顾一下: 1)XML是数据存储的一种语言载体; 2)只负责存储,不负责显示; 3)和HTML语言的风…

简单的算法题

1、求12345 #include <stdio.h> int main(){int i,s1;for(i1;i<5;i){s s*i;}printf("%d",s); }2、求1357911 #include <stdio.h> int main(){int i,s1;for(i1;i<11;ii2){s s*i;}printf("%d",s); }3、判定2000—2500年中的每一年是否…

CSP-CCF★★★201909-2小明种苹果(续)★★★

一、问题描述 二、解答 关键&#xff1a;判断是否发生苹果掉落&#xff0c;使用flag[]数组来标记&#xff0c;1为掉落&#xff0c;0为没有掉落&#xff0c;这样也是为了后续比较连续三棵树是否掉落 误区&#xff1a;用最后一次正数&#xff08;即最后一次统计苹果个数&#x…

ChatGPT 提取文档内容,高效制作PPT、论文

随着人工智能生成内容&#xff08;AIGC&#xff09;的快速发展&#xff0c;利用先进的技术工具如 ChatGPT 的 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;模式&#xff0c;可以显著提升文档内容提取和内容创作的效率。以下将详细介绍如…

LabVIEW提高开发效率技巧----使用状态机架构

状态机架构&#xff08;State Machine Architecture&#xff09;是LabVIEW编程中的一种常见且高效的设计模式&#xff0c;特别适合用于处理具有多个操作状态的复杂系统。通过这种架构&#xff0c;程序能够根据不同的输入条件或事件&#xff0c;在多个状态之间切换&#xff0c;从…

canvas分享,从入门到入门。

开始之前 canvas是一个可以使用脚本在其中绘制图形的 HTML 元素.它本身并不具备绘图能力&#xff0c;需要配合JavaScript使用 用途 游戏应用特效字体相册&#xff0c;幻灯片股票行情等动态图像思维图以及图形编辑器等在线可视化工具 基本特性 canvas元素会初始化宽度为300像…

Java | Leetcode Java题解之第434题字符串中的单词数

题目&#xff1a; 题解&#xff1a; class Solution {public int countSegments(String s) {int segmentCount 0;for (int i 0; i < s.length(); i) {if ((i 0 || s.charAt(i - 1) ) && s.charAt(i) ! ) {segmentCount;}}return segmentCount;} }

黎巴嫩寻呼机爆炸案背后的技术原理

引言 近日&#xff0c;黎巴嫩发生了一起震惊世界的寻呼机爆炸事件。当地时间9月17日和19日&#xff0c;黎巴嫩多地的寻呼机和对讲机先后发生爆炸&#xff0c;造成了大量人员伤亡。这起事件引发了全球对电子设备安全性的广泛关注。本文将从技术角度分析这次寻呼机爆炸案的背后原…

OTTO奥托机器人开发总结

OTTO机器人是一个开源外壳&#xff0c;硬件和软件的桌面机器人项目&#xff0c;非常适合新手研究和拓展。 我一直希望找一个合适的项目入手研究机器人&#xff0c;这种项目最好是软硬件都开源的&#xff0c;可以随着自己的想法无限的扩展和私人订制&#xff0c;做为初学者&…

【计网】从零开始掌握序列化 --- 基础知识储备与程序重构

从零开始掌握序列化与反序列化 1 初识序列化与反序列化2 再谈Tcp协议3 程序重构3.1 Socket类3.2 回调函数设计3.3 最终的Tcp服务器类 1 初识序列化与反序列化 在刚学习计算机网络时&#xff0c;我们谈到过网络协议栈&#xff0c;其中最上层的就是应用层&#xff0c;那么这个应…

探索Llama 3.1:开源模型的本地部署与创新应用实践

文章目录 1 Llama 3.1模型的突破性进展2 Llama 3.1模型在业务场景中的实践案例3 使用教程4 Llama 3.1在客户服务中的运用 1 Llama 3.1模型的突破性进展 在数字化转型的浪潮中&#xff0c;大型语言模型&#xff08;LLM&#xff09;以其卓越的处理能力和广泛的应用潜力&#xff…

深度学习500问——Chapter14:超参数调整(3)

文章目录 14.5 如何改善GAN的性能 14.6 AutoML 14.6.1 什么是AutoML 14.6.2 自动化超参数搜索方法有哪些 14.6.3 什么是神经网络架构搜索&#xff08;NAS&#xff09; 14.6.4 NASNet的设计策略 14.6.5 网络设计中&#xff0c;为什么卷积核设计尺寸都是奇数 14.6.6 网络设计中&a…

Spring MVC 参数校验 总结

1. 简介 Sping MVC提供了参数校验的方便注解。 2.代码 在pom.xml中添加依赖&#xff1a; <dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>8.0.0.Final</version&g…

Java | Leetcode Java题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution {public int eraseOverlapIntervals(int[][] intervals) {if (intervals.length 0) {return 0;}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return i…

海外仓系统如何成为数据管理效率的加速器?

在数字化信息时代&#xff0c;海外仓系统的数据管理效率对企业运营的重要性不言而喻。随着电子商务和跨境贸易的快速发展&#xff0c;高效的数据管理不仅影响着货物的流通速度、客户满意度&#xff0c;还关系到企业的盈利能力。为了在海外市场中立足&#xff0c;提升海外仓的数…

《机器学习》周志华-CH8(集成学习)

8.1个体与集成 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务&#xff0c;有时也被称为多分类器系统&#xff0c;基于委员会的学习。 同质”集成“&#xff1a;只包含同种类型的个体学习器&#xff0c;同质集成中的个体学习器亦称“基学习器”&#xff0…

【html】基础(二)

本专栏内容为&#xff1a;前端专栏 记录学习前端&#xff0c;分为若干个子专栏&#xff0c;html js css vue等 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;js专栏 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &am…

WGCLOUD 性能调优笔记

如果主控端server主机内存资源充裕的话&#xff0c;适当增加内存使用&#xff0c;提升server运算能力 修改server/start.sh中的 -Xms256m -Xmx512m &#xff0c;改为 -Xms1024m -Xmx1024m &#xff0c;重启server生效 也可以设置更高些&#xff0c;比如改为 -Xms2048m -Xmx20…