在一些大的互联网平台,通常都会使用定时任务处理一些周期性的业务,而为了保障系统的高可用性,定时任务也会多节点部署,而解决多节点并发问题(分布式锁),大家通常会想到使用缓存,如redis,但是如果使用set / get是无法解决问题的,同样会出现并发问题,redis有专门的解决分布式并发问题的方法,就是setnx命令,很好用,下面介绍一下java实现redis分布式锁的方法。
1. Redis SETNX命令语法:
SETNX 是『SET if Not eXists』(如果不存在,则 SET)的简写,其操作为:将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。
返回值:
设置成功,返回 1 。
设置失败,返回 0 。
SetNX 不具备设置过期时间的功能,所以我们需要借助 Expire 来设置,否则可能会出现死锁问题。
2. 环境说明
是基于 spring boot的项目,这是一个项目中多节点定时扣费任务的实现。
3. 配置实现
3.1. 定时任务
@Component
@EnableScheduling
public class QuartzCharge {
Logger logger = LogManager.getLogger("quartzCharge");
@Autowired