【系统分析师】-缓存

news2024/9/19 10:41:48

目录

1、常见分类

2、集群切片方式

3、Redis

3.1、分布式存储方式

3.2、数据分片方式

3.3、数据类型

3.4、持久化方案

3.5、内存淘汰机制

3.6、Redis常见问题

4、布隆过滤器


1、常见分类

1、MemCache

Memcache是一个高性能的分布式的内存对象缓存系统,用于动态Web 应用以减轻数据库负载。Memcache通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。

2、Redis

Redis 是一个开源的使用 ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。

3、Squid

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS 和 HTTP 协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、1/0驱动的进程来处理所有的客户端请求。

2、集群切片方式

3、Redis

3.1、分布式存储方式

  1. 主从(Master/Slave)模式:-主多从,故障时手动切换。
     
  2. 哨兵((Sentinel)模式:有哨兵的一主多从,主节点故障自动选择新的主节点。
     
  3. 集群(Cluster)模式:分节点对等集群,分slots,不同slots的信息存储到不同节点。

3.2、数据分片方式

列表分片:属性的离散值,如按城市区域

3.3、数据类型

ZSet 常用命令
ZSCAN迭代有序集合中的元素(包括元素成员和元素分值),也可判断元素是否存在
ZSCORE返回有序集中,成员的分数值
ZRANK返回有序集合中指定成员的索引
ZADD向有序集合添加一个或多个成员,或者更新已存在成员的分数
ZCARD获取有序集合的成员数

3.4、持久化方案

rdb 与 aof

3.5、内存淘汰机制

  1. volatile-lru 从设置过期时间的数据集中挑选出最近最少使用的数据淘汰。
  2. volatile-ttl 除了淘汰机制采用LRU,策略基本上与volatile-lru相似,从设置过期时间的数据集中挑选将要过期的数据淘汰,ttl值越大越优先被淘汰。
  3. volatile-random(过期随机) 从已设置过期时间的数据集中任意选择数据淘汰。
  4. allkeys-lru 从数据集中挑选最近最少使用的数据淘汰,该策略要淘汰的key面向的是全体key 集合,而非过期的key 集合。
  5. allkeys-random(全键随机):从数据集中选择任意数据淘汰。
  6. no-enviction:禁止驱逐数据,也就是当内存不足以容纳新入数据时,禁止新的写入,线上任务也不能持续进行,采用no-enviction策略可以保证数据不被丢失,这也是系统默认的一种淘汰策略。

3.6、Redis常见问题

1)缓存雪崩:大部分缓存失效 ->数据库崩溃

解决方案:

  • 使用锁或队列:保证不会有大量的线程对数据库一次性进行读写,从而避免失效时大量的并发请求落到底层存储系统上。
  • 为 key 设置不同的缓存失效时间:在固定的一个缓存时间的基础上+随机一个时间作为缓存失效时间。
  • 二级缓存:设置一个有时间限制的缓存+一个无时间限制的缓存。避免大规模访问数据库。

2)缓存穿透:查询无数据返回->直接查数据库

解决方案:

  • 如果查询结果为空,直接设置一个默认值存放到缓存,这样第二次到缓冲中获取就有值了。设置一个不超过5分钟的过期时间,以便能正常更新缓存。
  • 设置布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个 bitmap拦截掉,从避免了对底层存储系统的查询压力。

3)缓存预热
解决方案:

  • 直接写个缓存刷新页面,上线时手工操作。
  • 数据量不大时,可以在项目启动的时候自动进行加载。
  • 定时刷新缓存。

4)缓存更新
解决方案:

  • 除 Redis 系统自带的缓存失效策略,常见采用以下两种:定时清理过期的缓存。
  • 当有用户请求过来时,再判断这个请求所用到的缓存是否过期,过期的话就去底层系统得到新数据并更新缓存。

4、布隆过滤器

布隆过滤器用于快速识别1个元素不在一个集合中。
通过一个长 二进制向量和一系列 随机映射函数来记录与识别某个数据是否在一个集合中。

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

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

相关文章

RocketMQ:高速消息中间件的秘密武器

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 关于RocketMQ的详细图表,包含了Producer、Consumer、Broker和NameServer等关键组件,展示…

你知道有哪些Spring MVC扩展点可以解析接口参数和处理返回值吗?

1.概述 Spring MVC 是一个灵活且强大的框架,它允许开发者在框架的基础上进行深度定制,以满足各种复杂的业务需求。HandlerMethodArgumentResolver 和 HandlerMethodReturnValueHandler 是 Spring MVC 提供的两个重要扩展点,分别用于处理控制…

SLF4J 警告 - SLF4J: Class path contains multiple SLF4J bindings.

SLF4J 警告是因为类路径中存在多个 SLF4J 绑定。SLF4J 是一个抽象的日志接口,它可以与不同的日志实现(如 Logback 或 SLF4J Simple)一起使用。这个警告表明在你的项目中,SLF4J 找到了多个实现,导致它不知道该使用哪一个…

python如何判断回文

打开JUPTER NOTEBOOK,新建一个PYTHON文档。 n input("Please input string: ") print(n) 我们首先让用户输入要进行判断的字符串,然后打印出来查看一下。 n input("Please input string: ") is_palidrome n[::-1] if n is_palid…

Windows IPv6漏洞CVE-2024-38063

2024年8月,微软发现Windows10、Windows11、Windows Server2008~Server2022系统里,有个TCP/IP栈的远程代码执行漏洞,它通过目标系统的445端口,走IPv6协议,向目标系统发生特制的TCP包,执行任意代码&#xff0…

MySQL索引(三)

MySQL索引(三) 文章目录 MySQL索引(三)为什么建索引?怎么建立索引为什么不是说索引越多越好什么时候不用索引更好 索引怎么优化索引失效如何解决索引失效 学习网站:https://xiaolincoding.com/ 为什么建索引? 1.索引大大减少了MySQL需要扫描…

io进程中进程的创建,回收,退出

目录 一丶什么是进程 1.概念 2.特点 3 进程段 4.进程分类 5.进程状态 6.进程状态切换图 7.进程相关命令 8.优先级调度 二丶进程函数接口 1.创建进程fork() 2.进程回收wait() 3.结束进程exit() 4.获取进程号getpid(),getppid() 5.exec函数族 6.守护进程 特点&a…

AI辅助创作全攻略:如何高效利用人工智能撰写各类作品文字

在数字化时代的浪潮中人工智能(AI)已经渗透到咱们生活的方方面面,其中就包含文学创作领域。辅助创作不仅可以加强写作效率还能激发创作灵感宽创作视野。 那么怎么样高效利用人工智能撰写各类作品文字呢?本文将为您详细解析这一全攻…

软件测试 | 测试用例

测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境,测试步骤,测试数据,预期结果等要素。 设计测试用例原则⼀: 测试用例中⼀个必需部分是对…

进程间通信:采用有名管道,创建两个发送接收端,父进程写入管道1和管道2,子进程读取管道2和管道1.

作业1&#xff1a;有名管道&#xff0c;创建两个发送接收端&#xff0c;父进程写入管道1和管道2&#xff0c;子进程读取管道2和管道1. 右进程 #include <myhead.h> int main(int argc, const char *argv[]) {pid_t pidfork();if(pid>0)//父进程&#xff0c;将数据发…

PHP软件下载-安装-环境配置

.1.下载 下载地址如下 windows.php.net - /downloads/releases/ 安装包如下. .2.安装 可以在D盘或者E盘的根目录创建一个自定义目录。注意文件夹目录中不能包含中文&#xff0c;不能包含空格等特殊字符。 版本说明&#xff1a; (1)ts表示非线程安全版本。这个安装包还指明了…

easypoi实现ftl转doc文档(循环填充数据)

1.pom文件 java <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId></dependency><!-- EasyPoi依赖 --><dependency><groupId>cn.afterturn</groupId><artifactId>easypo…

【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】

室内告白表白祝福布置霓虹灯生日视频制作教程AE模板改字生成器 怎么如何做的【生日视频制作】室内告白表白祝福布置霓虹灯AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

select epoll搭建并发式服务器

select 在C语言中&#xff0c;使用select函数可以创建一个并发式服务器。select是一个系统调用&#xff0c;它允许服务器同时监视多个文件描述符&#xff08;如套接字&#xff09;&#xff0c;以便知道哪个文件描述符准备好了进行读取或写入操作。这使得服务器能够同时处理多个…

Python简介、发展史

Python简介、发展史 本文目录&#xff1a; 零、时光宝盒 一、Python简介 二、Python设计者 三、Python发展史 四、Python语言的编程语言特性 五、Python现状 六、Python的未来 零、时光宝盒 我家所在的楼是3栋楼连接在一起的建筑&#xff0c;也就是3栋楼楼顶建筑上互通。…

学习笔记——后端项目中的相关技术 【随时更新】

文章目录 1. Session 共享1.0 cookie和session的工作流1.1 Cookie范围1.2 为什么要共享&#xff1f;1.3 如何共享存储1.4 session共享实现 1. Session 共享 1.0 cookie和session的工作流 在 Web 开发中&#xff0c;Cookie 和 Session 是非常常见的&#xff0c;尤其是在处理用…

使用 Java 在 Android 平台上通过 socket 实现进程间通信

引言 Socket是位于应用层和传输层之间的一个抽象层&#xff0c;把TCP/IP层复杂的操作抽象为几个简单的接口&#xff0c;供应用层调用以实现进程在网络中通信。 Socket分为流式套接字和数据包套接字&#xff0c;分别对应网络传输控制层的TCP协议和UDP协议。TCP协议是一种面向连…

Qt之界面优化

目录 前言 QSS基础知识 选择器 样式属性 控件样式⽰例 绘图 接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 前言 Qt 仿照CSS的模式,引⼊了QSS,来对Qt中的控件做出样式上的设定,从⽽允许程序猿写出界⾯更好看 的代码.当然,由于Q…

【面试题系列Vue05】跟其他人不太一样的 Vue生命周期总结

既然要讲 生命周期&#xff0c;那渲染过程得先了解下。 数据绑定 Vue 文本插值 在 Vue 中&#xff0c;最基础的模板语法是数据绑定&#xff0c;例如&#xff1a; <div>{{ data }}</div>这里绑定了一个 msg 的变量&#xff0c;开发者在 Vue 实例 data 中绑定该变…

DataWhale AI夏令营-《李宏毅深度学习教程》笔记-task2

DataWhale AI夏令营-《李宏毅深度学习教程》笔记 第四章 卷积神经网络卷积神经网络构成一个通俗的例子 第四章 卷积神经网络 这部分看书的时候感觉云里雾里的&#xff0c;好在之前学过一些卷积神经网络、全链接、感受野的概念&#xff0c;我就用自己的理解阐述一篇笔记吧&…