点击关注公众号:互联网架构师,后台回复 2T获取2TB学习资源!

上一篇:Alibaba开源内网高并发编程手册.pdf

一、业务背景

有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。

二、分析流程

使用 Redis 作为分布式锁,将锁的状态放到 Redis 统一维护,解决集群中单机 JVM 信息不互通的问题,规定操作顺序,保护用户的数据正确。

梳理设计流程

  1. 新建注解 @interface,在注解里设定入参标志

  2. 增加 AOP 切点,扫描特定注解

  3. 建立 @Aspect 切面任务,注册 bean 和拦截特定方法

  4. 特定方法参数 ProceedingJoinPoint,对方法 pjp.proceed() 前后进行拦截

  5. 切点前进行加锁,任务执行后进行删除 key

核心步骤:加锁、解锁和续时

加锁

使用了 RedisTemplate 的 opsForValue.setIfAbsent 方法,判断是否有 key,设定一个随机数 UUID.random().toString,生成一个随机数作为 value。

从 redis 中获取锁之后,对 key 设定 expire 失效时间,到期后自动释放锁。

按照这种设计,只有第一个成功设定 Key 的请求,才能进行后续的数据操作,后续其它请求由于无法获得

Spring Boot + Redis 实现分布式锁,还有谁不会??相关推荐

  1. Spring Boot Redis 实现分布式锁,真香!!

    之前看很多人手写分布式锁,其实 Spring Boot 现在已经做的足够好了,开箱即用,支持主流的 Redis.Zookeeper 中间件,另外还支持 JDBC. 本篇栈长以 Redis 为例(这也是 ...

  2. Spring Boot Redis 实现分布式锁,真香

    之前看很多人手写分布式锁,其实 Spring Boot 现在已经做的足够好了,开箱即用,支持主流的 Redis.Zookeeper 中间件,另外还支持 JDBC. 本篇栈长以 Redis 为例(这也是 ...

  3. Spring Boot Redis 实现分布式锁,真香,你掌握了多少?

    org.springframework.boot spring-boot-starter-integration org.springframework.integration spring-inte ...

  4. redis setnx 分布式锁_Spring Boot 整合 Redis 正确的实现分布式锁

    前言 最近在做分块上传的业务,使用到了Redis来维护上传过程中的分块编号. 每上传完成一个分块就获取一下文件的分块集合,加入新上传的编号,手动接口测试下是没有问题的,前端通过并发上传调用就出现问题了 ...

  5. Redis实现分布式锁的深入探究

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.分布式锁简介 锁 是一种用来解决多个执行线程 访问共享资源 错 ...

  6. Spring Boot Redis 入门

    本文,我们基于 Spring Boot 2.X 版本. 1. 概述 在快速入门 Spring Boot 整合 Redis 之前,我们先来做个简单的了解.在 Spring 的生态中,我们使用 Sprin ...

  7. redis使用sysc超时_基于redis的分布式锁实现

    随着业务越来越复杂,应用服务都会朝着分布式.集群方向部署,而分布式CAP原则告诉我们,Consistency(一致性). Availability(可用性).Partition tolerance(分 ...

  8. 用 Redis 实现分布式锁(Java 版)

    用 Redis 实现分布式锁(Java 版) 核心代码 完整代码   分布式锁是一种解决分布式临界资源并发读写的一种技术.本文详细介绍了在 Java 中使用 Redis 实现分布式锁的方法.为了方便, ...

  9. 基于Redis实现分布式锁实战

    背景 在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户 ...

最新文章

  1. Selector选择器概述||Selector选择器组合使用
  2. 项目开发中经常有一些被嫌弃的小数据,现在全丢给 FastDFS
  3. Asp.Net Core实战
  4. 大白话带你梳理一下Dubbo的那些事儿
  5. weblogic 12C集群环境下的session复制
  6. Python 操作 PDF 的几种方法
  7. 攻防世界misc新手_攻防世界密码学解密
  8. 孤独星球android app,《孤独星球》终于出了全套免费的旅行指南APP!
  9. 什么猫猫最受欢迎?Python采集猫咪交易数据
  10. linux系统硬盘设置密码,linux下硬盘加密
  11. F - 恐怖分子 CodeForces - 514B
  12. 比特熊故事汇独家|英特尔“非典型性女博士”的大跨步人生
  13. ubuntu 访问群晖NAS存储硬盘
  14. 【CS224n】(lecture7)机器翻译NMT,seq2seq和attention
  15. Chrome解析JSON工具
  16. python生成一笔画_python求解微信小游戏——一笔画完
  17. 幼儿使用计算机需要注意事项,计算机在幼儿一日生活中的运用
  18. 关于“量变”和“质变”的圣贤语录与辩证思考
  19. 虚幻引擎(9)-AI随机移动
  20. 不需要分层的双层车牌识别新方案

热门文章

  1. xyz-AC 五轴正反解推导过程
  2. 手机计算机数据消失了怎么恢复,手机没有备份怎么恢复数据
  3. GAGE Razor系列PCI/PCIe采集卡
  4. Python数据采集案例(4):B站UP主发布视频信息采集
  5. 解决微信小程序中new Date()转换时间时间格式时IOS不兼容的问题
  6. 雷神电脑装linux双系统,雷神911Target(双显卡)双系统Ubuntu安装显卡驱动和CUDA
  7. PKS生态服务平台使用指南-适配篇
  8. linux搜索域怎么填,在 Mac 上输入 DNS 和搜索域设置
  9. Python练习册,每天一个小程序(十七)
  10. 详解Minimal Web API的使用