> 文章列表 > 4.redis-事务和管道

4.redis-事务和管道

4.redis-事务和管道

目录

一.事务

  1.特性

  2.命令

二.管道 pipe

  1.操作

  2.与原生批量命令对比

  4.注意事项


一.事务

  1.特性

    1) 单独的隔离操作

      Redis的事务仅仅是保证事务里的操作会被连续独占得执行,redis命令执行是单线程架构,在执行完事事务内所有指令是不可能再去同时执行其他客户端的请求

    2) 没有隔离级别的概念

  在事务外查询可以看到要更新的数据

    3) 不保证原子性

    所有指令同时成功或同时失败,没有回滚的能力

    4) 排他性

     保证一个事务内的命令依次执行,而不会被其他命令插入

  2.命令

    1) 正常

multi 开启事务

exec 提交

    2) 放弃

multi 开启事务

discard 

    3) 如果命令是语法类的错误会全部回滚,但语法没错编译出错,像数据类型不应该有的操作,不会全部回滚,正确的会继续提交。

    4) watch 监控, 命令没有执行前,有其他连接修改了此key,那么事务中所有操作失败

watch key1

multi

exec

    5) unwatch 中途放弃监控,就可避免4)的情况

watch key1

unwatch

multi

exec

二.管道 pipe

  1.操作

    1) 写批处理 vi cmd.txt

set k100 v100

set k200 v200

hset k300.name atgugu

hset k300.age 20

lpush list 1 2 3 4 5

    2) 管道执行

cat cmd.txt | redis-cli -a 111111 --pipe

  2.与原生批量命令对比

    1) 原生批量命令是原子性,管道是非原子性

    2) 原生批量命令一次只能执行一种命令,管道支持批量执行不同命令

    3) 原生批量命令是服务端实现,而管道需要服务器与客户端共同完成

  3.与事务对比

    1) 事务具有原子性,管道不具有原子性

    2) 管道一次性将多条命令发送到服务器,事务是逐条发,事务只有在接收到exec命令后才会执行

    3) 执行事务时会阻塞其他命令,而执行管道中的命令时不会

  4.注意事项

    1) 命令不要太多,否则占用内存

    2) 没有原子性,一个失败其他命令会继续执行