zoukankan      html  css  js  c++  java
  • Redis锁

    1、Redis锁(分布式锁有多种,redis只是其中一种实现,核心:加锁,解锁,锁超时,可用于分布式场景和单机场景

      。适用于在分布式系统中,实现不同线程对资源和代码的同步访问——分布式锁)

      1、1两个命令

      SETNX:SET if Not eXist——假如不存在,设置,返回1;否则返回0,说明已经存在,并且设置失败;

      GETSET:GET and SET ——先get得到值,然后set新值

      1.2 使用redis作为分布式锁

      在(业务层)关键代码前加锁,代码后解锁。

      1.3 可能产生死锁

      若仅仅只调用SETIfAbsent()判断是否加锁成功,则有可能产生死锁。如,如果拿到锁的线程在释放锁之前发生了异常,则不会达到释放锁的语句,那么其他的线程始终拿不到锁的资源,

      造成死锁。

      所以需要采用GETSET方法,给key设置一个时间戳,为当前时间+过期时间。

      问题1:getAndSet这个redis命令,两个线程是不会同时get的吗?

      答:不会,Redis是单线程的。

    一回生,二回熟
  • 相关阅读:
    华为机试练习(一)
    LM拟合算法
    5.1 模块化程序设计
    第3周 运算的流程控制
    KEGG数据库介绍
    topGO
    GO.db
    Bioconductor应用领域之基因芯片
    org.Hs.eg.db包简介(转换NCBI、ensemble等数据库中基因ID,symbol等之间的转换)
    Bioconductor的历史
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12642806.html
Copyright © 2011-2022 走看看