1

当我想在注册模块中使用 redis 时遇到问题。这是一个 asp.net 网站,而不是 MVC。用户提交邮箱和手机号后即可在我的网站上注册。我的应用程序将验证新用户是否唯一。验证管道验证 SQL 服务器中的数据,如果有很多并发注册操作,它将向 SQL 插入两个相同的数据,为了解决这个问题,我使用 redis 缓存注册动作。当注册动作开始时,第一步,我们检查redis,如果redis中不存在redis请求,则将其插入redis,如果有相同的请求,则返回false。我使用ServiceStack.Redis,它是.net 的redis 客户端。我的问题是:如果两个相同的请求操作redis,我们定义它们是A和B。A发现它不存在相同的请求,然后B发现它也不存在相同的请求,然后A尝试在redis中设置值,但是B也尝试了同样的事情。redis处理过这种情况吗?redis中并发两个写请求如何处理?我应该使用 set 还是 hash 来存储用户注册数据?

4

1 回答 1

2

你的问题就在那里:

如果有很多并发注册动作,它会在SQL中插入两个相同的数据

将唯一索引放在Email列(或您使用的任何标识符)上,您就完成了。没有必要让 redis 参与其中。

如果你仍然想使用 redis,你可以利用它的 Lua 支持。也就是说,您将拥有一个函数来检查密钥的存在并在它丢失时插入它(或执行与注册过程相关的其他工作)。

Redis+Lua 文档:EVAL 命令

于 2013-11-07T07:23:31.540 回答