【系统分析师】-缓存

目录

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

相关推荐
岁月变迁呀9 小时前
Redis梳理
数据库·redis·缓存
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭10 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
Code apprenticeship11 小时前
怎么利用Redis实现延时队列?
数据库·redis·缓存
fpcc13 小时前
跟我学c++中级篇——C++中的缓存利用
c++·缓存
Ewen Seong13 小时前
mysql系列5—Innodb的缓存
数据库·mysql·缓存
安全二次方security²13 小时前
SMMU软件指南SMMU编程之虚拟机结构和缓存
缓存·cache·smmu·arm安全架构·系统mmu·虚拟机结构·vms
.生产的驴16 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven
kong790692821 小时前
电商项目-网站首页高可用(二)
缓存·二级缓存·网站首页高可用
一个懒鬼21 小时前
Windows脚本清理C盘缓存
windows·缓存
科马1 天前
【Redis】缓存
数据库·redis·spring·缓存