视频地址: https://www.bilibili.com/video/BV1Ha411c7hB
代码地址: https://gitee.com/crazyliyang/video-teaching.git
1. 缓存穿透 解决案例
使用布隆过滤器
核心代码, 使用 Redisson 库的布隆过滤器: org.redisson.api.RBloomFilter
<!-- Redis 客户端工具 redisson 实现对 Redisson 的自动化配置-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.13.4</version>
</dependency>
配置类, 实例化布隆过滤器 RBloomFilter
@Configuration
public class RedisConfiguration {
/**
* 预计要插入多少数据
*/
private static int size = 100000; // 十万
/**
* 期望的误判率
*/
private static double fpp = 0.001;
@Value("${spring.redis.host}")
private String redistHost;
@Value("${spring.redis.port}")
private Integer redistPort;
@Autowired
private ProductService productService; // 商品服务
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
// 创建 RedisTemplate 对象
RedisTemplate<String, Object> template = new RedisTemplate<>();
// 设置开启事务支持
template.setEnableTransactionSupport(true);
// 设置 RedisConnection 工厂。 它就是实现多种 Java Redis 客户端接入的秘密工厂
template.setConnectionFactory(factory);
// 使用 String 序列化方式,序列化 KEY 。
template.setKeySerializer(RedisSerializer.string());
// 使用 JSON 序列化方式(库是 Jackson ),序列化 VALUE 。
template.setValueSerializer(RedisSerializer.json());
return template;
}
/**
* 实例化布隆过滤器
*
*/
@Bean
public RBloomFilter redisBloomFilter(){
String redisAddress = "redis://"+redistHost+ ":"+redistPort