请教一个问题,不同worker或者timer中并发调用redis数据安全的问题

131 views
Skip to first unread message

黄锐东

unread,
Aug 16, 2019, 11:32:23 PM8/16/19
to openresty
这个问题卡住几天了。
假如我有一段逻辑是:1、查询redis返回数据;2、修改数据;3、存入redis;如果我有两个worker,这两个worker是两个协程?那是不是会出现数据异常?
我启动了一个两个timer测试了这个问题确实是有的。这样的问题应该怎么解决呢?能不能像java一样启动专门的线程按队列执行?或者是redis加锁?

xiaobiao zhao

unread,
Aug 18, 2019, 1:04:24 AM8/18/19
to open...@googlegroups.com

黄锐东 <hrd...@foxmail.com> 于2019年8月17日周六 上午11:32写道:
这个问题卡住几天了。
假如我有一段逻辑是:1、查询redis返回数据;2、修改数据;3、存入redis;如果我有两个worker,这两个worker是两个协程?那是不是会出现数据异常?
我启动了一个两个timer测试了这个问题确实是有的。这样的问题应该怎么解决呢?能不能像java一样启动专门的线程按队列执行?或者是redis加锁?

--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty...@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+...@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
---
您收到此邮件是因为您订阅了Google网上论坛上的“openresty”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到openresty+...@googlegroups.com
要在网络上查看此讨论,请访问https://groups.google.com/d/msgid/openresty/01f12f5c-51dc-4004-9bc7-2802e204b826%40googlegroups.com

Dequan Zhang

unread,
Aug 18, 2019, 6:36:52 PM8/18/19
to open...@googlegroups.com
Openresty 有协程用的mutex lock, semaphore.

可以看文档使用。

更好的是尝试不使用share memory的设计。

Nick Xiao

unread,
Aug 26, 2019, 9:06:07 PM8/26/19
to open...@googlegroups.com
+1
限定只有一个 worker 做这个操作, 多个 coroutine 肯定没问题.

Jared Royal

unread,
Sep 17, 2019, 2:00:24 AM9/17/19
to openresty
用redis的 事务multiexec

在 2019年8月17日星期六 UTC+8上午11:32:23,黄锐东写道:
Reply all
Reply to author
Forward
0 new messages