• Redis事务


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

    1、批量操作在发送exec命令前被放入队列缓存。

    2、收到exec命令后进入事务执行,事务中任意命令执行失败,其余的命令依然被执行。

    3、在事务执行过程,其他客户端提交的命令请求不会插入到事务执行命令序列中。

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

    (1)开始事务

    (2)命令入队

    (3)执行事务。

    实例:一下是一个事务的例子,它现已MULTI开始一个事务,然后将多个命令入队到事务中,最后exec命令触发事务,一并执行事务中的所有命令:

     1 127.0.0.1:6379> multi
     2 OK
     3 127.0.0.1:6379> set book_name "english"
     4 QUEUED
     5 127.0.0.1:6379> get book_name
     6 QUEUED
     7 127.0.0.1:6379> sadd tag "C++" "Python" "Java" "C" "c#"
     8 QUEUED
     9 127.0.0.1:6379> smembers tag
    10 QUEUED
    11 127.0.0.1:6379> exec
    12 1) OK
    13 2) "english"
    14 3) (integer) 5
    15 4) 1) "C"
    16    2) "Python"
    17    3) "Java"
    18    4) "C++"
    19    5) "c#"
    20 127.0.0.1:6379> keys *
    21 1) "tag"
    22 2) "book_name"
    View Code

     

    redis事务命令

    discard命令

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

    discard命令基本语法:discard

    返回值:总是返回OK

    实例:

     1 127.0.0.1:6379> multi
     2 OK
     3 127.0.0.1:6379> ping
     4 QUEUED
     5 127.0.0.1:6379> set greeting "hello"
     6 QUEUED
     7 127.0.0.1:6379> discard #执行discard命令,事务块内的所有命令放弃执行
     8 OK
     9 127.0.0.1:6379> exec  #执行discard命令后,在执行exec命令报错
    10 (error) ERR EXEC without MULTI
    View Code

    exec命令

    用于执行素有事务块内的命令

    exec命令基本语法:exec

    返回值:事务块内所有命令的返回值,按命令执行的先后顺序排列,当操作被打断时,返回空值nil.

    实例:

     1 127.0.0.1:6379> multi
     2 OK
     3 127.0.0.1:6379> incr user_id
     4 QUEUED
     5 127.0.0.1:6379> incr user_id
     6 QUEUED
     7 127.0.0.1:6379> incr user_id
     8 QUEUED
     9 127.0.0.1:6379> ping
    10 QUEUED
    11 127.0.0.1:6379> exec
    12 1) (integer) 1
    13 2) (integer) 2
    14 3) (integer) 3
    15 4) PONG
    16 127.0.0.1:6379> keys *
    17 1) "user_id"
    18 127.0.0.1:6379> get user_id
    19 "3"
    View Code

    multi命令

    该命令用于标记一个事务块的开始,事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由exec命令原子性(atomic)地执行。

    基本语法:multi

    返回值:总是返回OK

    实例:

     1 127.0.0.1:6379> multi
     2 OK
     3 127.0.0.1:6379> incr user_id
     4 QUEUED
     5 127.0.0.1:6379> incr user_id
     6 QUEUED
     7 127.0.0.1:6379> incr user_id
     8 QUEUED
     9 127.0.0.1:6379> ping
    10 QUEUED
    11 127.0.0.1:6379> exec
    12 1) (integer) 1
    13 2) (integer) 2
    14 3) (integer) 3
    15 4) PONG
    View Code

    UNwatch命令

    命令用于取消watch命令对所有key的监视。

    基本语法:UNwatch

    返回值:总是返回OK

    实例:

    1 127.0.0.1:6379> watch lock lock_times
    2 OK
    3 127.0.0.1:6379> unwatch
    4 OK
    View Code

    watch命令

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

    基本语法:watch  key  【key...】

    返回值:总是返回OK

    实例:

     1 127.0.0.1:6379> watch lock lock_times 2 OK 

  • 相关阅读:
    张照行 的第九次作业
    张照行 的第八次作业
    Learning by doing
    张照行 的第七次作业
    张照行 的第六次作业
    Java第七次作业
    java第五次作业
    Java第七次作业
    Java第六次课后作业
    第五次Java作业
  • 原文地址:https://www.cnblogs.com/sd880413/p/8252739.html
Copyright © 2020-2023  润新知