一.
定义一个这样的枚举类,把要缓存的key的格式给定义下来,通过getCacheKey()方法来获取到缓存的key
这样的话,不管传参个数多少,都在统一一个枚举类给处理好了
@AllArgsConstructor
@Getter
public enum CacheKey {
/**
*
KEY_1("key1:","xx:%s:%s"),
kEY_2("key2:", "xx:%s");
String biz;
String prefix;
public static String getCacheKey(CacheKey cacheKey, Object... args) {
return cacheKey.getBiz() + String.format(cacheKey.getPrefix(), args);
}
public String getCacheKey(Object... args) {
return this.getBiz() + String.format(this.getPrefix(), args);
}
}
这样你就可以定义一个设置缓存的通用方法
value的来源可以定义一个无参获取对象的Supplier接口
再进一步的话,可以将此方法设置成接口里的抽象方法,让不同的实现类去实现该方法,以此来缓存不同的业务数据.
void setCache(Supplier<List<xxDo>> supplier, CacheKey keyFormat, Object... args);
二.redisTemplate关于hash/set的几个方法
@Override
public Boolean hHasKey(String key, String hashKey) {
return redisTemplate.opsForHash().hasKey(key, hashKey);
}
@Override
public Long hIncr(String key, String hashKey, Long delta) {
return redisTemplate.opsForHash().increment(key, hashKey, delta);
}
@Override
public Long hDecr(String key, String hashKey, Long delta) {
return redisTemplate.opsForHash().increment(key, hashKey, -delta);
}
@Override
public Set<Object> sMembers(String key) {
return redisTemplate.opsForSet().members(key);
}