为什么选择 Redis 缓存

  • Pig 框架与 Redis 强耦合,整个应用构建在 Redis 之上
  • Redis 是目前市场上最好的开源内存 NoSQL 数据库之一,是主流公司基础中间件和必备技术选型

RedisUtils 工具类

RedisUtils 提供了丰富的缓存操作方法,支持多种数据类型的操作。

基础操作

方法名称方法作用参数描述
expire指定缓存失效时间key:键,time:时间 (秒)
getExpire根据 key 获取过期时间key:键 不能为 null
scan查找匹配 keypattern:key
findKeysForPage分页查询 keypatternKey:key,page:页码,size:每页数目
hasKey判断 key 是否存在key:键
del删除缓存keys:可传一个值或多个

分布式锁

方法名称方法作用参数描述
getLock获取锁lockKey:锁 key,value:value,expireTime:过期时间 (单位秒)
releaseLock释放锁lockKey:锁 key,value:value

字符串操作

方法名称方法作用参数描述
get普通缓存获取key:键
multiGet批量获取keys:键的集合
set普通缓存放入key:键,value:值
set普通缓存放入并设置时间key:键,value:值,time:时间 (秒)

Hash 操作

方法名称方法作用参数描述
hgetHashGetkey:键,不能为 null hashKey:项,不能为 null
hmget获取 hashKey 对应的所有键值key:键
hmsetHashSetkey:键 map:对应多个键值
hset向一张 hash 表中放入数据,如果不存在将创建key:键 item:项 value:值
hdel删除 hash 表中的值key:键,不能为 null item:项,可以使多个,不能为 null
hHasKey判断 hash 表中是否有该项的值key:键,不能为 null item:项,不能为 null
hincrhash 递增key:键 item:项 by:要增加几 (大于 0)
hdecrhash 递减key:键 item:项 by:要减少记 (小于 0)

Set 操作

方法名称方法作用参数描述
sGet根据 key 获取 Set 中的所有值key:键
sHasKey根据 value 从一个 set 中查询,是否存在key:键 value:值
sSet将数据放入 set 缓存key: 键,values: 值 可以是多个
sSetAndTime将 set 数据放入缓存key: 键,time: 时间 (秒), values: 值 可以是多个
sGetSetSize获取 set 缓存的长度key: 键
setRemove移除值为 value 的key: 键,values: 值 可以是多个
sDifference获集合 key1 和集合 key2 的差集元素key: 键,otherKey: 集合 key2 的键

List 操作

方法名称方法作用参数描述
lGet获取 list 缓存的内容key: 键,start: 开始索引,end: 结束索引 (0 到 -1 代表所有值)
lGetListSize获取 list 缓存的长度key: 键
lGetIndex通过索引获取 list 中的值key: 键,index: 索引
lSet将 list 放入缓存key: 键,value: 值
lUpdateIndex根据索引修改 list 中的某条数据key:键 index:索引 value:值
lRemove移除 N 个值为 valuekey:键 count:移除多少个 value:值

Sorted Set 操作

方法名称方法作用参数描述
zSetAndTime将 zSet 数据放入缓存key:键 time:时间 tuples:值
zRangeByScoreSorted set:有序集合获取key:键 min:最小分数 max:最大分数
zRangeSorted set:有序集合获取 正序key:键 start:开始位置 end:结束位置
zReverseRangeSorted set:有序集合获取 倒叙key:键 start:开始位置 end:结束位置
zGetSetSize获取 zSet 缓存的长度key:键

RedisTemplate 直接操作

引入 core 模块后,自动获得 Redis 缓存能力

依赖配置

<dependency>
  <groupId>com.pig4cloud</groupId>
  <artifactId>pig-common-core</artifactId>
</dependency>

使用示例

@Autowired
private RedisTemplate redisTemplate;

Object codeObj = redisTemplate.opsForValue().get(key);

支持的数据类型

  • HashOperations:对 hash 类型的数据操作
  • ValueOperations:对 redis 字符串类型数据操作
  • ListOperations:对链表类型的数据操作
  • SetOperations:对无序集合类型的数据操作
  • ZSetOperations:对有序集合类型的数据操作

Spring Cache 注解模式

@Cacheable 添加缓存

主要针对方法配置,能够根据方法的请求参数对其结果进行缓存

Cacheable 注解示例

@Cacheable(value = "user", key = "#id")
public User findById(Long id) {
    return userRepository.findById(id).orElse(null);
}

@CacheEvict 清空缓存

CacheEvict 注解示例

@CacheEvict(value = "user", key = "#id")
public void deleteById(Long id) {
    userRepository.deleteById(id);
}

属性说明

属性说明
value缓存的名称,在 spring 配置文件中定义,必须指定至少一个
key缓存的 key,可以为空,如果指定要按照 SpEL 表达式编写
condition缓存的条件,可以为空,使用 SpEL 编写,返回 true 或者 false
unless否定缓存,当条件结果为 true 时,就不会缓存

♥️ 获取支持

遇到问题?

如果您在使用过程中遇到任何问题、有功能建议或需求,请点击此卡片前往 Gitee 仓库提交 Issue。