我必须根据(排序的)集合的多个联合的交集来获得结果。
例如
Intersect(Union(A,B), Union(C,D), E)
这样做的明显方法是将 Union(A,B) 和 Union(C,D) 存储在临时集中并在最终的交集命令中使用它们。
但显然,这些临时集合需要一个名称,尽管 Redis 是单线程的,但如果我为它使用固定名称,我会遇到并发问题。
我的解决方案是在 MULTI/EXEC 块中执行整个“查询”(创建临时集,做我的交集,获取结果,删除临时键)。
显而易见的替代方法是不使用 MULTI/EXEC,而是为这些临时集使用足够随机的名称。
我的问题是:哪个是可取/最佳实践?
前者可能会带来性能(/其他线程的可用性)损失,但后者增加了复杂性并且不能保证不会导致并发问题。
还没有真正考虑过在 Lua 中做这件事,但我假设这会使它变得更加复杂。