【发布时间】:2014-06-30 21:54:03
【问题描述】:
我在一个 NodeJS 实例上使用 SocketIO,它有一个到 Redis 缓存的连接。此缓存被用作在实时环境中维护状态的一种手段。
我的前提包括并发问题可能会由于发生大量事务而发生,但是,我不确定我需要解决哪些并发问题...
我的初始设计使用 Lua 脚本和 EVAL(使用 EVAL 调用的脚本被认为是 Redis 的原子事务)来实现对给定键的状态的检查,但除此之外我不是确定我是否需要在其他任何地方实现锁。
我主要关心的是当 SocketIO 捕获一个连接并随后执行一个事件时,我能保证在该事件中发生的 Redis EVAL 什么。一个具体的用例:
1) 客户端 A 发出一个被服务器捕获的事件
2) 服务器执行请求的事件,包括调用EVAL Redis 上的 Lua 脚本
3) 客户端 B 发出一个被服务器捕获的事件
4) 服务器执行请求的事件,其中包括调用EVAL Redis 上不同的 Lua 脚本
由于 NodeJS 的异步特性,我是否可以假设来自客户端 A 的 EVAL 将始终在客户端 B 之前被 Redis 服务器接收?我对事件循环的理解完全错误吗?
【问题讨论】:
标签: node.js concurrency redis socket.io