我试图将评论存储在redis数据库中。我的数据结构:
z列表,我持有commentId。让我们commentId = 3。comment:3评论文本,ip,用户代理和评论时间。当我首先做zadd时,我从它得到最大Id,然后加上1-它将是新的Id。
当同时添加两个注释时,问题就开始了。它们都可以获得相同的Id,然后在散列表中可能丢失一个注释。
那么,如何在高并发性下不重复地计算newId呢?
发布于 2014-02-14 05:28:16
用Lua脚本包装您的两个步骤过程并调用它。因为redis是单线程的,所以lua脚本调用将被序列化(=无竞争条件)。
替代方案
或者,您可以将注释id存储在一个可以英格尔的单独键中。这样,即使没有在脚本中包装两个步骤,它也应该工作。
https://stackoverflow.com/questions/21771436
复制相似问题