龙空技术网

分布式锁的三种实现方式,数据库、Redis、ZK,各有千秋谁与争锋

计职小帮手 645

前言:

此刻各位老铁们对“分布式和分布式锁”大致比较关心,你们都需要剖析一些“分布式和分布式锁”的相关内容。那么小编在网络上搜集了一些对于“分布式和分布式锁””的相关资讯,希望姐妹们能喜欢,你们快快来学习一下吧!

如今的程序员,要求越来越高了,没有人再提Struts了,也没有人再提Hibernate了,甚至Spring MVC写在简历里都成了减分项。

分布式已然成为当前的主流技术,分布式锁就是其中的重要知识点,面试中也经常问到,一起来梳理下吧。

数据库实现方式(简单实用)

一般情况下,生产环境用一台服务器实现应用部署的,几乎已经找不到了。而对于500万以下的用户规模来说,数据库也不需要做分库分表,这种情况下,用数据库来实现分布式锁,无疑是最佳的选择。

数据库实现锁的方法比较直观,易于理解,主要思路就是入库时,产生唯一的限制导致插入失败。

主要有:

1、设置主键

2、设置唯一索引

3、主键+开始时间+结束时间的组合索引

针对第三种方式还可以通过定时任务的方式,删除多长时间的数据,从而达到释放数据库资源的效果

Redis实现锁

Redis缓存技术,已成为分布式系统中的主要技术之一,它不但可以用于缓存数据,实现锁也是一把好手。

主要命令:SETNX key value

实现逻辑,可以对某个业务的Key进行加锁,并设置过期时间,如果在过期时间内业务没有执行完,则以watch dog方式,对超时时间续期。

ZK+数据库

ZK实现锁有一个特点,即对每一个请求会产生一个自增的编号,这应用到锁上面可以说是有天然优势的。

而为了防止,超时,重启,或服务器挂了,导致编号丢失的问题,可引入数据库存储,保证业务的执行仅能有一次成功。

好啦,这三种分布式锁,仅是初版,后面还有好多个优化方式,如Redis挂了怎么办,数据库有分库分表怎么实现,等一系列的问题,大家有答案吗?

欢迎留言,你们是用的哪种技术实现的分布式锁。

标签: #分布式和分布式锁