【软考高级架构】关于分布式数据库缓存redis的知识要点汇总

一.分布式数据库的含义

        分布式数据库缓存指的是在高并发的环境下,为了减轻数据库的压力和提高系统响应时间,在数据库系统和应用系统之间增加一个独立缓存系统。

二.常见的缓存技术


(1)MemCache: Memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web应用以减轻数据库负载。Memcache在内存里维护一个统一的巨大的hash表,数据存在该hash表中。
(2)Redis: Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、KeyValue数据库 (支持多种数据结构,如key-value、string、set、list等),并提供多种语言的API。
(3)Squid:Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。

三.Memcache与Redis的对比

四.Redis分布式存储的常见方案

1、主从模式 (Master/Slavel):一机多从,故障时手动切换

2、哨兵模式 (Sentinel):有哨兵的一主多从,主节点故障自动选择新的节点

3、集群模式(Cluster):分界点对等集群,分slots,不同的slots的信息存储到不同的节点

五.Redis集群切片的常见方式

1、客户端分片:即在客户端通过key的hash值对应到不同的服务器。

2、中间件实现分片:在应用软件和Redis中间,例如: Twemproxy、Codis等,由中间件实现服务到后台Redis节点的路由分派.

3、客户端服务端协作分片:Redis Cluster模式,客户端可采用一致性哈希,服务端提供节点的重定向服务slot上。不同的slot对应到不同服务器。

六.Redis的分片方案

1、范围分片:按照数据范围来分片

2、哈希分片:通过Key进行hash运算分片,可以将数据比较均匀地分配到每一个结点,类似取余操作。

3、一致性哈希分片:哈希分片的改进,把存储节点和需要存储的数据放在一个hash环上,数据根据hash值在hash环上按照顺时针方向找到对应的结点

七.Redis和数据库之间数据同步方案(一致性)

1、读取数据时,先读取redis中的数据,如果redis没有,则从原数据库中读取,并同步更新redis中的数据。写回时,写入到原数据库中,并同步更新到redis中

2、异步队列方式实现同步,可采用消息中间件处理

3、通过数据库插件完成数据同步

4、利用触发器进行缓存同步

八.Redis的数据淘汰算法

1、不淘汰:noeviction,当空间不足时就报错,是系统的默认淘汰策略。

2、设置过期时间的键空间:

         2.1、volatile-random:随机移除某个key

         2.2、volatile-lru:移除最近没有使用的

         2.3、volatile-ttl:ttl值小的key优先淘汰

3、全键空间:

         3.1、allkey-random:随机移除某个key

         3.2、allkey-lru:移除最近没有使用的

九.Redis的持久化

1、AOF:日志思路,把每条操作命令追加到AOF文件尾部,一旦有问题可以重新执行AOF文件中的命令

2、RDB:快照,指定时间间隔将数据进行快照存储

十.Redis常见问题

1、缓存雪崩

定义:大部分缓存失效导致请求往数据库发送,导致数据库奔溃

解决方案:

  1. 使用锁或队列:使用排他锁或者队列方式保证不会有大量线程对数据库一次性进行读写,避免缓存雪崩时大量并发请求落到底层存储系统上
  2. 为key设置不同的缓存失效时间:固定失效时间+随机失效时间
  3. 二级缓存:设置两个缓存(有时间限制+无时间限制),避免大规模访问数据库导致缓存雪崩

2、缓存穿透

定义:查询无数据返回导致直接插数据库,查询一个数据时,优先在缓存中寻找,如果缓存中没有就去数据库中寻找,但如果数据库中也没有,就会返回一个空值,但是如果后面还要查找这个数据,就会频繁地重复以上步骤,这就违背了当初设置缓存的作用

解决方案:

  1. 第一次查询结果为空时,设置一个默认值存放到缓存,第二次再查到缓存里就有值了。在设置一个5分钟的过期时间,以便正常更新缓存
  2. 设置布隆过滤器,将所有可能存在的数据hash到一个足够大的bitmap中,一个不存在的数据会被bitmap拦截掉,从而避免了对底层数据库的查询压力

3、缓存预热

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

你对MySQL的having关键字了解多少?

在MySQL中,HAVING子句用于在数据分组并计算聚合函数之后,对结果进行进一步的过滤。它通常与GROUP BY子句一起使用,以根据指定的条件过滤分组。HAVING子句的作用类似于WHERE子句,但WHERE子句是在数据被聚合之前进行过滤&#xff0c…

闯关leetcode——205. Isomorphic Strings

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/isomorphic-strings/ 内容 Given two strings s and t, determine if they are isomorphic. Two strings s and t are isomorphic if the characters in s can be replaced to get t. All occur…

2021亚洲机器学习会议:面向单阶段跨域检测的域自适应YOLO(ACML2021)

原文标题:Domain Adaptive YOLO for One-Stage Cross-Domain Detection 中文标题:面向单阶段跨域检测的域自适应YOLO 1、Abstract 域转移是目标检测器在实际应用中推广的主要挑战。两级检测器的域自适应新兴技术有助于解决这个问题。然而,两级…

现场总是发生急停,很可能是PLC和设置间网络中断

如果你的现场总是发生急停,很可能是PLC和设置间网络中断,本文用一个真实案例告诉你问题背后的原因和解决方法! 这是一台生产汽车配件的机器,使用1500F的控制器连接机器人控制器,现场装置总会莫名其妙的发生急停故障。…

部署前后端分离若依项目--CentOS7Docker版

一、准备 centos7虚拟机或服务器一台 若依前后端分离项目:可在下面拉取 RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本 二、环…

JavaEE进阶----19.<Mybatis进阶(动态SQL)>

详解动态SQL <if>标签、<trim>标签、<where>标签、<set>标签、<foreach>标签、<include>标签 & <SQL>标签 MySQL&#xff08;进阶&#xff09; 一、动态SQL 也就是SQL语句中指定的属性&#xff0c;若我们不想输入进行查询&…

查缺补漏----分组交换所需时间计算

总结以及图片来源&#xff1a;b站湖科大真题计网讲解 对于报文交换&#xff0c;路由器完整接收整个报文后&#xff0c;才能对报文进行转发。对于分组交换&#xff0c;则是将报文划为更小的分组进行传送&#xff0c;路由器边接收分组边转发分组。 报文交换&#xff1a; 分组交换…

文件上传漏洞及安全

文件上传 文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题&#xff0c;对于如何确保这类安全问题&#xff0c;一般会从原生态功能中的文件内容&#xff0c;文件后缀&#xff0c;文件类型等方面判断&#xff0c;但是漏洞可能不仅在本身的代码…

Java的查找算法和排序算法

Java的查找算法和排序算法 一、查找算法1. 基本查找a. 示例 2. 二分查找a. 示例 3. 插值查找4. 斐波那契查找5. 分块查找a. 示例 二、排序算法1. 冒泡排序a. 示例 2. 选择排序a. 示例 3、插入排序a. 示例 4. 快速排序&#xff08;效率最高&#xff09;a. 示例 一、查找算法 1.…

期权懂|2024年期权最新止损策略有哪些?

本期让我懂 你就懂的期权懂带大家来了解&#xff0c;2024年期权最新止损策略有哪些&#xff1f;有兴趣的朋友可以看一下。期权小懂每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 2024年期权最新止损策略有哪些&#xff1f; 一、浮亏比例…

Pandas模块之垂直或水平交错条形图

目录 df.plot() 函数Pandas模块之垂直条形图Pandas模块之水平交错条形图 df.plot() 函数 df.plot() 是 Pandas 中的一个函数&#xff0c;用于绘制数据框中的数据。它是基于 Matplotlib 库构建的&#xff0c;可以轻松地创建各种类型的图表&#xff0c;包括折线图、柱状图、散点…

PCM5102A具有PLL和32位、384kHz PCM/I2S接口的2.1VRMS、112dB音频立体声DAC

PCM5102A外观和丝印 1 特性 1•超低带外噪声 •具有BCK基准的高性能集成音频锁相环(PLL)&#xff0c;可在内部生成SCK •直接线路电平2.1VRMS输出 •无需隔直电容 •线路电平输出支持低至1kΩ的负载 •智能静音系统&#xff1b;软斜升或斜降搭配模拟静音&#xff0c;实现120dB…

深度学习实战项目】基于OPenCV的人脸识别考勤系统软件开发【python源码+UI界面+功能源码详解】

背景及意义 人脸识别&#xff08;Face Recognition&#xff09;是基于人的脸部特征信息进行身份识别的一种生物识别技术&#xff0c;可以用来确认用户身份。本文详细介绍了人脸识别基本的实现原理&#xff0c;并且基于python与pyqt开发了人脸识别与信息管理软件&#xff0c;主要…

Go第三方框架--gorm框架(一)

前言 orm模型简介 orm模型全称是Object-Relational Mapping&#xff0c;即对象关系映射。其实就是在原生sql基础之上进行更高程度的封装。方便程序员采用面向对象的方式来操作数据库&#xff0c;将表映射成对象。 这种映射带来几个好处&#xff1a; 代码简洁&#xff1a;不用…

AVL树介绍与构建

目录 AVL树的概念 二叉树的构建 平衡因子的更新 旋转 左单旋 旋转过程 左单旋代码 右单旋 旋转过程 右单旋代码 左右双旋 发生情况 抽象图 具体图 平衡因子更新 左右双旋代码 右左双旋 右左双旋旋代码 验证测试AVL树 测试成员函数 测试代码 AVL树实现代码…

使用virtualenv导入ssl模块找不到指定的模块

最近在学习tensorflow&#xff0c;由于教程里面使用的是virtualenv&#xff0c;所以就按照教程开始安装了虚拟环境。但是在使用的时候&#xff0c;卡在了import ssl这一步&#xff0c;提示如下错误 >>> import ssl Traceback (most recent call last):File "<…

兼容Lodash的真正替代者

大家好&#xff0c;我是农村程序员&#xff0c;独立开发者&#xff0c;前端之虎陈随易。 这是我的个人网站&#xff1a;https://chensuiyi.me&#xff0c;欢迎一起交朋友~ 今天给大家分享一个前端工具库 Lodash 的替代品 es-toolkit。 仓库地址&#xff1a;https://github.com…

Android 自定义 Dialog 实现列表 单选,多选,搜索

前言 在Android开发中&#xff0c;通过对话框让用户选择&#xff0c;筛选信息是很方便也很常见的操作。本文详细介绍了如何使用自定义 Dialog、RecyclerView 以及自定义搜索框 来实现选中状态和用户交互&#xff0c;文中大本分代码都有明确注释&#xff0c;主打一个简单明了&a…

A survey of loss functions for semantic segmentation——论文笔记

摘要 图像分割一直是一个活跃的研究领域&#xff0c;因为它有着广泛的应用范围&#xff0c;从自动疾病检测到自动驾驶汽车。过去五年中&#xff0c;各种论文提出了用于不同场景&#xff08;如数据偏斜、稀疏分割等&#xff09;的目标损失函数。在本文中&#xff0c;我们总结了…

NVR监测软件/设备EasyNVR多个NVR同时管理构建智慧城市的大数据解决方案

在当今的数字化时代&#xff0c;安防视频监控已成为各行各业不可或缺的一部分&#xff0c;无论是在智慧工地、智慧工厂、智慧景区还是智慧水利等领域&#xff0c;都需要高效、可靠的监控系统来保障安全。 一、背景需求分析 随着科技的发展&#xff0c;智慧城市建设成为城市发展…