高可用服务设计之如何应对缓存穿透 (3)

 

高可用服务设计之如何应对缓存穿透

(2) 路由策略

高可用服务设计之如何应对缓存穿透

routing方法根据样本计算出路由key值。

exceptedInsertions方法根据样本获取到路由key值,然后计算期望插入的样本数量。

 

(3) 成员变量

高可用服务设计之如何应对缓存穿透

ROUTE_MAP是本地缓存,存储RoutingStrategy对象routing方法计算出的路由key值以及对应的RedisBloomFilter实例。

routingStrategy是路由策略RoutingStrategy实例。

bfRedisKeyPrefixRedis布隆过滤器bit数组在redis中对应的key值前缀。

bfKeysMappingRedisKey存储了所有Redis布隆过滤器bit数组在redis中对应的key(即bfRedisKeyPrefix + 路由key)的集合。

 

(4) put操作

高可用服务设计之如何应对缓存穿透

获取当前样本对象的routeKeyROUTE_MAPcomputeIfAbsent方法根据routeKey获取对应的Redis Bloom Filter,如果不存在则创建一个新的Redis Bloom Filter对象实例并保存到ROUTE_MAP中。变量bloomFilterRedisKey = bfRedisKeyPrefix + routeKey,也就是Redis Bloom Filter bit数组在redis中存储的key值,最后保存在分布式缓存的集合中(即bfKeysMappingRedisKey对应的集合)。

 

(5) mightContain操作

高可用服务设计之如何应对缓存穿透

put操作的流程基本一致,在获取routeKey对应的Redis Bloom Filter实例的时候,如果不存在需要判断分布式缓存bfKeysMappingRedisKey对应的集合中是否存在bloomFilterRedisKey,如果不存在说明put操作没有创建对应的Redis Bloom Filter实例,直接返回null

 

(6) 监控信息

高可用服务设计之如何应对缓存穿透

approximateElementCount,布隆过滤器中可能存在的元素个数。

bitSize,布隆过滤器bit数组大小。

bitCount,布隆过滤器bit数组中bit位是1的数量。

keyLength,布隆过滤器bit数组通过strlen统计的长度。

注:布隆过滤器的bit数组在redis中对应的数据类型是String哦!

应用场景

网页爬虫对URL的去重。

黑名单,垃圾邮件过滤。

解决数据库缓存击穿。

实际应用

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyswwf.html