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 "欢迎光临";
        }
    
    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    C++11 std标准库chrono获取系统时间戳
    求取激光光斑质心
    Windows多网卡UDP广播问题
    IP地址分类
    C++各种时间的含义、区别和相互转换
    MFC中控件显示提示信息tooltip
    IP地址 网关 子网掩码之间的关系
    MFC动态添加菜单选项
    opencv函数学习:rotate()的使用
    opencv函数学习:flip()的使用
  • 原文地址:https://www.cnblogs.com/javayida/p/13347033.html
Copyright © 2011-2022 走看看