目录

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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部