redis排它锁

前言因公司项目要求需要对一定时间内未修改信息的用户发送提醒邮件,此小项目为单体架构,非分布式项目,但是基于spring-session-data-redis做了session共享,
摘要由CSDN通过智能技术生成

前言

因公司项目要求需要定时批量客户进行推送消息,此小项目为单体架构,非分布式项目,但是基于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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值