当前位置: 首页 > news >正文

电子商务网站建设实验报告软考十大最靠谱it培训机构

电子商务网站建设实验报告,软考十大最靠谱it培训机构,网站公安备案怎么备案号,企业邮箱怎么申请入口1. 前言 缓存穿透大家都知道,这里简单过一下 缓存和数据库中都没有的数据,而用户不断发起请求。比如查询id -1 的值 想着很多面向C端的查询接口,可能都需要做一下缓存操作,这里简单写了个自定义注解,将查询结果(包含…

1. 前言

缓存穿透大家都知道,这里简单过一下

缓存和数据库中都没有的数据,而用户不断发起请求。比如查询id = -1 的值

想着很多面向C端的查询接口,可能都需要做一下缓存操作,这里简单写了个自定义注解,将查询结果(包含null值)做个缓存

这个只能预防单秒内接口高频次请求,要是一直搞随机值请求这个只能采取其他手段处理了(比如IP拉黑什么的…)

工具类留底,以后兴许可以直接抄~( ̄▽ ̄)"

2. 正文

直接上代码了

2.1 自定义注解

CacheResult

import java.lang.annotation.*;/*** <pre>* 接口缓存* 根据接口的第一个入参对象,和返回值进行缓存* 缓存的前缀为 TEMPORARY_CACHE:类名:方法名:key值* 示例:@CacheResult(key="userId + '_' + ecommerceId", seconds = 2L)* 缓存的key:TEMPORARY_CACHE:EcommerceController:getOrderList:407622341504839680_527203683850731520* </pre>* @author weiheng* @date 2023-08-25**/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})
public @interface CacheResult {/** 入参支持 SpEL表达式 做参数提取,比如入参对象有属性userId和ecommerceId -> key="userId + '_' + ecommerceId" */String key();/** 缓存时长,单位:秒 */long seconds();
}

2.2 统一做缓存处理的切面

CacheAspect

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.redisson.api.RBucket;
import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.stereotype.Component;import javax.annotation.Resource;/*** 缓存统一处理* @author weiheng* @date 2023-08-25**/
@Slf4j
@Aspect
@Component
public class CacheAspect {/** 临时缓存的统一前缀 */public static final String DEFAULT_PREFIX = "TEMPORARY_CACHE:";/** 缓存分隔符 */public static final String DELIMITER = ":";@Resourceprivate RedissonHelper redissonHelper;/*** 拦截通知** @param proceedingJoinPoint 入参* @return Object*/@Around("@annotation(cacheSeconds)")public Object around(ProceedingJoinPoint proceedingJoinPoint, CacheResult cacheSeconds) {Object[] args = proceedingJoinPoint.getArgs();if (args.length == 0) {// 方法没有入参,不做缓存return proceed(proceedingJoinPoint);}// 1. 判断缓存中是否存在,有则直接返回Object firstArg = args[0];// 获取用户指定的参数ExpressionParser parser = new SpelExpressionParser();EvaluationContext context = new StandardEvaluationContext(firstArg);Expression keyExpression = parser.parseExpression(cacheSeconds.key());String businessKey = keyExpression.getValue(context, String.class);// 拼装缓存keyString className = proceedingJoinPoint.getTarget().getClass().getSimpleName();String methodName = proceedingJoinPoint.getSignature().getName();String prefix = className + DELIMITER + methodName;String cacheKey = DEFAULT_PREFIX + prefix + DELIMITER + businessKey;RBucket<?> bucket = redissonHelper.getBucket(cacheKey);boolean exists = bucket.isExists();if (exists) {// 缓存中有值,直接返回return bucket.get();}// 2. 执行方法体Object returnValue = proceed(proceedingJoinPoint);// 3. 做个N秒的缓存long seconds = cacheSeconds.seconds();redissonHelper.setValueAndSeconds(cacheKey, returnValue, seconds);return returnValue;}private Object proceed(ProceedingJoinPoint proceedingJoinPoint) {Object returnValue;try {returnValue = proceedingJoinPoint.proceed();} catch (Throwable e) {log.error("error msg:", e);if (e instanceof SystemException) {throw (SystemException) e;}throw new SystemException(e.getMessage());}return returnValue;}

3. 使用示例

原本定义个2秒就OK了,这里为了方便看测试结果,给了60秒

@CacheResult(key=“userId + ‘_’ + ecommerceId”, seconds = 60L)

redis缓存如下:
在这里插入图片描述
就到这里了

http://www.ds6.com.cn/news/115479.html

相关文章:

  • 文登市城乡建设局网站今日头条新闻在线看
  • 大发 wordpress深圳品牌seo
  • 做海淘是在哪个网站深圳seo优化排名
  • 找人做网站价格百度推广客户端app下载
  • 我想弄个自己的卖货网站怎样做东莞seo推广
  • 免费自己做网站软件百度怎样发布作品
  • 建设电商网站需要多少钱seo运营做什么
  • 华为官方网站网站关键词有哪些
  • 淘宝联盟如何建设个人网站百度人工投诉电话是多少
  • 龙岗专业网站建设东莞疫情最新通知
  • 嘉兴新闻网灰色词seo推广
  • 行业网站建设的书做网络推广的网站有哪些
  • 购物网站如何做网络营销公司全网推广公司
  • ksweb建站教程深圳百度推广客服
  • 做网站郑州汉狮长沙seo推广外包
  • 宽城网站制作百度推广效果怎样一天费用
  • wordpress上传视频人50关键词优化公司哪家效果好
  • 政府网站建设要求自查网络公司推广公司
  • 做网站要icp备案吗百度百度推广
  • led视频网站建设新冠病毒最新消息
  • 适合做手机主页的网站湛江今日头条
  • 第三方做的网站不给源代码外链seo招聘
  • 调取接口做网站怎么创建域名
  • 做网站seo的公司洛阳seo博客
  • wordpress目录 读写权限设置杭州seo关键字优化
  • 最讨厌网站网站自然排名怎么优化
  • 驻马店网站建设公司seo关键词优化方法
  • 肇庆制作网站软件电商网站销售数据分析
  • 如何做x响应式网站石家庄seo外包的公司
  • 兰州有互联网公司嘛百度seo排名培训优化