redisdata
介绍
利用对方法注解获取redis缓存,若缓存不存在,运行方法得到结果加入缓存.若缓存存在,则直接返回缓存结果.目的为减少数据库查询次数,和对需要拦截的代码减少代码量.
软件架构
基础spring框架,依赖jedis.(水平有限,还有许多可以优化的地方,望不吝赐教)
安装教程
可直接改包名引入项目即可(同步修改RedisDataAspect的@Pointcut包名),或使用@Import引入
使用说明
在需要的方法上增加注解@RedisData即可.
方法级别,尽量用到service上,方法要有返回值.会先去查询缓存,缓存没有,会执行对应方法,然后把结果缓存起来,下次不会再去执行方法了.
此仅适用于系统级缓存(结果很少变,或一直不会变),减少查询数据库次数.不能自动探测缓存结果是否改变,需要其他方式触发.
防止数据更改,系统重启后缓存不变,需要去com.hgny.common.utils.JedisApplicationRunner的KEY_DEL_LIST去配置需要删除的key(支持通配符)
亦可增加自动增加的缓存
缓存可设置过期时间, 此实现方式暂时没采用jedis事务,可能会出现key/value已设置,但过期时间设置失败的情况,需及时处理
暂存缺陷:
返回值不支持多个泛型嵌套例如List>,也不支持Map的value为自定义复合类型(支持java集合类)
需应对下缓存穿透
key 为模板字符串${},可自动替换
示例: userId-${method:getCurrentUserId}_param0-${param:userName}_param1-${param:1}
若以method开头,会运行com.hgny.common.utils.RedisDataRunUtils中方法,获取结果替换, 可自主增加方法,方法public修饰,返回类型String,
不能有参数
若param开头, 会寻找注解方法里的参数的属性替换(目前不支持属性为对象),从第一个开始找,找到为止, 所以尽量用到的放在第一个参数.
若参数为基本类型时,因不方便直接获取基本类型的名字,改为用数字代表(从0开始)
所以key替换后,结果为userId-1_param0-lyf_param1-2019
type 支持类型为redis中的String, Set, Hash, List
String: 方法返回类型若为基本类型,必须为String, 方法外自行转换其他基本类型,其他复合类型,会自动转换(存入的为json字符串)
Set: 方法返回值必须为Set>
Hash: 若指定field,则去获取指定的field, 若field长度为1, 则返回类型为String, 或其他复合类型(存入的为json字符串).
field长度不为1,返回List>, 实体方法结果List长度必须和Field长度相同,且顺序对应好,没有null值填充,否则,无法对应入缓存或入错顺序
不指定获取全部Hash, 返回类型为Map,或其他复合类型(目前不支持Map的value是bean对象)
List:
paging为true代表要分页,此时方法返回值必须为com.hgny.common.utils.PageUtils, 传入参数Map,参数limit条数默认
10,page当前页码默认1.(待测试)
paging为false,获取全部list
参与贡献
Fork 本仓库
新建 Feat_xxx 分支
提交代码
新建 Pull Request
码云特技
使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md