感觉redis的事务就是个批处理而已啊。。。
而且说2.6以后可以执行lua脚本了,那原来的事务就更没啥用处了?
第一次用nginx+lua,搞个开房间的逻辑,在加入房间前检查是否人满的判断上,做得很蛋疼
因为可能2个人同时进一个快满的房间,但他们的请求在不同的进程处理,这就会有并发问题
因为“检查人数是不是满了;然后把自己加进去”这个逻辑必须是原子的
如果不用redis的内嵌lua脚本搞定这问题,纯在nginx端解决的话,就变成这样:
1.客户端A、B分别连上它们的服务端websocket:WA、WB
2.A建主,B加入,则WB收到请求时,不能自己去操作redis里由list表示的房间,因为如果这样就会有WC、WD同时操作,并发冲突的问题
3.于是只好WB通过redis给WA发消息,WA作为主机,是惟一操作房间数据的人才不会有冲突,然后WA把结果发给WB,WB再发给客户端B
4.在这种模式下,WB成了一个中转站。。而且凭空多了好多交互协议。。
难道用nginx这种分布式宿主,就意味着大量的内部捣腾把数据转来转去吗。。。