# 缓存使用

整个系统配置了默认的缓存方案和使用方式,系统默认使用 redis 缓存,并自定义缓存注解, 在Boot启动类上面添加@EnableCaching注解,web 应用已集成,则不用添加。

# 注解方式

注解使用示例和方式

@Cacheable(cacheNames ="manager_account#300")
@Override
public Page<ManagerAccountRecordEntity> findAllByWrapperAndPageable(RestWrapper restWrapper) {
    return super.findAllByWrapperAndPageable(restWrapper);
}

说明:

  • cacheNames 以#为分隔符,第一个为存储的名称,第二个为超时的时间,单位为(秒)
  • key 生成策略如下,需要注解hash值,类使用toString()操作:
    @Bean
    @Override
    public KeyGenerator keyGenerator() {
        return (target, method, params) -&gt; {
            StringBuilder sb = new StringBuilder();
            sb.append(target.getClass().getName());
            sb.append(method.getName());
            for (Object obj : params) {
                sb.append(obj.toString());
            }
            return sb.toString();
        };
    }
    

# 方法调用

方法级调用使用 spring 注入,使用如下:

@Autowired
private RedisOperationUtil redisUtil;

# keys 相关命令

NO 方法 描述
1 void delete(String key) key 存在时删除 key
2 void delete(Collection keys) 批量删除 key
3 byte[] dump(String key) 序列化 key,返回被序列化的值
4 Boolean hasKey(String key) 检查 key 是否存在
5 Boolean expire(String key, long timeout, TimeUnit unit) 设置过期时间
6 Boolean expireAt(String key, Date date) 设置过期时间
7 Set <String> keys(String pattern) 查找所有符合给定模式(pattern)的 key
8 Boolean move(String key, int dbIndex) 将当前数据库的 key 移动到给定的数据库 db 当中
9 Boolean persist(String key) 移除 key 的过期时间,key 将持久保持
10 Long getExpire(String key, TimeUnit unit) 返回 key 的剩余的过期时间
11 Long getExpire(String key) 返回 key 的剩余的过期时间
12 String randomKey() 从当前数据库中随机返回一个 key
13 void rename(String oldKey, String newKey) 修改 key 的名称
14 Boolean renameIfAbsent(String oldKey, String newKey) 仅当 newkey 不存在时,将 oldKey 改名为 newkey
15 DataType type(String key) 返回 key 所储存的值的类型

TimeUnit 是时间单位,可选值有:

  • 天:TimeUnit.DAYS、小时:TimeUnit.HOURS、分钟:TimeUnit.MINUTES、秒:TimeUnit.SECONDS、毫秒:TimeUnit.MILLISECONDS。

# String 数据类型操作

NO 方法 描述
1 String get(String key) 获取指定 key 的值
2 String getRange(String key, long start, long end) 返回 key 中字符串值的子字符
3 String getAndSet(String key, String value) 将 key 的值设为 value,并返回 key 旧值
4 Boolean getBit(String key, long offset) 对 key 所储存的值,获取指定位置上的 bit
5 List multiGet(Collection keys) 批量获取
添加相关
6 void set(String key, String value) 设置指定 key 的值
7 boolean setBit(String key, long offset, boolean value) 设置指定位置上的 ASCII 码
8 void setEx(String key,String value,long timeout,TimeUnit unit) 将值 value 关联到 key,并设置 key 过期时间
9 boolean setIfAbsent(String key, String value) 只有在 key 不存在时设置 key 的值
10 void setRange(String key, String value, long offset) 用 value 覆写 key 的值,从偏移量 offset 开始
11 void multiSet(Map<String,String> maps) 批量添加
12 boolean multiSetIfAbsent(Map<String,String> maps) 批量添加,仅当所有 key 都不存在
其他方法
13 Integer append(String key, String value) 追加到末尾
14 Long incrBy(String key, long increment) 增加(自增长), 负数则为自减
15 Double incrByFloat(String key, double increment) 增加(自增长), 负数则为自减
16 Long size(String key) 获取字符串的长度

关于上面 xxBit 方法的使用:

  • 例如字符'a'的 ASCII 码是 97,转为二进制是'01100001',setBit 方法就是把第 offset 位置上变成 0 或者 1,true 是 1,false 是 0。

# Hash 相关的操作

NO 方法 描述
1 Object hGet(String key, String field) 获取存储在哈希表中指定字段的值
2 Map hGetAll(String key) 获取所有给定字段的值
3 List hMultiGet(String key, Collection fields) 获取所有给定字段的值
添加相关
4 void hPut(String key, String hashKey, String value) 添加字段
5 void hPutAll(String key, Map maps) 添加多个字段
6 Boolean hPutIfAbsent(String key,String hashKey,String value) 仅当 hashKey 不存在时才设置
其他方法
7 Long hDelete(String key, Object... fields) 删除一个或多个哈希表字段
8 boolean hExists(String key, String field) 查看哈希表 key 中指定的字段是否存在
9 Long hIncrBy(String key, Object field, long increment) 为哈希表 key 中指定字段的值增加 increment
10 Double hIncrByFloat(String key, Object field, double delta) 为哈希表 key 中指定字段的值增加 increment
11 Set hKeys(String key) 获取所有哈希表中的字段
12 Long hSize(String key) 获取哈希表中字段的数量
13 List hValues(String key) 获取哈希表中所有值
14 Cursor hScan(String key, ScanOptions options) 迭代哈希表中的键值对
15 getListCache(final String key, Class<T> targetClass) 获取缓存中的 List,targetClass 是序列化的类
16 putListCacheWithExpireTime(String key, List<T> objList, final long expireTime) 把 List 放到缓存,expireTime 是过期策略

# List 相关的操作

NO 方法 描述
1 String lIndex(String key, long index) 通过索引获取列表中的元素
2 List lRange(String key, long start, long end) 获取列表指定范围内的元素
添加相关
3 Long lLeftPush(String key, String value) 存储在 list 头部
4 Long lLeftPushAll(String key, String... value) 存储在 list 头部
5 Long lLeftPushAll(String key, Collection value) 存储在 list 头部
6 Long lLeftPushIfPresent(String key, String value) 当 list 存在的时候才加入
7 lLeftPush(String key, String pivot, String value) 如果 pivot 存在,再 pivot 前面添加
8 Long lRightPush(String key, String value) 存储在 list 尾部
9 Long lRightPushAll(String key, String... value) 存储在 list 尾部
10 Long lRightPushAll(String key, Collection value) 存储在 list 尾部
11 Long lRightPushIfPresent(String key, String value) 当 list 存在的时候才加入
12 lRightPush(String key, String pivot, String value) 在 pivot 元素的右边添加值
13 void lSet(String key, long index, String value) 通过索引设置列表元素的值
删除相关
14 String lLeftPop(String key) 移出并获取列表的第一个元素
15 String lBLeftPop(String key,long timeout,TimeUnit unit) 移出并获取第一个元素,没有则阻塞直到超时或有为止
16 String lRightPop(String key) 移除并获取列表最后一个元素
17 String lBRightPop(String key,long timeout,TimeUnit unit) 移出并获取最后个元素,没有则阻塞直到超时或有为止
18 String lRightPopAndLeftPush(String sKey,String dKey) 移除最后一个元素并加到另一个列表并返回
19 String lBRightPopAndLeftPush(sKey,dKey,timeout,unit) 移除最后个元素并加到另个列表并返回,阻塞超时或有
20 Long lRemove(String key, long index, String value) 删除集合中值等于 value 得元素
21 void lTrim(String key, long start, long end) 裁剪 list
其他方法
22 Long lLen(String key) 获取列表长度

# Set 相关的操作

NO 方法 描述
1 Set<String> sMembers(String key) 获取集合所有元素
2 Long sSize(String key) 获取集合大小
3 Boolean sIsMember(String key, Object value) 判断集合是否包含 value
4 String sRandomMember(String key) 随机获取集合中的一个元素
5 List<String> sRandomMembers(String key, long count) 随机获取集合 count 个元素
6 Set<String> sDistinctRandomMembers(String key, long count) 随机获取 count 个元素并去除重复的
7 Cursor<String> sScan(String key, ScanOptions options) 使用迭代器获取元素
8 Set<String> sIntersect(String key, String otherKey) 获取两个集合的交集
9 Set<String> sIntersect(String key, Collection<String> otherKeys) 获取 key 集合与多个集合的交集
10 Long sIntersectAndStore(String key, String oKey, String dKey) key 集合与 oKey 的交集存储到 dKey 中
11 Long sIntersectAndStore(String key,Collection<String> oKeys,String dKey) key 与多个集合的交集存储到 dKey 中
12 Set<String> sUnion(String key, String otherKeys) 获取两个集合的并集
13 Set<String> sUnion(String key, Collection<String> otherKeys) 获取 key 集合与多个集合的并集
14 Long sUnionAndStore(String key, String otherKey, String destKey) key 集合与 oKey 的并集存储到 dKey 中
15 Long sUnionAndStore(String key,Collection<String> oKeys,String dKey) key 与多个集合的并集存储到 dKey 中
16 Set<String> sDifference(String key, String otherKey) 获取两个集合的差集
17 Set<String> sDifference(String key, Collection<String> otherKeys) 获取 key 集合与多个集合的差集
18 Long sDifference(String key, String otherKey, String destKey) key 与 oKey 集合的差集存储到 dKey 中
19 Long sDifference(String key,Collection<String> otherKeys,String dKey) key 与多个集合的差集存储到 dKey 中
添加相关
20 Long sAdd(String key, String... values) 添加
删除相关
21 Long sRemove(String key, Object... values) 移除
22 String sPop(String key) 随机移除一个元素
23 Boolean sMove(String key, String value, String destKey) 将 key 集合中 value 移到 destKey 中

# zset 数据类型操作

NO 方法 描述
1 Set<String> zRange(String key, long start, long end) 获取元素,小到大排序,s 开始 e 结束位置
2 Set<TypedTuple<String>> zRangeWithScores(String key, long start, long end) 获取集合元素, 并且把 score 值也获取
3 Set<String> zRangeByScore(String key, double min, double max) 根据 score 范围查询元素,从小到大排序
4 Set<TypedTuple<String>> zRangeByScoreWithScores(key,double min,double max) 根据 score 范围查询元素,并返回 score
5 Set<TypedTuple> zRangeByScoreWithScores(key,double min,max,long start,end) 根据 score 查询元素,s 开始 e 结束位置
6 Set<String> zReverseRange(String key, long start, long end) 获取集合元素, 从大到小排序
7 Set<TypedTuple<String>> zReverseRangeWithScores(key, long start, long end) 获取元素,从大到小排序,并返回 score
8 Set<String> zReverseRangeByScore(String key, double min, double max) 根据 score 范围查询元素,从大到小排序
9 Set<TypedTuple> zReverseRangeByScoreWithScores(key,double min,double max) 根据 score 查询,大到小排序返回 score
10 Set<String> zReverseRangeByScore(key, double min, max, long start, end) 根据 score 查询,大到小,s 开始 e 结束
11 Long zRank(String key, Object value) 返回元素在集合的排名,score 由小到大
12 Long zReverseRank(String key, Object value) 返回元素在集合的排名,score 由大到小
13 Long zCount(String key, double min, double max) 根据 score 值范围获取集合元素的数量
14 Long zSize(String key) 获取集合大小
15 Long zZCard(String key) 获取集合大小
16 Double zScore(String key, Object value) 获取集合中 value 元素的 score 值
17 Long zUnionAndStore(String key, String otherKey, String destKey) 获取 key 和 oKey 的并集并存储在 dKey 中
18 Long zUnionAndStore(String key,Collection<String> otherKeys,String dKey) 获取 key 和多个集合并集并存在 dKey 中
19 Long zIntersectAndStore(String key, String otherKey, String destKey) 获取 key 和 oKey 交集并存在 destKey 中
20 Long zIntersectAndStore(String key,Collection<String> oKeys,String dKey) 获取 key 和多个集合交集并存在 dKey 中
21 Cursor<TypedTuple<String>> zScan(String key, ScanOptions options) 使用迭代器获取
添加相关
22 Boolean zAdd(String key, String value, double score) 添加元素,zSet 按 score 由小到大排列
23 Long zAdd(String key, Set<TypedTuple<String>> values) 批量添加,TypedTuple 使用见下面介绍
删除相关
24 Long zRemove(String key, Object... values) 移除
25 Double zIncrementScore(String key, String value, double delta) 增加元素的 score 值,并返回增加后的值
26 Long zRemoveRange(String key, long start, long end) 移除指定索引位置的成员
27 Long zRemoveRangeByScore(String key, double min, double max) 根据指定的 score 值的范围来移除成员

批量添加时TypedTuple的使用:

  • TypedTuple<String> typedTuple = new DefaultTypedTuple<String>(value,score)
  • TypedTuple<String> typedTuple = new DefaultTypedTuple<String>(value,score)
  • TypedTuple<String> typedTuple = new DefaultTypedTuple<String>(value,score)
  • TypedTuple<String> typedTuple = new DefaultTypedTuple<String>(value,score)