zoukankan      html  css  js  c++  java
  • Redis学习(二)

    1、Redis事务

    事务介绍

    • Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成。
    • Redis的单个命令都是原子性的,所以这里确保事务性的对象是命令集合。
    • Redis将命令集合序列化并确保处于一事务的命令集合连续且不被打断的执行。
    • Redis不支持回滚的操作。

    相关命令

    • MULTI

        注:用于标记事务块的开始。

        Redis会将后续的命令逐个放入队列中,然后使用EXEC命令原子化地执行这个命令序列。

        语法:MULTI

    • EXEC

        在一个事务中执行所有先前放入队列的命令,然后恢复正常的连接状态。

        语法:EXEC

    • DISCARD

        清楚所有先前在一个事务中放入队列的命令,然后恢复正常的连接状态。

        语法:DISCARD

    • WATCH

        当某个事务需要按条件执行时,就要使用这个命令将给定的键设置为受监控的状态。

        语法:WATCH key [key ....]

        注:该命令可以实现redis的乐观锁

    • UNWATCH

        清除所有先前为一个事务监控的键。

        语法:UNWATCH

     事务失败处理

    • Redis语法错误(编译器错误)
    • Redis类型错误(运行期错误)

    为什么redis不支持事务回滚?

    1. 大多数事务失败是因为语法错误或者类型错误,这两种错误,再开发阶段都是可以避免的
    2. Redis为了性能方面就忽略了事务回滚

    Redis实现分布式锁

    锁的处理

      单应用中使用锁:单线程多线程

        synchronize、Lock

      分布式应用中使用锁:多进程

    分布式锁的实现方式

    1. 数据库的乐观锁
    2. 给予zookeeper的分布式锁
    3. 给予redis的分布式锁

    分布式锁的注意事项

    1. 互斥性:在任意时刻,只有一个客户端能持有锁
    2. 同一性:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解了。
    3. 避免死锁:即使有一个客户端在持有锁的期间崩溃而没有主动解锁,也能保证后续其他客户端能加锁。

    实现分布式锁

    获取锁

  • 相关阅读:
    C#和Modbus通信工程
    C#中JS和Flash中AS 3.0通信交互
    创建型-建造者模式(Builder)
    结构型-享元模式(Flyweight)
    行为型-模板方法模式(Template Method)
    创建型-原型模式(Prototype)
    行为型-状态模式(State)
    结构型-桥接模式(Bridge)
    行为型-中介者模式(Mediator)
    行为型-备忘录模式(Memento)
  • 原文地址:https://www.cnblogs.com/su-ke/p/13889236.html
Copyright © 2011-2022 走看看