zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    数据结构化与保存
    使用正则表达式,取得点击次数,函数抽离
    爬取校园新闻首页的新闻
    网络爬虫基础练习
    词频统计
    试题----编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个
    试题---求出现重现次数最多的字母,如有多个重复的则都求出来
    试题----为什么Java的string类要设成immutable(不可变的)
    面试题---题目
    复制文件夹中所有内容到指定位置
  • 原文地址:https://www.cnblogs.com/sd880413/p/8252739.html
Copyright © 2011-2022 走看看