nodejs 环境下 redis如何保证异步set数据,数据不会被覆盖?

发布于 2022-09-11 17:42:16 字数 584 浏览 12 评论 0

使用了express作为服务端框架,然后使用redis来存储一些数据。

发现一个问题,一直想不明白。

比如 A 在 time 2:31:11:00 时发送ajax请求,该请求修改redis里某个数据,B在time 2:31:11:02时发送ajax请求修改redis里的某个数据。

于是服务器开始了如下操作

2:31:11:00 POST updateData user = A;
2:31:11:01 POST updateData user = B;
2:31:11:01 服务器拉取redis里的某个集合 (A的请求);
2:31:11:02 服务器拉取redis里的某个集合 (B的请求);
2:31:11:02 服务器该集合里关于用户A的数据被修改;
2:31:11:03 服务器该集合里关于用户B的数据被修改;
2:31:11:03 服务器把修改过A的数据集合重新更新到redis上;
2:31:11:04 服务器把修改过B的数据集合重新更新到redis上;

这样下来,不是redis上的数据变成只有B修改,A没有修改吗?

nodejs是执行代码单线程,是不是说如果A.B一前一后请求,先处理完A的,再处理B的?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枯叶蝶 2022-09-18 17:42:16

https://youyu4.iteye.com/blog...
又读了一遍,我的理解有问题(当成mongodb了),你的理解没问题,可以大致当成localStorage来理解(能存的东西花样更多)
设计表就是设计key,表应该设计成这样

{
    "room:1:seat1:ready":true,
    "room:1:seat1:userid":1,
    "room:1:seat2:ready":false,
    "room:1:seat2:userid":2,
    ...
}

你看这里存储seat1和seat2的准备状态的key是不同的,所以不会冲突

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文