【Redis】聊一下Redis基础架构

news/2024/12/2 18:45:46/

我们知道学习一个技术,最好的方式就是从全局观出发,然后针对不同的点进行拆分,一个个破解。既可以将学到的和已有的知识联系起来,又可以有一定的深度和目的性。

Redis基础架构

在这里插入图片描述
对于一个中间件来说,一个是使用层面(应用层面),另一个就是核心原理(系统纬度)。
对于Redis来说应用纬度包括

  • 缓存应用:相应的使用场景,引出的问题等
  • 集群应用:为实现高可用,高性能,必然使用集群模式
  • 数据结构应用:不同的数据结构可以解决不同的问题。比如hash可以快速查找

对于系统纬度来说:

  • 高性能主线:
    • 线程模型:(单线程、多线程、Reactor模式等)
    • 数据结构
    • 持久化
    • 网络框架
  • 高可靠主线:
    • 主从复制
    • 哨兵机制
  • 高可拓展主线:
    • 数据分片
    • 负载均衡

存哪些数据

对于键值数据库来说,基本结构就是Key-Values。但是为了支持更多业务场景,Redis提供了比较多的数据结构类型,具体就是String、List、Hash、Set、ZSet、GEO、HyperLogLog、BitMap、bitfield、Stream。
为什么要支持多样的数据结构呢
不同的数据结构,在空间和性能效率上是不同的,可以满足的业务场景也是不同,所以说需要根据具体的业务来结合使用相应的数据结构,充分发挥出对应数据结构的优点。
在这里插入图片描述

数据操作

上面列举了Redis的数据模型,但是对于数据的操作,无外乎就是以下三类。

  • 添加/更新类
  • 删除数据
  • 获取数据

虽然Redis的客户端提供了基础的对数据的操作,但是比如对于一些判断数据是否存在exits、ttl等也需要提供。而数据存储的位置一般内存优先于磁盘,针对于可以容忍数据丢失的场景的业务来说。但是存储在磁盘中,可以持久化存储,但是访问速度就比较慢了,所以需要平衡二者。
在这里插入图片描述
一个键值数据库的基本架构就是这样

  • 访问框架
  • 操作模块
  • 索引模块
  • 存储模块

访问模式

访问模式说白了就是如何连接到Redis服务端,一般来说一是可以通过函数连接库,二是通过网络框架,而Redis采用了后者。但是网络框架上需要解决的问题,比如数据的连接请求,数据数据,数据存储。如果是单线程,那么可能出现某一个流程的阻塞,导致整体性能下降。而如果是多线程,那么可能出现多个线程之间对于共享资源的竞争,而这个数据安全问题就需要考虑。而这就是IO模型设计。

定位键值对位置

当连接请求后,通过网络框架将请求到服务端后,这个时候如何进行查找相对应的key的位置,一般来说大多采用B+树、Hash等。而对于内存操作的Redis来说 使用Hash可以很好的和内存随机操作相匹配。

在这里插入图片描述


http://www.ppmy.cn/news/59184.html

相关文章

unity中的Quaternion.AngleAxis

介绍 unity中的Quaternion.AngleAxis 方法 Quaternion.AngleAxis() 函数是 Unity 引擎中的一个数学函数,用于创建一个绕着某个轴旋转一定角度的旋转四元数。在游戏开发中,经常会用到该函数来旋转物体或计算旋转后的方向向量。 该函数的函数原型为&…

1987-2021年全国各省进出口总额数据含进口总额和出口总额

1987-2021年全国各省进出口总额数据含进口和出口 1、时间:1987-2021年 2、范围:包括全国30个省不含西藏 3、指标:进出口总额、进口总额、出口总额 4、单位:万美元 5、来源:各省NJ、JIN rong统计NJ 6、缺失情况说…

Vue中computed和watch的区别

今天简单说一下computed和watch的区别。 先看代码&#xff0c;两者怎么实现的。 <div id"app"><input type"text" v-model"firstName"><br><input type"text" v-model"lastName"><br><h2…

拥抱智能时代:初探RFID系统

在数字化时代&#xff0c;人们越来越追求高效率和高质量的体验&#xff0c;以获得更快乐、更好的生活。RFID系统作为一项智能化管理技术&#xff0c;正越来越广泛地应用于各个领域&#xff0c;以提高效率和质量。本文将介绍RFID系统的基本概念、工作原理和实际应用案例&#xf…

代码随想录二刷复习 day1 704二分查找 27 移除元素 977 有序数组的平方

代码如下 func search(nums []int, target int) int { left : 0 right : len(nums)-1 for left < right { middle : (leftright)/2 if target < nums[middle] { //因为上面的判断条件是left < right&#xff0c;所以左右两个边界的值最后都能取到&#xff0c;而此…

基于探路者算法的极限学习机(ELM)回归预测-附代码

基于探路者算法的极限学习机(ELM)回归预测 文章目录 基于探路者算法的极限学习机(ELM)回归预测1.极限学习机原理概述2.ELM学习算法3.回归问题数据处理4.基于探路者算法优化的ELM5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;本文利用探路者算法对极限学习机进行优化&…

Java中的内存泄露、内存溢出与栈溢出

内存泄露、内存溢出与栈溢出 1、概述2、内存泄漏、内存溢出和栈溢出2.1、内存泄漏2.2、内存溢出2.3、栈溢出 2、总结 1、概述 大家好&#xff0c;我是欧阳方超。本次就Java中几个相似而又不同的概念做一下介绍。内存泄漏、内存溢出和栈溢出都是与内存相关的问题&#xff0c;但…

RabbitMQ 发布订阅模式,routing路由模式,topic模式

发布订阅模式 一个消息可以由多个消费者消费同一个消息 消费者1和2同时消费了该消息 举例 public static void main(String[] args) throws IOException, TimeoutException {//1 创建连接工厂ConnectionFactory connectionFactorynew ConnectionFactory();//2 设置rabbitmq …