📄 系统缓存使用
内部资料,请刷新扫码登录
pigcloud
# 1. Spring Cache
pigx 对 Spring Cache
进行了扩展,支持到期删除、区分租户和全局缓存等操作。
关于 Spring Cache 注解的使用,请直接参考此博客 (opens new window)。
# 1.1 使用方法
当引入 pigx-common-data
模块时,会自动引入扩展版本的 Spring Cache
。
# 1.2 缓存过期支持
通过在原有的 Spring Cache 的 value 属性后增加 #过期时间 来设置缓存过期时间。
@Cacheable(value = VALUE_NAME#TTL, key = "#PARAMS")
Copied!
例如:设置过期时间为 2 秒。
@Cacheable(value = "USER#2", key = "#userId")
Copied!
# 1.3 缓存清除
使用 @CacheEvict 注解可以清除缓存
// 删除指定key的缓存 @CacheEvict(value = "USER", key = "#userId") public void updateUser(String userId) { // 更新用户操作 } // 删除某个缓存名称下的所有缓存 @CacheEvict(value = "USER", allEntries = true) public void clearUserCache() { // 清除所有用户缓存 }
Copied!
# 1.4 全局缓存
在 pigx 中对 Spring Cache 进行了区分,比如:
- A 租户有一个 CacheName 为 XXX。
- B 租户有一个 CacheName 为 XXX。
在多租户情况下会自动为每个租户隔离缓存,例如 A 租户的 XXX 缓存保存为 A:XXX,B 租户的 XXX 缓存保存为 B:XXX。
如果特定缓存不需要区分租户,比如某些功能对于所有租户的查询结果是一致的,只需要在 CacheName 上增加 gl:
前缀即可。
@Cacheable(value = "gl:tenant_details")
Copied!
# 2. RedisTemplate 使用
除了使用 Spring Cache 注解,pigx 支持 RedisTemplate,可以直接注入使用:
@Autowired private RedisTemplate<String, Object> redisTemplate;
Copied!
# 2.1 常用操作示例
// 设置字符串 redisTemplate.opsForValue().set("key", "value"); // 设置带过期时间的值(60秒) redisTemplate.opsForValue().set("key", "value", 60, TimeUnit.SECONDS); // 获取值 String value = (String) redisTemplate.opsForValue().get("key"); // 删除键 redisTemplate.delete("key"); // 判断键是否存在 boolean exists = redisTemplate.hasKey("key"); // Hash操作 redisTemplate.opsForHash().put("hashKey", "field", "value"); Object fieldValue = redisTemplate.opsForHash().get("hashKey", "field"); // List操作 redisTemplate.opsForList().rightPush("listKey", "value"); String listValue = (String) redisTemplate.opsForList().leftPop("listKey"); // Set操作 redisTemplate.opsForSet().add("setKey", "value1", "value2"); Set<Object> members = redisTemplate.opsForSet().members("setKey");
Copied!
# 2.2 注意事项
- 1.RedisTemplate 操作不会自动进行租户隔离,需要手动在 key 前加上租户标识
- 2.建议使用统一的 key 命名规范,例如:
业务:模块:功能:id
- 3.操作复杂数据结构时注意序列化问题
- 4.RedisTemplate 已经足够简单了,不要自己再封装 Util 啦