zoukankan      html  css  js  c++  java
  • redis实现简单的分布式锁

    看到很多人使用redis做分布式锁,公司中有简单的使用redis做分布式锁,
    我们需要怎样的分布式锁

    • 可以保证在分布式部署的应用集群中,同一个方法在同一时间只能被一台机器-上的一个线程执行。
    • 这把锁要是一把可重入锁(避免死锁)
    • 这把锁最好是一把阻塞锁(根据业务需求考虑要不要这条)
    • 这把锁最好是一把公平锁(根据业务需求考虑要不要这条)
    • 有高可用的获取锁和释放锁功能
    • 获取锁和释放锁的性能要好
      举个简单的栗子,发送验证码,防止用户重复点击,说简单也就是表单的重复提交:
      我使用的是setIfAbsent方法:这个方法就是先判断对应的key有没有,如果没有就加进去,2.1版本之后可以指定过期时间,添加成功返回true
      在这里插入图片描述
      失败返回false
      在这里插入图片描述
      通过这个方法我们就可以实现一个简单的锁了:
      在这里插入图片描述
      测试方法:
       @GetMapping("/testLock/{userId}")
        public String testLock(@PathVariable("userId") Integer userId) {
            //每个用户 每五秒请求一次
            Boolean aBoolean = stringRedisTemplate.opsForValue().setIfAbsent(userId+"", "das",3L, TimeUnit.SECONDS);
            if (!aBoolean) {
                return "请求速度太快了...";
            }
            return "欢迎光临";
        }
    
    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    Code first常用命令
    vue问题集锦
    net WebConfig读写
    CefSharp使用心得
    工作问题
    工作总结
    HttpContext.Current.Session为null
    Java基础00-接口组成更新31
    Java基础00-Lamda表达式30
    Java基础00-网络编程29
  • 原文地址:https://www.cnblogs.com/javayida/p/13347033.html
Copyright © 2011-2022 走看看