Spring AOP实现Redis缓存方法
技术分享|2020-4-23|最后更新: 2023-9-4
type
status
date
slug
summary
tags
category
icon
password
order
对于常常访问的数据,直接用Redis缓存可以很好的减少数据库压力,提升响应速度,实现思路如下
  • 利用注解,标注于需要缓存的方法上,利用AOP截取进行处理
  • 缓存的key名称可为SpringEL表达式,可选是否转为MD5减少key长度,方法的结果则为转换为JSON,所以注意Redis在序列化器要选择Json而不是String
  • 在AOP的环绕通知中,如果缓存存在直接返回该缓存,不存在则缓存当前方法的结果
  • 在进行增删改操作的方法上添加删除缓存的注解,及时清除对应的缓存
首先先新建三个注解,分别是
  • EnableCache:开启缓存
    • 参数expireTime:过期时间
    • 参数useMd5Key:是否使用MD5加密key
    • 参数keyName:key名称,可为EL表达式,格式#{#param} or #{#param.value}
    • 参数condition:缓存条件,EL表达式,比如#{#param.value>5}
  • DisableCache:禁用缓存
  • DeleteCache:删除缓存
    • 参数useMd5Key:是否使用MD5加密key
    • 参数keyName:key名称,可为EL表达式,格式#{#param} or #{#param.value}
    • 参数condition:缓存条件,EL表达式,比如#{#param.value>5}
然后需要一个工具类SpringExpressionUtil用于解析Spring EL表达式
最后就是重要的AOP了,没什么可说的,其中用到的RedisUtil代码就不放了,添加/删除Redis缓存。
注意:如果在控制器上添加EnableCache注解,代表其下所有方法开启缓存,就不要设置keyName这个参数了,默认值为全类名_方法名_参数序列化
食用方法如下
访问/cache就会发现redis缓存本次结果了了,二次访问就会直接调用redis的缓存
notion image
或者
这样的话每个方法所缓存的key名称就是全类名_方法名_参数序列化
notion image
如果设置了@EnableCache(useMd5Key = true),那么key如下
notion image
 
git 修改之前记录的作者和邮箱Spring MVC使用JWT做token验证