在 RedisTemplate 中,定义了几个 execute() 方法,这些方法是 RedisTemplate 的核心方法。RedisTemplate 中很多其他方法均是通过调用 execute 来执行具体的操作。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
上述方法是 RedisTemplate 中 delete 方法的源码,它就是使用 execute() 来执行具体的删除操作(即调用 connection.del(rawKeys) 方法)。
方法说明如下表:
方法定义 | 方法说明 |
<T> T execute(RedisCallback<T> action) | 在 Redis 连接中执行给定的操作 |
<T> T execute(RedisCallback<T> action, boolean exposeConnection) | 在连接中执行给定的操作对象,可以公开也可以不公开。 |
<T> T execute(RedisCallback<T> action, boolean exposeConnection, boolean pipeline) | 在可以公开或不公开的连接中执行给定的操作对象。 |
<T> T execute(RedisScript<T> script, List<K> keys, Object... args) | 执行给定的 RedisScript |
<T> T execute(RedisScript<T> script, RedisSerializer<?> argsSerializer, RedisSerializer<T> resultSerializer, List<K> keys, Object... args) | 执行给定的 RedisScript,使用提供的 RedisSerializers 序列化脚本参数和结果。 |
<T> T execute(SessionCallback<T> session) | 执行 Redis 会话 |
示例
execute(RedisCallback) 简单用法
使用 RedisTemplate 直接调用 opsFor** 来操作 Redis 数据库,每执行一条命令是要重新拿一个连接,因此很耗资源。如果让一个连接直接执行多条语句的方法就是使用 RedisCallback(它太复杂,不常用),推荐使用 SessionCallback。
本例将演示使用 RedisCallback 向 Redis 写入数据,然后再将写入的数据取出来,输出到控制台。如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
|
运行示例,输出结果如下:
1 |
|
其实,在 RedisTemplate 中,其他很多方法均是通过调用 execute() 方法来实现,只是不同的方法实现不同的回调接口。部分源码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
execute(SessionCallback) 简单用法
使用 RedisTemplate 直接调用 opsFor** 来操作 Redis 数据库,每执行一条命令是要重新拿一个连接,因此很耗资源。如果让一个连接直接执行多条语句的方法就是使用 SessionCallback,还可以使用 RedisCallback(它太复杂,不常用)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
运行示例,输出如下:
1 2 |
|
execute(RedisScript) 简单用法
该示例使用 Lua 脚本实现获取锁的功能,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
|
运行示例,输出如下:
1 2 |
|