如何在用户注册中使用redis处理并发写请求

时间:2013-11-07 07:19:17

标签: .net concurrency redis servicestack

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

1 个答案:

答案 0 :(得分:2)

你的问题就在那里:

  

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

Email列(或您使用的任何标识符)上放置唯一索引,您就完成了。不需要涉及redis。

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

Redis + Lua文档:EVAL command