type
status
date
slug
summary
tags
category
icon
password
ext
order
comment
对于常常访问的数据,直接用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的缓存
或者
这样的话每个方法所缓存的key名称就是全类名_方法名_参数序列化
如果设置了@EnableCache(useMd5Key = true),那么key如下
- 作者:Loneking
- 链接:https://loneking.cn/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/101
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。