当前位置:Gxlcms > redis > 关于Redis事务和pipleline

关于Redis事务和pipleline

时间:2021-07-01 10:21:17 帮助过:35人阅读

下面由Redis教程栏目给大家介绍关于Redis事务和pipleline,希望对需要的朋友有所帮助!

1、reidis事务

Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证:

  • 批量操作在发送 EXEC 命令前被放入队列缓存。
  • 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。
  • 在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

一个事务从开始到执行会经历以下三个阶段:

  • 开始事务。
  • 命令入队。
  • 执行事务。

MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令:

1、事务执行

image

2、watch

监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断。

imageimage

3、discard

取消事务,放弃执行事务块内的所有命令。

image

2、jedis代码

1、配置支持事务

  1. template.setEnableTransactionSupport(true);
  1. <br>

2、代码:


  1. redisTemplate.opsForValue().set("aaa", 321);
  2. redisTemplate.watch("aaa");
  3. redisTemplate.multi();
  4. redisTemplate.opsForValue().set("aaa", 123);
  5. redisTemplate.opsForValue().set("bbb", 123);
  6. redisTemplate.exec();

3、pipleline

jedis 代码:


  1. Map<String, Object> map = new HashMap<>();
  2. map.put("aaa", 111);
  3. map.put("bbb", 222);
  4. map.put("ccc", 3333);
  5. List list = redisTemplate.executePipelined(new RedisCallback<Object>() {
  6. @Override
  7. public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
  8. redisConnection.openPipeline(); for (Map.Entry<String, Object> mapEntry : map.entrySet()) {
  9. redisConnection.set(redisTemplate.getKeySerializer().serialize(mapEntry.getKey()), redisTemplate.getValueSerializer().serialize(mapEntry.getValue()));
  10. } return null;
  11. }
  12. }, redisTemplate.getValueSerializer());
  13. System.out.println(redisUtil.get("aaa"));
  14. System.out.println(redisUtil.get("bbb"));
  15. System.out.println(redisUtil.get("ccc"));

以上就是关于Redis事务和pipleline的详细内容,更多请关注gxlcms其它相关文章!

人气教程排行