【系统分析师】-缓存

目录

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个元素不在一个集合中。
通过一个长 二进制向量 和一系列 随机映射函数来记录与识别某个数据是否在一个集合中。

相关推荐
喜欢吃animal milk3 小时前
Redis - 缓存
redis·缓存
星辰@Sea3 小时前
多级缓存的设计与实现
缓存
沐爸muba3 小时前
HTTP的强制缓存和协商缓存有什么区别和联系?
网络协议·http·缓存
康提扭狗兔5 小时前
Caffenie配合Redis做两级缓存,Redis发布订阅实现缓存一致更新
数据库·redis·缓存
是小Y啦5 小时前
leetcode 146.LRU缓存
算法·leetcode·缓存
王佑辉6 小时前
【软考】设计模式之抽象工厂模式
设计模式·软考
longlongqin6 小时前
redis常见的数据类型?
数据库·redis·缓存
pokemon..7 小时前
Redis 配置
数据库·redis·缓存
爱吃肉c8 小时前
Integer 缓存
缓存
mtc8n249 小时前
Redis - 集群篇 - 集群模式
数据库·redis·缓存