XXXTemplate 是 Spring 的一大设计特色,其中,RedisTemplate 功能是提供对 Redis 的支持。
RedisTemplate 是 Spring Boot 访问 Redis 的核心组件,是 SpringBoot 集成 Redis 的客户端方式。它的底层通过 RedisConnectionFactory 对多种 Redis 驱动进行集成,上层通过 XXXOperations 提供丰富的 API,并结合 Spring 基于泛型的 bean 注入,未开发提供了极大的便利。
一、Redis 常用的数据类型
String:字符串类型,可以存储多种类型,如:字符串,JSON 串,二进制,序列化对象等;
Hash:key-value 结构,就像 Java 里的 Map,特别适合存储对象;
List:双端链表的结构,即可以作为栈,又可以作为队列,可以进行集合的头部或者尾部添加删除元素;
Set:Set 集合是 String 类型的无序集合,通过 hashtable 实现,可以对集合取交集,并集,差集;
Sorted set:是 String 类型的有序集合,并且,每个元素都会关联一个 double 类型的分数,Redis 通过分数可以为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。
二、RedisTemplate 常用方法
String 类型
1.1 判断是否有 key 所对应的值,有则返回 true,没有则返回 false;
redisTemplate.hasKey(key);
1.2 有则取出 key 值所对应的值;
redisTemplate.opsForValue().get(key);
1.3 删除单个 key 值;
redisTemplate.delete(key);
1.4 批量删除 key;
redisTemplate.delete(keys); //其中 keys:Collection keys
1.5 将当前传入的 key 值序列化为 byte[]类型;
redisTemplate.dump(key);
1.6 设置过期时间;
Boolean redisTemplate.expire(key, timeout, unit); // 多久以后过期
Boolean redisTemplate.expireAt(key, date); // Date date 具体过期时间
1.7 查找匹配的 key 值,返回一个 Set 集合类型( * 代表查询所有);
Set redisTemplate.keys(pattern); // pattern 为正则表达式
1.8 修改 redis 中 key 的名称;
void redisTemplate.rename(oldKey, newKey);
// 如果旧值存在时,将旧值改为新值
Boolean redisTemplate.renameIfAbsent(oldKey, newKey);
1.9 返回传入 key 所存储的值的类型;
DataType redisTemplate.type(key);
1.10 从 redis 中随机取出一个 key;
redisTemplate.randomKey();
1.11 返回当前 key 所对应的剩余过期时间;
Long redisTemplate.getExpire(key);
// TimeUnit unit 指定返回的时间的单位
Long redisTemplate.getExpire(key, unit);
1.12 将 key 持久化保存;
Boolean redisTemplate.persist(key);
1.13 将当前数据库的 key 移动到指定 redis 中数据库当中;
Boolean redisTemplate.move(key, dbIndex);
1.14 设置当前的 key 以及 value 值;
redisTemplate.opsForValue().set(key, value);
// 带过期时间 timeout,和时间单位 unit
redisTemplate.opsForValue().set(key, value, timeout, unit);
1.15 返回 key 中字符串 start~end 位置的子字符;
String redisTemplate.opsForValue().get(key, start, end);
1.16 将旧的 key 设置为 value,并且返回旧的 key;
String redisTemplate.opsForValue().getAndSet(key, value);
1.17 批量获取值;
List redisTemplate.opsForValue().multiGet(keys); // Collection keys
1.18 在原有的值基础上新增字符串到末尾;
redisTemplate.opsForValue().append(key, value);
1.19 给 key 对应的 value 值进行自增(正值则自增,负值则自减),如果该 key 没有 value 值,则默认为 0;
Double redisTemplate.opsForValue().increment(key, increment); // double increment
Long redisTemplate.opsForValue().increment(key, increment); // long increment
1.20 如果对应的 map 集合名称不存在,则添加否则不做修改;
Map valueMap = new HashMap();
valueMap.put(“valueMap1”,”map1”);
valueMap.put(“valueMap2”,”map2”);
valueMap.put(“valueMap3”,”map3”);
redisTemplate.opsForValue().multiSetIfAbsent(valueMap);
1.21 设置 map 集合到 redis;
Map valueMap = new HashMap();
valueMap.put(“valueMap1”,”map1”);
valueMap.put(“valueMap2”,”map2”);
valueMap.put(“valueMap3”,”map3”);
redisTemplate.opsForValue().multiSet(valueMap);
1.22 获取字符串的长度;
redisTemplate.opsForValue().size(key);
1.23 用 value 参数覆写给定 key 所储存的字符串值,从偏移量 offset 开始;
redisTemplate.opsForValue().set(key, value, offset);
1.24 重新设置 key 对应的值,如果存在返回 false,否则返回 true;
redisTemplate.opsForValue().setIfAbsent(key, value);
1.25 将值 value 关联到 key,并将 key 的过期时间设为 timeout;
redisTemplate.opsForValue().set(key, value, timeout, unit);
1.26 对 key 所储存的字符串值,获取指定偏移量上的位(bit);
redisTemplate.opsForValue().getBit(key, offset);
1.27 将二进制第 offset 位值变为 value;
redisTemplate.opsForValue().setBit(key, offset, value);
Hash 类型
2.1 以 map 集合的形式添加键值对;
redisTemplate.opsForHash().putAll(key, maps); // Map maps
2.2 获取变量中的键值对;
Map
Boolean redisTemplate.opsForHash().hasKey(key, field);
2.4 获取变量中的指定 map 键是否有值,如果存在该 map 键则获取值,没有则返回 null;
redisTemplate.opsForHash().get(key, field);
2.5 新增 hashMap 值;
redisTemplate.opsForHash().put(key, hashKey, value);
2.6 仅当 hashKey 不存在时才设置;
Boolean redisTemplate.opsForHash().putIfAbsent(key, hashKey, value);
2.7 删除一个或者多个 hash 表字段;
Long redisTemplate.opsForHash().delete(key, fields); // Object… fields
2.8 给哈希表 key 中的指定字段的整数值加上增量 increment;
public Double hIncrByDouble(String key, Object field, double delta) {
return redisTemplate.opsForHash().increment(key, field, delta);
}
public Long hashIncrBy(String key, Object field, long increment) {
return redisTemplate.opsForHash().increment(key, field, increment);
}
2.9 获取所有 hash 表中字段;
redisTemplate.opsForHash().keys(key);
2.10 获取 hash 表中字段的数量;
redisTemplate.opsForHash().size(key);
2.11 获取 hash 表中存在的多个值;
List