分布式锁三种解决方案

分布式系统中,为了解决执行代码片段/或者任务的唯一性,提出了分布式锁的概念

目前常用的有三种实现方式

1:基于redis的实现

2:基于zk的实现

3:基于db的实现

final DbDistributedLockTemplate template = new DbDistributedLockTemplate();
    
    public void init(){
        template.execute("shchgateway", 2000, new Callback() {
            
            @Override
            public Object onTimeout() throws InterruptedException {
                // TODO Auto-generated method stub
                return null;
            }
            
            @Override
            public Object onGetLock() throws InterruptedException {
                // TODO Auto-generated method stub
                return null;
            }
        });
    }

原文地址:https://www.cnblogs.com/lhl-shubiao/p/10729465.html

时间: 2024-10-04 11:18:19

分布式锁三种解决方案的相关文章

分布式锁三种实现方式(数据库实现,缓存Redis等,Zookeeper)

分布式锁三种实现方式: 1. 基于数据库实现分布式锁: 2. 基于缓存(Redis等)实现分布式锁: 3. 基于Zookeeper实现分布式锁: 一, 基于数据库实现分布式锁 1. 悲观锁 利用select … where … for update 排他锁 注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock ”,name字段必须要走索引,否则会锁表.有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题. 2. 乐观锁 所谓乐观锁与前边最大区别在

关于Ubuntu中E: Could not get lock /var/lib/dpkg/lock - open的三种解决方案

问题 在Ubuntu中,有时候运用sudo  apt-get install 安装软件时,会出现如下的情况: E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable) E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it? 三种解决方案 这是由于apt

记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务. 问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视.原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!! 我尝试解决该问题,so,有个这个日志. 方案概述 方案一:优化现有mysql数据库.优点:不影响现有业务

一次MySQL两千万数据大表的优化过程,三种解决方案

问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务. 问题前提:老系统,当时设计系统的人大概是大学没毕业,表设计和sql语句写的不仅仅是垃圾,简直无法直视.原开发人员都已离职,到我来维护,这就是传说中的维护不了就跑路,然后我就是掉坑的那个!!! 我尝试解决该问题,so,有个这个日志. 方案概述 方案一:优化现有mysql数据库.优点:不影响现有业务

VS发布网站时,报错提示:“未能将文件xxx复制到xxx,未能找到文件xx”三种解决方案!

发布网站时候大家可能会遇到这样的情况,就是报错提示说:"未能将文件xxx复制到xxx,未能找到文件xx",这个问题一般来说有三种解决方案,个人倾向第三种,如图: 解决方案如下: 方案一.把系统提示缺失的文件重新放入相对应的文件夹中,然后再发布.但是如果时间久了文件自己都找不到的话这个方案不推荐: 方案二.删除".csproj"项目文件中的 < Content Include>相对应参数行,用"ctrl+f"找到后一个一个删除即可.如果

Android 跨进程启动Activity黑屏(白屏)的三种解决方案

原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activity.为什么没会出现这种情况呢?真正元凶就是Android创建进程需要准备很多资源,它是一个耗时的操作. 黑屏(白屏)原因 当A进程启动B进程中的一个Activity时,Android系统会先有zygo

Mybatis传多个参数(三种解决方案)

第一种方案 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_area=#{1} </select> 其中,#{0}代表接收的是da

MyBatis学习总结_19_Mybatis传多个参数(三种解决方案)

据我目前接触到的传多个参数的方案有三种. 第一种方案  DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t where user_name = #{0} and user_area=#{1} </sele

Mybatis传多个参数(三种解决方案)

据我目前接触到的传多个参数的方案有三种. 第一种方案 DAO层的函数方法 ? 1 PublicUserselectUser(Stringname,String area); 对应的Mapper.xml ? 1 2 3 <selectid="selectUser"resultMap="BaseResultMap"> select * fromuser_user_t  whereuser_name = #{0}anduser_area=#{1} </s