其实很多人在面试过程中都有遇到面试官问分布式的实现?其实要回答这个问题,即使你从未做个分布式锁,但只要你能正确理解锁这个概念,其实也能回答出来。搞应用开发的的,主要还是思路问题。下面我们先来了解锁。
锁是一种共享资源,主要在多线程环境中使用。那么为什么会有锁?锁主要是解决并发环境中,某些资源能被正确的访问或修改,保证数据的正确性。在数据库中,锁从不同角度有多种叫法,比如:乐观锁(逻辑锁,通过数值来实现)、悲观锁(数据库锁);共享锁(select 并发度高)、排它锁(update、delete);行级锁、表锁。这些锁的出现都有一个共同特点,那就是粒度。因为锁会给系统带来瓶颈,所以在设计应用的过程中要注意这样的问题。那么在JAVA中,其实很多锁的设计思想都跟数据库很类似,比如:读锁(其实即使共享锁),写锁(排他锁);还有像ConcurrentHashMap使用了分段锁(相当于数据库的行级锁)。
好了,说了那么多废话。那么在分布式系统中,如果我们要设计一把分布式锁,该如果操作?如果把分布式系统中的每一个节点看成是一个线程,那么大家应该能想到怎么做了吧。我们所要做的就是寻找一个全局的共享资源,比如:redis、数据库、zookeeper等,但有个前提是,这些资源都是只有一个主。也就是说这些共享资源即使有多个节点,那么也只有一个节点是主节点,所有的数据都已这个主节点的为标准。只要把锁放在这样的资源里面,所有业务节点按照一定的规则来使用这把锁,那么任何时刻都能保证同锁只能被一个业务节点使用。
相关推荐
现在很多项目单机版已经不满足了,分布式变得越受欢迎,同时也带来很多问题,分布式锁也变得没那么容易实现,分享一个redis分布式锁工具类,里面的加锁采用lua脚本(脚本比较简单,采用java代码实现,无须外部调用...
主要介绍了Java基于redis实现分布式锁代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
分布式锁处理步骤 第一步:查询是否有分布式锁:
redis实现分布式锁,自旋式加锁,lua原子性解锁
Redis+RedisTemplate分布式锁
SpringBoot基于redis的分布式锁,有word使用文档,根据文档配置即可使用
003 redis分布式锁 jedis分布式锁 Redisson分布式锁 分段锁
redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现 redis实现分布式锁(java/jedis),其中包含工具方法以及使用demo 本资源是利用java的jedis实现
本资源为一步一步实现redis分布式锁的demo,利用redis实现高可用的分布式锁,规避各种坑、坑、坑!
分布式锁
自己整理的如何利用redis实现分布式锁,redis实现分布式锁看这一篇绝对够。
zookeeper做分布式锁
zookeeper通过使用curator实现分布式锁来保证数据的一致性。 zookeeper通过使用curator实现分布式锁来保证数据的一致性。
介绍分布式锁的机制以及业务场景,系统介绍了分布式基础的特性,比较系统介绍了锁和事务的区别,对开源的分布式锁如redis实现分布式锁的机制方案进行阐述
基于zookeeper的分布式锁简单实现,包含测试代码,实用工具类
redisson实现分布式锁,基于aop注解形式使用。
基于Redis方式实现分布式锁
让你对分布式锁理解透彻,基于数据库实现、基于Redis实现、基于ZooKeeper实现,三种分布式锁实现方案详解!
分布式锁的相关介绍,整理了常用的说明和相关使用,参考常见的分布式锁的使用
解决方案里面包括两个Console项目,一个是ZookeeperNet的基本使用,另一个是用ZookeeperNet实现分布式锁的实例。