Cache模块
# Cache模块
# 一、引入依赖
<dependency>
<groupId>cn.lovecyy</groupId>
<artifactId>relaxed-spring-boot-starter-redis</artifactId>
<version>${version}</version>
</dependency>
# 二、配置文件
spring:
redis:
database: 6
host: 127.0.0.7
port: 6379
password: 123456
lettuce:
pool:
max-idle: 30 #最大空闲连接数
min-idle: 0 #最小空闲连接数
max-active: 30 #最大连接数
max-wait: -1 #最大等待时间
relaxed:
redis:
#全局key前缀
key-prefix: 'pc:'
#锁key后缀
lock-key-suffix: locked
#key分隔符
delimiter: ':'
#空值占位
null-value: "N_V"
#默认全局过期时间 ms
expire-time: 86400
#锁超时时间
locked-time-out: 1000
# 三、编程式调用
//2.设置缓存
RedisHelper.set(key, param,timeout);
//3.查询缓存
String value = RedisHelper.get(key);
//4.删除缓存
RedisHelper.del(key);
# 四、声明式调用
内置三大注解
@Cached 分布式锁缓存,若查出数据为空,则默认方式空值占位
- prefix 缓存前缀
- keyJoint key动态参数,支持SPEL ,若需添加后缀,可在表达式后添加文本。eg:
#param+'suffix' - condition 条件表达式 若成立,则注解生效,否则注解不生效
- ttl 缓存超时时间 ms
@CachedPut 缓存创建或更新
- prefix 缓存前缀
- keyJoint key动态参数,支持SPEL ,若需添加后缀,可在表达式后添加文本。eg:
#param+'suffix' - condition 条件表达式 若成立,则注解生效,否则注解不生效
- ttl 缓存超时时间 ms
@CachedDel 缓存删除
- prefix 缓存前缀
- keyJoint key动态参数,支持SPEL ,若需添加后缀,可在表达式后添加文本。eg:
#param+'suffix' - condition 条件表达式 若成立,则注解生效,否则注解不生效
# 附件功能
# 一、分布式锁
# 1.LockManage
分布式锁管理 工具 , 静态方法直接调用
/**
* 上锁
* @param key
* @param requestId
* @return
*/
boolean lock(String key, T requestId);
/**
* 上锁 指定过期时间
* @param key
* @param requestId
* @param ttl
* @return
*/
boolean lock(String key, T requestId, Long ttl);
/**
* 上锁
* @author yakir
* @date 2021/8/26 18:07
* @param key
* @param requestId
* @param ttl 锁过期时间
* @param timeout 锁获取超时时间
* @return java.lang.Boolean
*/
boolean lock(String key, T requestId, Long ttl, long timeout);
/**
* 释放锁
* @param key
* @param requestId
* @return
*/
boolean releaseLock(String key, T requestId);
# 2.分布式锁模板调用
String cacheData = DistributedLock.<String>instance().action(ops.lockKey(), () -> {
String cacheValue = cacheQuery.get();
if (cacheValue == null) {
// 从数据库查询数据
Object dbValue = ops.joinPoint().proceed();
// 如果数据库中没数据,填充一个String,防止缓存击穿
cacheValue = dbValue == null ? CachePropertiesHolder.nullValue() : cacheSerializer.serialize(dbValue);
// 设置缓存
ops.cachePut().accept(cacheValue);
}
return cacheValue;
}).onLockFail(cacheQuery).lock();
# 二、前缀Key生成器
实现KeyGenerator接口,默认前缀拼接生成器(全局生效)
@RequiredArgsConstructor
public class PrefixKeyGenerator implements IRedisPrefixConverter {
private final String prefix;
public DefaultRedisPrefixConverter(String prefix) {
this.prefix = prefix;
}
@Override
public String getPrefix() {
return prefix;
}
@Override
public boolean match() {
return true;
}
}
# 三、配置文件持有者
CachePropertiesHolder 配置文件持有,静态方法直接调用
public static String keyPrefix();
public static String lockKeySuffix();
public static String delimiter();
public static String nullValue();
public static long expireTime();
public static long lockedTimeOut();
public static boolean lockedRenewal();
public static CacheProperties.Watcher watcher();