前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >redis锁等待随机毫秒数拦截和程序自动过期双重机制

redis锁等待随机毫秒数拦截和程序自动过期双重机制

作者头像
oktokeep
发布2024-11-28 09:10:59
发布2024-11-28 09:10:59
7400
代码可运行
举报
文章被收录于专栏:第三方工具
运行总次数:0
代码可运行

redis锁等待随机毫秒数拦截和程序自动过期双重机制

上一个操作加了锁,需要等待上一个操作执行完毕之后,才允许当前操作执行,所以当前操作需要执行锁等待处理。

代码语言:javascript
代码运行次数:0
复制
package com.example.core.mydemo.javaDemo;

import java.time.LocalDateTime;

public class RandomTest {
    public static void main(String[] args) {
        //1秒以内的随机毫秒数
        for (int i = 0; i < 10;i++) {
            long time = (long) (Math.random() * 1000);
            System.out.println("time=" + time);
        }

//        String redisKey = "myKey:" + dto.getOrdernumber();
//        Boolean haskey = stringRedisTemplate.hasKey(redisKey);
        Boolean hasKey = true;

        LocalDateTime startTime = LocalDateTime.now();
        LocalDateTime endTime = startTime.plusSeconds(5);

            //已被锁定,直接返回,等待
            while (hasKey && (startTime.isBefore(endTime) || startTime.isEqual(endTime)) ) {
                try {
                    long time = (long) (Math.random() * 1000);
                    Thread.sleep(time);
                    //重新查询
//                    haskey = stringRedisTemplate.hasKey(redisKey);
                    //重新刷新时间
                    startTime = LocalDateTime.now();
//                    log.info("判断锁存在,orderNo=[{}],haskey=[{}],waitTime=[{}]",dto.getOrdernumber(),haskey,time);
                    System.out.println("waitTime="+time+",startTime="+startTime+",endTime="+endTime);

                } catch (InterruptedException e) {
//                    log.error("exceotion:",e);
                    e.printStackTrace();
                }
            }

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档