1. 简介
RedisTemplate 是 Spring Data Redis 提供给用户的最高级的抽象客户端,用户可直接通过 RedisTemplate进行多种操作。
1.1 类继承关系
public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware {
}
- RedisAccessor:Base class for RedisTemplate defining common properties. Not intended to be used directly.
RedisTemplate 定义通用属性的基类。不打算直接使用。 - RedisOperations:Interface that specified a basic set of Redis operations, implemented by RedisTemplate. Not often used but a useful option for extensibility and testability (as it can be easily mocked or stubbed).
指定一组基本 Redis 操作的接口,由 RedisTemplate 实现。不经常使用,但对于可扩展性和可测试性来说是一个有用的选项(因为它可以很容易地被模拟或存根)。 - BeanClassLoaderAware:Callback that allows a bean to be aware of the bean class loader; that is, the class loader used by the present bean factory to load bean classes. This is mainly intended to be implemented by framework classes which have to pick up application classes by name despite themselves potentially being loaded from a shared class loader.
允许 bean 知道 bean 类加载器的回调;也就是当前bean工厂用来加载bean类的类加载器。这主要是由框架类实现的,这些框架类必须按名称选择应用程序类,尽管它们可能是从共享类加载器加载的。
1.2 方法
// 配置默认序列化与反序列化工具类
2.afterPropertiesSet
// 根据参数执行相关operation操作,例如,事务
3.execute
// 执行pipelining流水线相关操作
4.executePipelined
// 执行指定connection连接的相关操作
5.executeWithStickyConnection
// 执行session内的execute方法
6.executeSession
// 创建RedisConnection代理类
7.createRedisConnectionProxy
// connection连接的预处理
8.preProcessConnection
// 结果的后处理,默认什么都不做
9.postProcessResult
// 是否向RedisCallback暴露本地连接
10.isExposeConnection
// 设置是否向RedisCallback暴露本地连接
11.setExposeConnection
// 12到26都是设置和获取相关序列化工具类
12.isEnableDefaultSerializer
13.setEnableDefaultSerializer
14.getDefaultSerializer
15.setDefaultSerializer
16.setKeySerializer
17.getKeySerializer
18.setValueSerializer
19.getValueSerializer
20.getHashKeySerializer
21.setHashKeySerializer
22.getHashValueSerializer
23.setHashValueSerializer
24.getStringSerializer
25.setStringSerializer
26.setScriptExecutor
// 27到34为私有方法,不对外提供使用
27.rawKey
28.rawString
29.rawValue
30.rawKeys
31.deserializeKey
32.deserializeMixedResults
33.deserializeSet
34.convertTupleValues
// 执行事务
35.exec
36.execRaw
// 删除操作
37.delete
// 接触链接
38.unlink
// 查看是否含有指定key
39.hasKey
40.countExistingKeys
// 设置过期时间
41.expire
42.expireAt
// 转换成字节流并向channel发送message
43.convertAndSend
// 获取过期时间
44.getExpire
// 根据传入的正则表达式返回所有的key
46.keys
// 取消指定key的过期时间
47.persist
// 移动指定的key和index到数据库中
48.move
// 从键空间随机获取一个key
49.randomKey
// 将指定key改成目标key
50.rename
// key不存在时,将指定key改成目标key
51.renameIfAbsent
// 设置存储在指定key的类型
52.type
// 检索存储在key的值的序列化版本
53.dump
// 执行Redis的restore的命令
54.restore
// 标记事务阻塞的开始
55.multi
// 丢弃所有在multi之后发出的命令
56.discard
// 观察指定key在事务处理开始即multi之后的修改情况
57.watch
// 刷新先前观察的所有key
58.unwatch
// 为key元素排序
59.sort
// 关闭客户端连接
60.killClient
// 请求连接客户端的相关信息和统计数据
61.getClientList
// 更改复制配置到新的master
62.slaveOf
// 将本机更改为master
63.slaveOfNoOne
// 64到79都是获取相对应的操作
64.opsForCluster
65.opsForGeo
66.boundGeoOps
67.boundHashOps
68.opsForHash
69.opsForHyperLogLog
70.opsForList
71.boundListOps
72.boundSetOps
73.opsForSet
74.opsForStream
75.boundStreamOps
76.boundValueOps
77.opsForValue
78.boundZSetOps
79.opsForZSet
// 设置是否支持事务
80.setEnableTransactionSupport
// 设置bean的类加载器
81.setBeanClassLoader
1.3 功能介绍
spring-data-redis 提供了如下功能:
-
连接池自动管理,提供了一个高度封装的“RedisTemplate”类
-
进行了归类封装,将同一类型操作封装为operation接口
-
提供了对 key 的“bound”(绑定)便捷化操作API,可以通过bound封装指定的key,然后进行一系列的操作而无须“显式”的再次指定Key,即 BoundKeyOperations
-
将事务操作封装,有容器控制。
-
针对数据的“序列化/反序列化”,提供了多种可选择策略(RedisSerializer)
如果你的数据需要被第三方工具解析,那么数据应该使用StringRedisSerializer而不是 JdkSerializationRedisSerializer。
2. RedisTemplate 顶层方法
- 确定给定 key 是否存在,有的话就返回 true,没有就返回 false
redisTemplate.hasKey(K key)
- 删除给定的 key
redisTemplate.delete(K key)
- 删除给定 key 的集合
redisTemplate.delete(Collection<K> keys)
- 执行 Redis 转储命令并返回结果,把key值序列化成byte[]类型
redisTemplate.dump(K key)
- 对传入的key值设置过期时间、将给定 key 的过期时间设置为日期时间戳
redisTemplate.expire(K key, long timeout, TimeUnit unit) redisTemplate.expireAt(K key, Date date)
- 查找与给定模式匹配的所有 key ,返回的是一个没有重复的Set类型
redisTemplate.keys(K pattern)
- 将 oldKey 重命名为 newKey。
redisTemplate.rename(K oldKey, K newKey)
- 获取key值的类型
redisTemplate. type(K key)
- 仅当 newKey 不存在时,才将密钥 oldKey 重命名为 newKey。
redisTemplate.renameIfAbsent(K oldKey, K newKey)
- 随机从redis中获取一个key
redisTemplate.randomKey()
- 获取当前key的剩下的过期时间
redisTemplate.getExpire(K key)
- 获取剩余的过期时间,同时设置时间单位
redisTemplate. getExpire(K key, TimeUnit timeUnit)
- 删除 key 的过期时间
redisTemplate. persist(K key)
- 将给定的 key 移动到带有索引的数据库
redisTemplate. move(K key, int dbIndex)
3. RedisTemplate.opsForValue() 方法
- 设置key跟value的值
redisTemplate.opsForValue().set(K key, V value)
- 获取 key 的值
redisTemplate.opsForValue().get(Object key)
- 设置key跟value的值,同时设置过期时间
redisTemplate.opsForValue().set(K key, V value, Duration timeout)
- 在 start 和 end 之间获取键值的子字符串
redisTemplate.opsForValue().get(K key, long start, long end)
- 设置 key 的值并返回其旧值
redisTemplate.opsForValue().getAndSet(K key, V value)
- 获取多个 key
redisTemplate.opsForValue().multiGet(Collection<K> keys)
- 获取原来的key的值后在后面新增上新的字符串
redisTemplate.opsForValue().append(K key, String value)
- 增量方式增加double值
redisTemplate.opsForValue().increment(K key, double increment)
- 通过increment(K key, long delta)方法以增量方式存储long值(正值则自增,负值则自减)
redisTemplate.opsForValue().increment(K key, long increment)
- 仅当提供的 key 不存在时,才使用集合中提供的键值对将多个 key 设置为多个值。
redisTemplate.opsForValue().multiSetIfAbsent(Map<? extends K,? extends V> map)
- 使用集合中提供的键值对将多个 key 设置为多个值。
Map map = new HashMap(); map.put("1","1"); map.put("2","2"); map.put("3","3"); redisTemplate.opsForValue().multiSet(Map<? extends K,? extends V> map)
- 获取指定key的字符串的长度
redisTemplate.opsForValue().size(K key)
- 用给定值覆盖从指定偏移量开始的 key 的部分。
redisTemplate.opsForValue().set(K key, V value, long offset)
- 如果 key 不存在,则设置 key 以保存字符串值,存在返回false,否则返回true
redisTemplate.opsForValue().setIfAbsent(key, value)
- 重新设置key的值并加入过期时间
redisTemplate.opsForValue().set(key, value, timeout, unit)
- 将二进制第offset位值变为value
redisTemplate.opsForValue().setBit(K key, long offset, boolean value)
- 对key所储存的字符串值,获取指定偏移量上的位(bit)
redisTemplate.opsForValue().getBit(K key, long offset)
4. RedisTemplate.opsForHash() 方法
- 从 key 处的 hash 中获取给定 hashKey 的值,即 key field(hashKey) value
redisTemplate.opsForHash().get(H key, Object hashKey)
- 获取存储在 key 的整个 hash,即获取所有值
redisTemplate.opsForHash().entries(H key)
- 设置hash hashKey 的值
redisTemplate.opsForHash().put(H key, HK hashKey, HV value)
- 使用 m 中提供的数据将多个 hash 字段设置为多个值,即使用 map 进行赋值
redisTemplate.opsForHash().putAll(H key, Map<? extends HK,? extends HV> m)
- 仅当 hashKey 不存在时才设置 hash hashKey 的值。
redisTemplate.opsForHash().putIfAbsent(H key, HK hashKey, HV value)
- 删除给定的hash hashKeys
redisTemplate.opsForHash().delete(H key, Object... hashKeys)
- 确定给定的hash hashKey 是否存在
redisTemplate.opsForHash().hasKey(H key, Object hashKey)
- 通过给定的增量增加hash hashKey 的值
redisTemplate.opsForHash().increment(H key, HK hashKey, double increment) redisTemplate.opsForHash().increment(H key, HK hashKey, long increment)
- 在 key 处获取 hash 的 hashKey 集(字段)
redisTemplate.opsForHash().keys(H key)
- 获取 key 的 hash 大小。
redisTemplate.opsForHash().size(H key)
- 在 key 处获取 hash 的值
redisTemplate.opsForHash().values(H key)
- 查看匹配的键值对
redisTemplate.opsForHash().scan(H key, ScanOptions options)
5. RedisTemplate.opsForList() 方法
- 根据索引获取list中的值
redisTemplate.opsForList().index(key, index)
- 获取list中开始索引到结束索引的所有值
redisTemplate.opsForList().range(key, start, end)
- 把值添加在list的最前面
redisTemplate.opsForList().leftPush(key, value)
- 直接把一个新的list添加到老的list上面去
redisTemplate.opsForList().leftPushAll(key, value)
- List存在的时候就加入新的值
redisTemplate.opsForList().leftPushIfPresent(key, value)
- 在pivot值的索引的前面加上一个值
redisTemplate.opsForList().leftPush(key, pivot, value)
- 按照先进先出的顺序来添加
redisTemplate.opsForList().rightPush(key,value)redisTemplate.opsForList().rightPushAll(key, value)
- 在pivot元素的后面添加值
redisTemplate.opsForList().rightPush(key, pivot, value)
- 设置指定索引的值
redisTemplate.opsForList().set(key, index, value)
- 移除并获取列表中第一个元素
redisTemplate.opsForList().leftPop(key)redisTemplate.opsForList().leftPop(key, timeout, unit)
- 移除并获取列表最后一个元素
redisTemplate.opsForList().rightPop(key)redisTemplate.opsForList().rightPop(key, timeout, unit)
- 从一个队列的右边弹出一个元素并将这个元素放入另一个指定队列的最左边
redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey) redisTemplate.opsForList().rightPopAndLeftPush(sourceKey, destinationKey, timeout, unit)
- 删除集合中值等于value的元素
redisTemplate.opsForList().remove(key, index, value)
- 剪裁List列表
redisTemplate.opsForList().trim(key, start, end)
- 获取list的大小
redisTemplate.opsForList().size(key)
6. RedisTemplate.opsForSet() 方法
- 添加元素
redisTemplate.opsForSet().add(key, values)
- 移除元素
redisTemplate.opsForSet().remove(key, values)
- 删除一个随机元素,并返回来
redisTemplate.opsForSet().pop(key)
- 获取集合的大小
redisTemplate.opsForSet().size(key)
- 判断集合中是否存在value值
redisTemplate.opsForSet().isMember(key, value)
- 获取两个集合的交集并返回一个集合
redisTemplate.opsForSet().intersect(key, otherKey)
- 获取key集合与otherKey集合的两个交集,并存储到destKey
redisTemplate.opsForSet().intersectAndStore(key, otherKey, destKey)
- key集合与多个集合的交集存储到destKey无序集合中
redisTemplate.opsForSet().intersectAndStore(key, otherKeys, destKey)
- 获取多个集合的并集
redisTemplate.opsForSet().union(key, otherKeys)
- 获取多个集合的并集并存储到destKey
redisTemplate.opsForSet().unionAndStore(key, otherKey, destKey)
- 获取差集
redisTemplate.opsForSet().difference(key, otherKeys)
- 获取差集并存储到destKey
redisTemplate.opsForSet().differenceAndStore(key, otherKey, destKey)
- 随机获取集合中的一个元素
redisTemplate.opsForSet().randomMember(key)
- 获取集合中的所有元素
redisTemplate.opsForSet().members(key)
- 随机获取集合中count个值
redisTemplate.opsForSet().randomMembers(key, count)
- 随机获取集合中count个值,但是去重
redisTemplate.opsForSet().distinctRandomMembers(key, count)
- 遍历set
redisTemplate.opsForSet().scan(key, options)
7. RedisTemplate.opsForZSet() 方法
- 添加元素,从小到大排序
redisTemplate.opsForZSet().add(key, value, score)
- 删除多个values的值
redisTemplate.opsForZSet().remove(key, values)
- 增加元素的score值同时返回增加后的值
redisTemplate.opsForZSet().incrementScore(key, value, delta)
- 返回元素在集合的从小到大排名
redisTemplate.opsForZSet().rank(key, value)
- 返回元素在集合的由大到小排名
redisTemplate.opsForZSet().reverseRank(key, value)
- 获取集合中指定区间的元素
redisTemplate.opsForZSet().reverseRangeWithScores(key, start,end)
- 查询集合中的元素并从小到大排序
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max) redisTemplate.opsForZSet().reverseRangeByScoreWithScores(key, min, max)
- 从高到低的排序,然后获取最小与最大值之间的值
redisTemplate.opsForZSet().reverseRangeByScore(key, min, max, start, end)
- 根据score值获取元素数量
redisTemplate.opsForZSet().incrementScore(key, value, delta)
- 获取集合的大小
redisTemplate.opsForZSet().size(key)redisTemplate.opsForZSet().zCard(key)
- 获取集合中key、value元素的score值
redisTemplate.opsForZSet().score(key, value)
- 移除指定索引元素
redisTemplate.opsForZSet().removeRange(key, start, end)
- 移除指定score范围的集合成员
redisTemplate.opsForZSet().removeRangeByScore(key, min, max)
- 获取key和otherKey的并集并存储在destKey中
redisTemplate.opsForZSet().unionAndStore(key, otherKey, destKey)
- 获取key和otherKey的交集并存储在destKey中
redisTemplate.opsForZSet().intersectAndStore(key, otherKey, destKey)