目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

JAVA全系列 教程

3762个小节阅读:7094.2k

收藏
全部开发者教程

C语言快速入门

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(22)
赞(0)

分布式锁解决方案

在项目中,分布式锁的解决方案有以下几种:

基于数据库实现的分布式锁

  1. 数据库乐观锁:在秒杀商品表中添加version字段。查询秒杀商品时,获取当前version。更新时,修改version字段,并判断version号是否等于之前获得的version号,如果不等于,证明在更新操作时,有别的线程修改了数据库,此时更新失败。
  2. 数据库悲观锁:在数据库查询秒杀商品时的sql语句后添加for update,即可防止修改秒杀商品库存期间,有别的线程修改数据库。

我们的秒杀商品数据不在数据库中保存,而在redis中保存,所以这些基于数据库实现的分布式锁都不可用。

基于Zookeeper实现分布式锁

我们也可以通过创建Zookeper临时顺序节点实现分布式锁。但我们的项目中并没有使用Zookeeper,所以也不用这种方案

基于Redis实现分布式锁

使用Redis来实现分布式锁的效率最高,加锁速度最快,因为Redis几乎都是纯内存操作,而基于数据库的方案和基于Zookeeper的方案都会涉及到磁盘文件IO,效率相对低下。所以在开发过程中,最常用的分布式锁方案就是使用Redis的SETNX命令实现分布式锁。SETNX即只有在键不存在时,才能设置键。我们在秒杀时,必须要设置秒杀商品id的键,此时键已经存在,别人无法设置秒杀商品id,也就不能进行秒杀,这就相当于加锁。等我们秒杀结束,删除秒杀商品id的键,别人又可以设置秒杀商品id,别人可以进行秒杀,这就相当于解锁。

我们用这种方式,可以很优雅的为代码设置分布式锁。

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2