问题标签 [distributed-lock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
89 浏览

sql-server - SQL Server:分布式锁如何检查

我试图弄清楚如果有一个给定名称的锁,如何查询 SQL Server,也就是有一个锁。

这是正确的,因为它似乎过于复杂?

跑步

返回

在另一个选项卡中运行它:

返回

那么检查是否持有锁的方法是什么?

进行这种检查似乎是一种奇怪的方式。

我一直在看

https://www.mssqltips.com/sqlservertip/3202/prevent-multiple-users-from-running-the-same-sql-server-stored-procedure-at-the-same-time/ https://github。 com/madelson/DistributedLock/blob/5bd69af3f151710825f43ea1379a619a1b63ca1a/DistributedLock.SqlServer/SqlApplicationLock.cs#L164 https://www.endyourif.com/preventing-race-conditions-with-sp_getapplock/

和更多..

无论使用何种连接,请协助 SQL Server 检查当前是否存在锁。

0 投票
0 回答
56 浏览

mysql - 如何使用分布式锁和SQL事务对购物车中的商品列表进行库存减少以确保一致性

问题:

  • 我写了一个Sell()函数来减少用户购物车中清单商品的库存。假设这些商品在一秒钟内会有数千个请求。由于我们需要提高吞吐量,并确保服务不会因压力或网络错误等而关闭。我们将库存服务部署在多个服务器中。这里我们有一个用于库存服务的数据库。
  1. 我们需要交易,因为我们有一份正在处理的货物清单,如果其中一件货物未能减少库存,我们必须回滚。
  2. 我们需要一个Redis 分布式锁来确保数据的一致性。一次只有一个线程/例程会访问/更改特定商品的信息。

由于我们需要将循环放在和之间start transactioncommit()以确保事务的属性。我们必须在事务之前锁定并在提交之后解锁。但这会使事务序列化。我正在尝试使用细粒度的 Redis 锁,基本上每个商品都使用其 ID 生成锁。显然我的代码是错误的。我知道可能还有其他选项,例如乐观锁悲观锁。但是我如何用 Redis 锁来实现这个想法呢?

我将其简化如下:

go中的演示代码:

0 投票
0 回答
20 浏览

concurrency - 使用 SQL 数据库的锁定服务

我需要同步对在不同主机上运行的不同进程修改的共享资源的并发访问。我正在考虑通过在 sql 数据库中创建一个锁表来同步这一点,该表可以从可以访问数据库的服务中访问。所有进程将首先向服务请求锁,只有获得锁的进程才会继续并更改共享资源。进程将在计算后释放锁。锁表将保存当前持有锁的进程的主机、pid、锁创建时间等信息,以便在当前持有锁的进程意外死亡并且其他进程请求锁时清除锁。

我不倾向于基于 zookeeper 的解决方案,因为我的情况下的流量很小(一天内可能运行 2-5 个进程,因此并发访问的可能性已经很小),所以我不考虑维护单独的服务锁定,但通过在其数据库中添加一个附加表来扩展现有服务本身。

我想要关于这种方法的建议,或者是否有其他更简单的解决方案来解决这个问题。

0 投票
0 回答
18 浏览

redis - ERR WAIT 不能与从属实例 Redisson 一起使用

<redisson.version>3.16.3</redisson.version> readMode: SLAVE

不知道为什么我会看到这个错误。

原因:org.redisson.client.RedisException:ERR WAIT 不能与从属实例一起使用。另请注意,由于 Redis 4.0 如果从站配置为可写(这不是默认设置),则对从站的写入只是本地的并且不会传播.. 通道:[id:0x90c58500,L:/172.16.189.108:43192 - R:10.112.94.132/10.112.94.132:15003] 命令:(等待),承诺:RedissonPromise [promise=ImmediateEventExecutor$ImmediatePromise@35eeb35e(incomplete)],参数:[1, 1000] at org.redisson.client.handler。 CommandDecoder.decode(CommandDecoder.java:370) at org.redisson.client.handler.CommandDecoder.decodeCommandBatch(CommandDecoder.java:271) at org.redisson.client.handler.CommandDecoder.decodeCommand(CommandDecoder.java:210) at org .redisson.client.handler.CommandDecoder.decode(CommandDecoder.java:137) 在 org.redisson.client.handler.CommandDecoder。