# dtguai-cache **Repository Path**: gouliang/dtguai-cache ## Basic Information - **Project Name**: dtguai-cache - **Description**: 基于spring boot上的注解缓存。client 采用 lettuce - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://www.dtguai.com - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-01-02 - **Last Updated**: 2025-02-08 ## Categories & Tags **Categories**: cache-modules **Tags**: None ## README # dtguai-cache 基于spring boot上的注解缓存。client 采用 lettuce
@Cache轻量的缓存,支持单个缓存设置过期时间,可以根据前缀移除缓存。
采用fastjson序列化与反序列化,以json串存于缓存之中。
可以快速用于日常的spring boot应用之中。
# 使用手册 ## Maven依赖 ``` com.dtguai dtguai-cache 1.0.3 ``` ## 缓存配置 1、配置redis数据源,application.yml文件 ``` #redis-cache 相关 spring: redis: database: 9 host: 192.168.14.108 port: 6379 # password: # cluster: # nodes: # - 127.0.0.1:6379 # - 127.0.0.1:6380 # - 127.0.0.1:6381 # - 127.0.0.1:6382 lettuce: pool: # 连接池最大连接数 默认8 ,负数表示没有限制 max-active: 32 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认-1 max-wait: -1 # 连接池中的最大空闲连接 默认8 max-idle: 8 # 连接池中的最小空闲连接 默认0 min-idle: 0 timeout: 3000 ``` ## 缓存开启 2、开启AOP扫描 ``` 在spring boot启动类中加入 @EnableDtguaiCache ``` ## 缓存使用 3、在Service上进行@Cache注解或@CacheClear注解 # 注解说明 ## 配置缓存:@Cache 注解参数 | 类型 | 说明 ------------- |------------- | ----- key | 字符串 | 缓存表达式,动态运算出key expires | 整形 | 缓存时长,单位:分钟 默认为10分钟 parser | Class | 缓存返回结果自定义处理类 generator | Class | 缓存键值自定义生成类 ## 清除缓存:@CacheClear 注解参数 | 类型 | 说明 ------------- |------------- | ----- pre | 字符串 | 清除某些前缀key缓存 写法:pre = "1*" or pre = {"1*","2","3*"} key | 字符串 | 清除某个key缓存 写法:key = "1" or key = {"1","2","3"} generator | Class | 缓存键值自定义生成类 ## 默认key动态表达式说明 表达式举例 | 说明 | 举例 ------------- |------------- | ----- @Cache(key="user:{1}")
public User getUserByAccount(String account) | {1}表示获取第一个参数值
{2}表示获取第二个参数值
……依此类推 | 若:account = ace,则:key = user:ace @CacheClear(pre="user:{1.account}")
User saveOrUpdate(User user)|{1}表示获取第一个参数值
{1.xx}表示获取第一个参数中的xxx属性|若:account=ace,则:key = user:ace # Demo 1、在src/main/test中展开的相关示例代码 >CacheTest是核心启动类 >>service包是缓存调用例子,包含自定义表达式和结果解析、注解的使用 # 常见问题 类中使用redisTemplate: ``` @Autowired private RedisTemplate redisTemplate; ``` 基础操作方式展示: 具体参数请移步测试类 ``` @Override @Cache(key = "user:{1}") public User get(String account) { log.warn("从get方法内读取...."); return new User("太子", 42, account); } @Override @Cache(key = "user:list") public List getList() { log.warn("从getLlist方法内读取...."); List users = new ArrayList<>(20); for (int i = 0; i < 20; i++) { User user = new User("陈雄", i, "cx911"); users.add(user); } return users; } @Override @Cache(key = "user:set", parser = SetCacheResultParser.class) public Set getSet() { log.warn("从getSet方法内读取...."); Set users = new HashSet<>(20); for (int i = 0; i < 20; i++) { User user = new User("陈雄", i, "cx911"); users.add(user); } return users; } @Override @Cache(key = "user:map:{1.age}:{2.age}:{3.name}") public Map getMap(Map m, List l, User u) { log.warn("从方法内读取...."); Map users = new HashMap<>(40); for (int i = 0; i < 20; i++) { User user = new User("陈雄", i, "cx911"); users.put(user.getAccount() + i, user); } return users; } @Override //@CacheClear(key = "user:{1.age}:{1.name}:{1.account}", pre = "user", keys = "1,2,3,4") //@CacheClear( pre = "user:map:{1.age},2,3", keys = "1,2,3,4") @CacheClear(key = "1", pre = "2*") public void save(User user) { } @Override @Cache(generator = MyKeyGenerator.class) public User get(int age) { log.warn("从get方法内读取...."); return new User("陈雄", age, "cx911"); } /** * 对map返回结果做处理 */ public static class UserMapCacheResultParser implements CacheResultParser> { @Override public HashMap parse(String value, Type returnType) { return JSON.parseObject(value, returnType); } } /** * 对set返回结果做处理 */ public static class SetCacheResultParser implements CacheResultParser> { @Override public HashSet parse(String value, Type returnType) { return JSON.parseObject(value, new TypeReference>() { }); } } ``` ## 感谢 感谢作者:[The Sun](https://gitee.com/geek_qi/ace-cache)