# 缓存使用
整个系统配置了默认的缓存方案和使用方式,系统默认使用 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) -> { 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)