zoukankan      html  css  js  c++  java
  • redis入门到精通系列(六):redis的事务详解

    (一)事务的概念

    谈到数据库的高级应用,不可避免会谈到事务。熟悉mysql的朋友们对事务肯定不陌生,简单来讲事务就是控制一个数据库操作序列要么全部执行要么全部不执行。今天我们就来了解redis中的事务是如何执行和使用的。

    (二)redis事务的操作

    在mysql中,事务的执行通过以下三步:

    1. begin 开启事务
    2. commit 提交事务
    3. rollback 回滚操作

    而在redis中,事务的执行也主要有三步

    1. multi 开启事务 设定事务的开启位置,后续的所有指令均加入到该事务中
    2. exec 执行事务 设定事务的结束位置,同时开始执行事务
    3. discard 取消事务 取消该事务,放在multi和exec之间

     

    可以看到,当exec执行之后,事务中的所有指令才开始执行。

    (四)锁

    加锁是实现数据库并发控制的一个非常重要的技术,redis中同样存在锁机制。

    4.1 监视锁:

    1. //加锁
    2. watch key1 key2...
    3. //解锁
    4. unwatch

    对key添加监视锁,在执行exec之前如果key发生了变化,就会终止事务执行:

    在一个客户端中增加监视锁:

     

    此时在另一个客户端中修改name的值

     

    再执行事务会发现事务已经被终止了

     

    4.2 分布式锁:

    使用setnx设置一个公共锁

    1. 设置锁
    2. setnx lock-key value
    3. 解锁
    4. del lock-key

    对一个key设置公共锁之后,除了设置锁的人之外,其他人只能在外面等待,只有当解锁之后,其他人才能同样再去加锁

     

    其他人再想去加锁时就会失败

     4.3 死锁的解决方案

    当加锁之后由于宕机的问题没法解锁时,其他人就只能一直等待了。为了解决这个方案,我们可以为锁设置时间限定,如果时间到了还没释放锁,就由系统删除这把锁:

    1. expire lock-key second
    2. pexpire lock-key milliseconds

    由于操作通常是毫秒或者微秒级别的,所以锁时间不能设置太长。

  • 相关阅读:
    Verilog之阻塞赋值非阻塞赋值
    Verilog之case语句
    Verilog 分频器
    kvm虚拟化存储管理(3)
    kvm虚拟机管理(2)
    Kvm 虚拟化介绍(1)
    云计算 大数据 人工智能
    openstack核心组件——cinder存储服务(11)
    openstack核心组件——horizon Web管理界面(10)
    openstack核心组件——neutron网络服务 抓取ip(9)
  • 原文地址:https://www.cnblogs.com/edda/p/13068228.html
Copyright © 2011-2022 走看看