【发布时间】:2021-08-01 03:25:00
【问题描述】:
我正在探索 Redis Steram [XREAD 和 XADD] 上的阻塞读取命令。使用 XREAD,我们可以获得执行 XADD 时释放的多客户端阻塞读取。 This
我观察到以下两种不同的行为:
案例:1
public static void main(String[] args){
Runnable t1 = new Runnable(){
public void run(){
function_to_read_block();
}
};
Runnable t2 = new Runnable(){
public void run(){
function_to_read_block();
}
};
new Thread(t1).start();
new Thread(t2).start();
}
在这种情况下,当在redis-cli上执行2个XADD命令时,获取的锁被释放。
对
案例:2
public class ClassA {
public static void main(String[] args){
function_to_read_block()
}
}
public class ClassB {
public static void main(String[] args){
function_to_read_block()
}
}
同时运行两个类,1 XADD 命令同时释放两个读锁。 [这也是我对案例 1 所期望的理想行为]
有人可以解释为什么这两种情况有区别吗?运行 2 个线程与运行 2 个单独的类同时调用同一个函数有何不同?
对于 redis,我使用的是 lettuce 库。 【同步RedisCluster连接】
【问题讨论】:
-
不知道 xadd 或 xread 但在情况 2 中,您基本上是在启动两个单独的应用程序。所以两者都有不同的应用程序上下文/堆栈。因此,由于这两个是两个独立的应用程序,它们永远不会相互了解,也不会阻塞,即同时运行。