数据库
首页 > 数据库> > redis排它锁

redis排它锁

作者:互联网

前言

因公司项目要求需要定时批量客户进行推送消息,此小项目为单体架构,非分布式项目,但是基于spring-session-data-redis做了session共享进行了多部署,客户的消息推送只能推一次。

 

可以将推送过的客户存入redis每次验证当前用户是否已经推送过,但是多项目定时任务中业务需要需要大量查询,所以为了减轻数据库的压力,使用redis做排它锁

 

redis排它锁:在多项目部署时,定时任务执行的时候只能由一个定时任务获取锁,其它定时任务等待,获取锁的执行完成后进行标记执行完毕,其它定时任务则跳过执行;

 

setIfAbsent:设置一个带有过期时间的key,如果设置成功,则获得了分布式锁,如果key已存在则等待,直到key过期。

 

1、创建redis工具类

@Component
public class RedisLockUtils {

    @Autowired
    private StringRedisTemplate redisTemplate;

    public boolean getLock(String lockKey, String dateTime,long millisecond) {
        //获取到锁
        Boolean success = redisTemplate.opsForValue().setIfAbsent(lockKey, "lock",millisecond, TimeUnit.MILLISECONDS);
        //判断标识是否存在,存在标识已经执行成功,删除锁
        if(redisTemplate.hasKey(lockKey+dateTi

标签:redis,key,排它,定时,推送,lockKey,redisTemplate
来源: https://blog.csdn.net/u010833154/article/details/117746382