## 第6章-商品详情进阶优化
**学习目标:**
- 商品详情页优化方案
- 掌握Redis实现分布式锁方式
- 掌握Redisson实现Redis分布式锁
- 分布式锁+AOP实现缓存
- 布隆过滤器的使用场景及应用
# 1、商品详情页面优化
## 1.1 思路
虽然咱们实现了页面需要的功能,但是考虑到该页面是被用户高频访问的,所以性能需要优化。一般一个系统最大的性能瓶颈,就是数据库的io操作。从数据库入手也是调优性价比最高的切入点。
一般分为两个层面:
- 一是提高数据库sql本身的性能
- 二是尽量避免直接查询数据库。
重点要讲的是另外一个层面:尽量避免直接查询数据库。
解决办法就是:**缓存**
## 1.2 整合Redis到工程
由于Redis作为缓存数据库,要被多个项目使用,所以要制作一个通用的工具类,方便工程中的各个模块使用。
而主要使用Redis的模块,都是后台服务的模块,service工程。所以咱们把Redis的工具类放到service-util模块中,这样所有的后台服务模块都可以使用Redis。
### 1.2.1 首先在service-util引入依赖包
```xml
org.springframework.boot
spring-boot-starter-data-redis
org.apache.commons
commons-pool2
2.6.0
```
### 1.2.2 添加Redis配置类
在`service-util`配置自定义RedisTemplate对象-设置Key,Val的序列化方式
```java
package com.atguigu.gmall.common.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
@EnableCaching
public class RedisConfig {
@Primary
@Bean
public RedisTemplate