缓存相关知识总结

一、缓存的作用和分类

        缓存可以减少数据库的访问压力提升整个网站的数据访问速度改善数据库的写入性能。缓存可以分为两种:

        缓存在应用服务器上的本地缓存:访问速度快,但受应用服务器内存限制

        缓存在专门的分布式缓存服务器上的远程缓存:访问速度慢,但内存不受限制

二、常见的缓存技术

        MemCache:是一个高性能的分布式内存对象缓存系统,用于动态网络应用以减轻数据库负载。Memcache在内存内维护一个统一的巨大的hash表,数据存在hash表中。

        Redis:是一个开源的使用ANSI C语言编写、支持网络、可给予内存亦可持久化的日志型、Key-Value数据库,支持多种数据类型(key-value,list,set,string,对象等),并提供多种语言的API。

        Squid:Squid是一个高性能的代理缓存服务器,支持FTP,gopher,HTTPS和HTTP协议

        Redis和Memcache对比:

MemcacheRedis
数据类型简单的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. 当有节点插入式,按照算法的映射方法,受影响的仅仅为环上新节点开始逆时针方向

        至下一个节点之间区间的数据对象

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

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

相关文章

区块链媒体推广的8个成功案例解析-华媒舍

区块链领域作为一个新兴行业,媒体推广对于项目的成功发展起着至关重要的作用。本文将从八个成功案例中来分析区块链媒体推广的重要性和成功策略。 1. 媒体报道对于区块链项目的重要影响 媒体报道是提升区块链项目知名度和用户认可度的重要手段。对于区块链项目来说…

C/C++基础----常量和基本数据类型

HelloWorld #include <iostream>using namespace std;int main() {// 打印cout << "Hello,World!" << endl;return 0; }c/c文件和关系 c和c是包含关系&#xff0c;c相当于是c的plus版本c的编译器也可以编译c语言c文件.cpp结尾.h为头文件.c为c语言…

Coursera吴恩达《深度学习》课程总结(全)

这里有Coursera吴恩达《深度学习》课程的完整学习笔记&#xff0c;一共5门课&#xff1a;《神经网络和深度学习》、《改善深层神经网络》、《结构化机器学习项目》、《卷积神经网络》和《序列模型》&#xff0c; 第一门课&#xff1a;神经网络和深度学习基础&#xff0c;介绍一…

InnoDB的使用限制有哪些

InnoDB的使用限制有哪些 以下是一些使用InnoDB在使用中的限制&#xff0c;包含InnoDb表&#xff0c;索引&#xff0c;表空间&#xff0c;和InnoDB存储引擎其他方面的各种限制。 一个表最多包含1017列字段&#xff0c;虚拟生成的列也包含在这个限制中。 每个表的元数据需要在…

2024连锁收银系统哪个好 有什么特点

在服装连锁店的经营中&#xff0c;选择一款优秀的收银系统至关重要。收银系统不仅仅是简单的结账工具&#xff0c;更是管理销售、库存和客户信息的关键平台。以下将介绍几款优秀的服装连锁店收银系统&#xff0c;以便您更好地了解各款系统的特点和优势。 1. 商淘云连锁店收银系…

150个 HTML5 网站模版 量大慢选

HTML5 网站模版 No.1 HTML5 网站模版 No.1

Python实现外观模式、桥接模式、组合模式和享元模式

今天介绍四种结构型设计模式&#xff1a;外观模式、桥接模式、组合模式和享元模式 外观模式 外观模式&#xff08;Facade Pattern&#xff09;&#xff0c;它为子系统提供一个统一的接口&#xff0c;使得子系统更加容易使用。 在Python中&#xff0c;我们可以通过定义一个外…

CSS之固定定位、相对定位、绝对定位

一、相对定位 相对元素自身所在的原来的位置进行定位&#xff0c;可以设置 left&#xff0c;right&#xff0c;top&#xff0c;bottom四个属性。 效果&#xff1a;在进行相对定位以后&#xff0c;元素原来所在的位置被保留了&#xff0c;既保留占位&#xff0c;其他元素的位置…

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…

Linux系统——Elasticsearch企业级日志分析系统

目录 前言 一、ELK概述 1.ELK简介 2.ELK特点 3.为什么要使用ELK 4.完整日志系统基本特征 5.ELK工作原理 6.Elasticsearch介绍 6.1Elasticsearch概述 6.2Elasticsearch核心概念 7.Logstash介绍 7.1Logstash简介 7.2Logstash主要组件 8.Kibana介绍 8.1Kibana简介 …

(我的创作纪念日)[MySQL]数据库原理7——喵喵期末不挂科

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

代理模式(结构型模式)

目录 1、概述 2、结构 2.1、角色分类 2.2、类图 3、静态代理 3.1、案例类图 3.2、案例代码 4、JDK 动态代理 4.1、案例代码 4.2、底层原理 4.3、执行流程说明 5、CGLib 动态代理 5.1、案例代码 6、三种代理的对比 6.1、JDK代理和CGLib代理 6.2、动态代理和静态…

大模型(Large Models):探索人工智能领域的新边界

&#x1f31f;文章目录 &#x1f31f;大模型的定义与特点&#x1f31f;模型架构&#x1f31f;大模型的训练策略&#x1f31f;大模型的优化方法&#x1f31f;大模型的应用案例 随着人工智能技术的飞速发展&#xff0c;大模型&#xff08;Large Models&#xff09;成为了引领深度…

使用ROCm的HIP API向量加法程序

一、向量加法程序 Radeon Open Compute (ROCm) 是一个开源平台&#xff0c;用于加速高性能计算 (HPC) 和机器学习应用程序。它支持包括GPUs在内的多种硬件&#xff0c;并提供HIP (Heterogeneous-compute Interface for Portability) 作为CUDA代码的便捷转换工具。为了提供一个…

广佛站点导航助手小程序产品使用说明书

一、产品简介 广佛站点导航助手小程序是一款专为广佛地区用户设计的地铁导航工具。通过获取用户的实时位置信息&#xff0c;小程序能够迅速定位并展示离用户最近的三个地铁站点。用户可以通过本小程序轻松查找地铁站点&#xff0c;规划出行路线&#xff0c;提高出行效率。 二、…

SDK-0.7.8-Release-实体管理 - ApiHug-Release

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 更多精彩…

Linux:环境基础开发工具使用

文章目录 前言1.Linux下的软件安装1.1 什么是软件包1.2 如何安装软件1.3 如何卸载软件 2.vim2.1 vim的基本概念2.2 vim的基本操作2.3 vim正常模式命令集2.4 vim末行模式命令集2.5 vim的操作总结 3.Linux下的编译器&#xff1a;gcc3.1 gcc的使用3.2 gcc是如何工作的3.2.1 预处理…

Micromamba 安装与使用

文章目录 一、安装 MicromambaWindows安装使用 Micromamba 一、安装 Micromamba Micromamba 是一个静态链接的 C 可执行文件&#xff0c;在 Windows 上就是一个 micromamba.exe 文件&#xff0c;下载下来就直接可以用&#xff0c;甚至都不需要专门安装。唯一需要做的就是设置 …

Python编程的十大好用工具!

Python一直以来都是程序员们的首选编程语言之一&#xff0c;其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中&#xff0c;我们将介绍Python编程的终极十大工具&#xff0c;这些工具可以帮助您在各种领域取得成功&#xff0c;无论您是初学者还是经验丰富的开发…

python数据分析学什么东西

前言 大家好&#xff0c;小编为大家解答python数据分析重点要学什么的问题。很多人还不知道python数据分析需要什么基础&#xff0c;现在让我们一起来看看吧&#xff01; 数据分析人人都有必要掌握一点&#xff0c;哪怕只是思维也行。下面探讨Python数据分析需要学习的知识范…