步骤分析
1.首页列表实现,每一个标签只显示5条最新的数据,查询条件中根据标签查询,每次切换标签都访问一个接口
1.1检查参数:
1.分页参数pagesize大于5 pagesize=5 如果页数<=0,输出参数不正确
2.tab是否合法
1.2 newslist
2.列表查询sql语句,只查询题目以及id,提高查询性能
3.查询出结果后,放入redis缓存中,设置2分钟的过期时间,加快访问速度的同时也可以防止出现集中访问的情况,应对短暂的热点现象
4.文章详情,根据id查询文章的详细信息,同样放入缓存中,考虑到文章内容过大,设计30s的过期时间,后期如果出现访问激增的情况,考虑放入es中
5.列表详情页面,分页查询,同样放入缓存,sql语句只查询需要的信息即可
6.可以写缓存的通用实现
3.1 自定义注解cache
3.2 自定义注解如何生效
package com.mszlu.xt.common.cache;
import com.alibaba.fastjson.JSON;
import com.mszlu.xt.common.login.UserThreadLocal;
import com.mszlu.xt.common.model.CallResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.util.concurrent.TimeUnit;
/**
* @author shkstart
* @create 2022-01-{DAY} 14:51
*/
@Component
@Aspect //1定义切面
@Slf4j
public class CacheAspect {
@Autowired
private StringRedisTemplate redisTemplate;
//2定义切点 Cache注解所在的位置,就是切点
@Pointcut("@annotation(com.mszlu.xt.common.cache.Cache)")
public void pt(){
}
//3定义通知类
//代表对切点标识的方法 进行前后的切面处理,方法前后进行增强
@Around("pt()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
//1.首先构建 redis key
//2.通过rediskey进行查询,如果存在 有缓存 直接返回
//3.如果没有,调用方法,拿到返回值,进行缓存
Signature signature = pjp.getSignature();
//类名
String className = pjp.getTarget().getClass().getSimpleName();
//调用的方法名
String methodName = signature.getName();
Class[] parameterTypes = new Class[pjp.getArgs().length];
Object[] args = pjp.getArgs();
//参数
String params = "";
for(int i=0; i<args.length; i++) {
if(args[i] != null) {
params += JSON.toJSONString(args[i]);
parameterTypes[i] = args[i].getClass();
}else {
parameterTypes[i] = null;
}
}
i