优化背景
1:数据统计类型的项目,用户量多、业务数据量大、计算逻辑复杂。
4:项目开发工作临近完成,不宜大改动。
方案
1:针对背景第1点,需要使用Redis把复用性高的统计结果缓存起来。减少重复的计算,减少数据库压力,提高服务响应速度。
2:使用 注解+AOP的技术,达到代码修改最小化、缓存可配置化。
下图是我整个设计的详细思维:
实现
流程
Redis配置
spring.redis.host=172.26.175.74
spring.redis.port=6379
spring.redis.password=admin
#0:不启用 1:启用
report.redis.enable=1
注解
import java.lang.annotation.*;
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisCashe {
//缓存名称,用于Redis Key的命名。
String cacheName();
//过期时间配置 以秒为单位,示例(1天):3600*24
int expire();
}
AOP缓存(关键)
/**
部份命名空间因为脱敏,干掉了。
**/
@Aspect
@Component
public class RedisProcess {
private static final Logger logger = LoggerFactory.getLogger(RedisProcess.class);
@Resource
RedisTemplate<String, Object> redisTemplate;
//可以直接取toString的类型集合。
private static final List<String> typeList;
static {
ArrayList<String> rs =new ArrayList<>();
rs.add(String.class.getTypeName());
rs.add(int.class.getTypeName());
rs.add(Integer.class.getTypeName());
rs.add(double.class.getTypeName());
rs.add(BigDecimal.class.getTypeName());
rs.add(boolean.class.getTypeName());
rs.add(byte.cl