zoukankan      html  css  js  c++  java
  • Reids 分布式锁使用

    //1.连接缓存
    Jedis jedis = JedisUtil.getJedis();
    //2.查询缓存,有直接返回  
    String redisValue = jedis.get(key);
    //3.缓存没有,设置分布式锁
    String token = UUID.randomUUID().toString();
    Strig OK = redis.set("Key100Lock",token,"nx","px",10);//nx 只当键不存在时,才进行设置,px设置10毫秒过期
    if(StringUtils.isNotBlank(OK)){//设置成功后
        MessageVo dbResult = getDB();//查询数据库
        if(dbResult!=nul){
            jedis.set("key100Info",JSON.toJSONString(MessageVo))//查询到数据写入到缓存中
        }else{
            jedis.setex("key100Info",60,"");//查询不到,防止缓存穿透,将空字符串设置给redis
        }
        String LockToken = jedis.get(“Key100Lock”);
        if(StringUtils.isNotBlank(LockToken)&&LockToken.equals(token)){
            //jedis.eval("lua"); 也可以用lua脚本,在查询到key同时,删除该key,防止高并发情况下意外发生
            redis.del("Key100Lock");//用token确认删除的是自己的锁
        }
    }
    else{//4.设置分布式锁失败,休眠几秒,尝试重新访问本方法
        try {
              Thread.sleep(3000);
            } catch (InterruptedException e) {
              log.error(e.getMessage());
        }
          return getRedi(skuId);
    }
  • 相关阅读:
    例行更新,防止被踢
    C语言 遍历磁盘目录
    析构函数的调用
    数组学习笔记
    函数学习笔记
    c++语言 纯虚函数的使用
    c++语言 内联方法
    复制构造函数
    c++语言 覆盖成员函数
    面向对象程序设计
  • 原文地址:https://www.cnblogs.com/fuyublog/p/11864783.html
Copyright © 2011-2022 走看看