缓存相关知识总结
一、缓存的作用和分类
缓存可以减少数据库的访问压力,提升整个网站的数据访问速度,改善数据库的写入性能。缓存可以分为两种:
缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制
缓存在专门的分布式缓存服务器上的远程缓存:访问速度慢,但内存不受限制
二、常见的缓存技术
MemCache:是一个高性能的分布式内存对象缓存系统,用于动态网络应用以减轻数据库负载。Memcache在内存内维护一个统一的巨大的hash表,数据存在hash表中。
Redis:是一个开源的使用ANSI C语言编写、支持网络、可给予内存亦可持久化的日志型、Key-Value数据库,支持多种数据类型(key-value,list,set,string,对象等),并提供多种语言的API。
Squid:Squid是一个高性能的代理缓存服务器,支持FTP,gopher,HTTPS和HTTP协议
Redis和Memcache对比:
Memcache | Redis | |
数据类型 | 简单的key/value结构 | 丰富的数据结构 |
持久性 | 不支持 | 支持 |
分布式存储 | 客户端哈希分片/一致性哈希 | 主从、哨兵、集群 |
多线程 | 支持 | 5.0以后的版本支持 |
内存管理 | 似有内存池/内存池 | 无 |
事务支持 | 不支持 | 有限支持 |
数据容灾 | 不支持,掉电消失 | 支持 |
三、缓存与数据库一致性方案
数据的读取:
1. 根据key从缓存中读取数据;
2. 若缓存中存在,则返回数据;
3. 若缓存中不存在,则从数据库中读取,并将数据写入缓存
数据的插入/更新/删除:
1. 先操作数据库中的数据内容
2. 根据操作更新相应缓存中的内容
四、缓存常见问题
一、缓存雪崩:
原因:大部分缓存同时失效,导致大量数据请求访问数据库,造成数据库崩溃
解决方案:1. 使用队列或锁,保证不会有大量线程对数据库进行高并发的读写
2. 为缓存设置不同的过期时间,固定数值+随即数值
3. 多级缓存,设置失效事件不同的缓存
二、缓存穿刺:
原因:查询数据库与缓存中都不存在的数据,造成性能浪费
解决方案:1. 当数据库中的结果为空时,在缓存中加入默认值。
2. 设置布隆过滤器:将所有可能存在的值放入一个bitmap中。
布隆过滤器介绍:
布隆过滤器用于快速识别一个元元素是否在集合中,通过一个长二进制向量和一系
列随机映射函数记录和识别某个数据是否在一个集合中。
优点 | 缺点 |
1. 占用内存小 2. 查询效率高 3. 不存储数据本身,数据安全性好 | 1. 有一定的误判性 2. 一般情况下不能从中删除元素 3. 不能直接获取需要的数据 |
三、缓存预热:
系统启动后,将相关的缓存数据世界加载到缓存系统中。
实现方案:
1. 编写相关的接口或页面
2. 数据量不大时,在项目启动后加载数据
3. 定时任务刷新缓存
四、缓存更新:
1. 定时清理过期缓存
2. 根据用户操作,将过期的请求更新到缓存中
五、缓存降级:
降级的目的是保证核心服务的可用,通过记日志等方式,将优先级不高的操作记录
五、Redis的相关介绍
1. Redis支持的数据类型
String,Hash(字典),List,Set, Sorted Set(有序集合)
2. Redis数据的淘汰策略
类型 | 策略 | 实现方式 |
不淘汰 | noeviction | 数据不过期,当内存不足时,写入操作报错 |
设置了过期时间的键空间 | volatile-random | 随即删除某个key |
volatile-lru | 优先移除最近没使用过的key | |
volatile-ttl | 优先移除剩余生命周期最短的key | |
全键空间 | allkeys-random | 随即删除某个key |
volatile-lru | 优先移除最近没使用过的key |
3. Redis持久化实现方式
RDB方式:传统数据库中快照的思想,指定时间间隔将数据进行全量备份
AOF方式:传统数据库中日志的思想,把每条改变数据集的指令追加到AOF文件中
纬度 | RDB持久化方案 | AOF持久化方案 |
备份量 | 重量级的全量备份,整个数据库数据 | 轻量级的增量备份,一次只保存一个操作指令 |
间隔时间 | 较长 | 较短,默认1秒 |
还原速度 | 快 | 慢 |
备份事阻塞情况 | save会阻塞,bgsave不会 | 不会 |
备份文件大小 | 小,只有备份时刻的数据 | 大,包括每次操作的指令 |
安全性 | 低,备份间隔长,容易丢失数据 | 高,备份间隔短,数据精确 |
4. Redis分布式存储方式
主从模式:一主多从,主节点写数据,从节点度数据,主节点故障时手动切换
哨兵模式:有哨兵的一主多从,哨兵对节点进行健康监控,主节点故障时自动通过选举
的方式选择新的主节点
集群模式:分节点对等集群,分slots,不同slots的信息存储到不同的节点
5. Redis数据切片方案
分片方案 | 分片方式 | 举例 |
范围分片 | 按数据分为进行分配,如key值的范围 | 如0-999一组,1000-1999一组 |
哈希分片 | 通过对值进行hash运算后分片 | hash后的结果对节点数量取余,对取余结果进行分组 |
一致性哈希 | 哈希分片的升级 | 有利于节点扩展和删除,解决数据在节点上分布不均与 |
一致性哈希的实现方式:
1. 将存储节点抽象成一个环形,每个节点都有对应的值
2. 对数据进行哈希运算,按顺时针方向将其映射到离其最近的节点上去
3. 当有节点出现故障离线时,按照算法的映射方法,受影响的仅仅为环上故障节点开始
逆时针方向至下一个节点之间区间的数据对象
4. 当有节点插入式,按照算法的映射方法,受影响的仅仅为环上新节点开始逆时针方向
至下一个节点之间区间的数据对象
相关文章:

缓存相关知识总结
一、缓存的作用和分类 缓存可以减少数据库的访问压力,提升整个网站的数据访问速度,改善数据库的写入性能。缓存可以分为两种: 缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制 缓存在专门的分布式缓存…...

Mapmost Alpha:开启三维城市场景创作新纪元
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
【大模型完全入门手册】——引言
博主作为一名大模型开发算法工程师,很希望能够将所学到的以及实践中感悟到的内容梳理成为书籍。作为先导,以专栏的形式先整理内容,后续进行不断更新完善。希望能够构建起从理论到实践的全流程体系。 助力更多的人了解大模型,接触大模型,一起感受AI的魅力! 在当今人工智能…...
在 Vue 3 中使用 Axios 发送 POST 请求
在 Vue 3 中使用 Axios 发送 POST 请求需要首先安装 Axios,然后在 Vue 组件或 Vuex 中使用它。以下是一个简单的安装和使用案例: 安装 Axios 你可以使用 npm 或 yarn 来安装 Axios: npm install axios # 或者 yarn add axios 使用 Axios…...
【LeetCode刷题记录】189. 轮转数组
189 轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: …...

1.open3d处理点云数据的常见方法
1. 点云的读取、可视化、保存 在这里是读取的点云的pcd文件,代码如下: import open3d as o3dif __name__ __main__:#1.点云读取point o3d.io.read_point_cloud("E:\daima\huawei\img\change2.pcd")print(">",point)#2.点云可视…...
https和http有什么区别,为什么要用https
HTTPS(Hypertext Transfer Protocol Secure)和HTTP(Hypertext Transfer Protocol)之间的主要区别在于安全性。 安全性: HTTP是一种明文传输协议,数据在客户端和服务器之间以明文形式传输,容易…...
微前端框架主流方案剖析
微前端架构是为了在解决单体应用在一个相对长的时间跨度下,由于参与的人员、团队的增多、变迁,从一个普通应用演变成一个巨石应用(Frontend Monolith)后,随之而来的应用不可维护的问题。这类问题在企业级 Web 应用中尤其常见。 微前端框架内的各个应用都支持独立开发部署、不…...
安卓逆向之-Xposed RPC
引言: 逆向为最终的协议,或者爬虫的作用。 有几种方式,比如直接能力强,搞成协议。 现在好多加密解密都写入到so ,所以可以使用unidbg 一个可以模拟器so 执行的环境的开源项目。RPC 调用,又分为Frida, 还有今天讲的Xposed RPC。 原理: Xposed 可以hook ,然后可以直接…...

【排序 贪心】3107. 使数组中位数等于 K 的最少操作数
算法可以发掘本质,如: 一,若干师傅和徒弟互有好感,有好感的师徒可以结对学习。师傅和徒弟都只能参加一个对子。如何让对子最多。 二,有无限多1X2和2X1的骨牌,某个棋盘若干格子坏了,如何在没有坏…...

预览pdf文件和Excel文件
开发的时候要一个可上传下载预览的静态页面以下是数据html <el-table v-loading"loading" :data"fileList" selection-change"handleSelectionChange"><el-table-column type"selection" width"55" align"ce…...

RT-thread线程间同步:事件集/消息队列/邮箱功能
一,事件集 1,事件集作用 事件集主要用于线程间的同步,与信号量不同,它的特点是可以实现一对多,多对多的同步。即一个线程与多个事件的关系可设置为:其中任意一个事件唤醒线程,或几个事件都到达后才唤醒线程进行后续的处理;同样事件也可以是多个线程同步多个事件。 2,…...

【机器学习】一文掌握机器学习十大分类算法(上)。
十大分类算法 1、引言2、分类算法总结2.1 逻辑回归2.1.1 核心原理2.1.2 算法公式2.1.3 代码实例 2.2 决策树2.2.1 核心原理2.2. 代码实例 2.3 随机森林2.3.1 核心原理2.3.2 代码实例 2.4 支持向量机2.4.1 核心原理2.4.2 算法公式2.4.3 代码实例 2.5 朴素贝叶斯2.5.1 核心原理2.…...

策略模式(知识点)——设计模式学习笔记
文章目录 0 概念1 使用场景2 优缺点2.1 优点2.2 缺点 3 实现方式4 和其他模式的区别5 具体例子实现5.1 实现代码 0 概念 定义:定义一个算法族,并分别封装起来。策略让算法的变化独立于它的客户(这样就可在不修改上下文代码或其他策略的情况下…...
Python学习从0开始——专栏汇总
Python学习从0开始——000参考 一、推荐二、基础三、项目一 一、推荐 Hello World in Python - 这个项目列出了用Python实现的各种"Hello World"程序。 Python Tricks - 这个项目包含了Python中的高级技巧和技术。 Think Python - 这是一本教授Python的在线书籍&…...

【iOS ARKit】Web 网页中嵌入 AR Quick Look
在支持 ARKit 的设备上,iOS 12 及以上版本系统中的 Safari浏览器支持 AR Quick Look, 因此可以通过浏览器直接使用3D/AR 的方式展示 Web 页面中的模型文件,目前 Web 版本的AR Quick Look 支持USDZ 格式文件。苹果公司有一个自建的3D模型示例库…...

Java基础-知识点03(面试|学习)
Java基础-知识点03 String类String类的作用及特性String不可以改变的原因及好处String、StringBuilder、StringBuffer的区别String中的replace和replaceAll的区别字符串拼接使用还是使用StringbuilderString中的equal()与Object方法中equals()区别String a new String("a…...
【GIS学习笔记】ArcGIS/QGIS如何修改字段名称、调整字段顺序?
在先前的ArcGIS学习中,了解到字段名称是不能修改的,只能用新建一个字段赋值过去再删除原字段这种方法实现,字段顺序的调整如果通过拖拽也是不能持久的,需要用导出一个新数据这种方法进行保存,可参考以下链接࿱…...
Study Pyhton
PyCharm PyCharm是一个写python代码的软件,用PyCharm写代码比较方便。 PyCharm快捷键ctrl alt s打开软件设置ctrl d复制当前行代码 shift alt 上\下将当前行代码上移或下移crtl shift f10运行当前代码文件shiftf6重命名文件 ctrl a全选ctrl c\v\x复制、粘贴、…...

【MySQL】:深入解析多表查询(下)
🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. 自连接1.1 自连接查询1.2 联合查询 二. 子查询2.1 概述2.2 分类2.3 标量子查…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目
应用场景: 1、常规某个机器被钓鱼后门攻击后,我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后,我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...
Vue 实例的数据对象详解
Vue 实例的数据对象详解 在 Vue 中,数据对象是响应式系统的核心,也是组件状态的载体。理解数据对象的原理和使用方式是成为 Vue 专家的关键一步。我将从多个维度深入剖析 Vue 实例的数据对象。 一、数据对象的定义方式 1. Options API 中的定义 在 Options API 中,使用 …...

二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...