Redis分布式锁

导读:本篇文章讲解 Redis分布式锁,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

概述

随着业务发展的需要,原单体单机部署的系统被演化成分布式集群系统后,由于分布式系统多线程、多进程并且分布在不同机器上,这将使原单机部署情况下的并发控制锁策略失效,单纯的Java API并不能提供分布式锁的能力。为了解决这个问题就需要一种跨JVM的互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题。
分布式锁主流的实现方案:

  1. 基于数据库实现分布式锁。
  2. 基于缓存(Redis等)。
  3. 基于Zookeeper。
    每一种分布式锁解决方案都有各自的优缺点:
  • 性能:redis最高。
  • 可靠性:zookeeper最高。
    这里,我们就基于redis实现分布式锁。

解决方案

redis:命令。

# set sku:1:info "OK" NX PX 1000

命令解析
EX second:设置键的过期时间为second秒。SET key value EX second效果等同于SETEX key second value。
PX millisecond:设置键的过期时间为millisecond毫秒。SET key value PX millisecond效果等同于PSETEX key millisecond value。
NX:只在键不存在时,才对键进行设置操作。SET key value NX效果等同于SETNX key value。
XX:只在键已经存在时,才对键进行设置操作。
在这里插入图片描述

方案优化之UUID防误删

  • 设置key为10s过期。
    在这里插入图片描述
  • set key uuid nx ex 30,value的值使用uuid。
    在这里插入图片描述

方案之LUA脚本保证多redis命令原子性

redis集群支持Lua脚本。
使用redisTemplate集群模式下执行lua脚本报错的问题解决过程
redis集群执行lua

参考

分布式锁解决方案

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/100029.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!