分布式锁和一些碎碎念

有些变量需要在不同服务器上实现同步,如果异步调用是需要对资源设置锁,保证数据的一致性的。

在正常情况下用线程锁就可以了,但是分布式情况下比较特殊。

有两种实现方法:

1、通过数据库插入删除操作作为分布式锁,如果想要对某个方法执行,需要向数据库中插入一条数据,

INSERT INTO method_lock (method_name, desc) VALUES ('methodName', '测试的methodName');

设置method_name的唯一性,这样就保证在并发量大的情况下无法同时操作同一个方法。

然后方法执行完再删除这条数据。

delete from method_lock where method_name ='methodName';

这种可能出现死锁问题,因此应定期对数据进行清理。

2、基于redis实现

(1)SETNX

SETNX key val:当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0。
1
(2)expire

expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。
1
(3)delete

delete key:删除key
 

博主还有一个zookeeper实现的方式,看的不是很懂,就不写了

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

然后就是不同服务器之间的时间同步问题,这个通常用ntp进行时间同步,大致就是设置一台服务器作为基准机器并部署ntp,然后部署其他机器为从机,有一个问题是

比如说有一个定时执行的脚本,现在从机的时间是13:00,而主机的时间是12:30,这个脚本中的任务是在12:40执行的,但是如果直接将时间进行同步,在丛机到12:40时的时候就会再次执行这个脚本,但是原则上这个东西在一天只能执行一次。

处理这个问题的方法,我看网上说的是有一个慢慢进行同步的方法,大概就是不直接将时间拉到13:00而是慢慢错位,移过去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值