我现在有一张类似于下面这样的数据库表:
| id | name | is_used |
|---|---|---|
| 1 | name1 | 1 |
| 2 | name2 | 0 |
is_used 字段用来标记该条数据是否已经被使用过了。
客户端会向服务器请求可用数据,服务端返回一条可用的数据,即is_used 字段为 false。同时设置该条数据为已使用状态,即设置is_used 字段为 true。
在这个过程中,如何确保两个客户端不会获取到同一条数据呢?会不会出现前一个请求的数据库操作中还未完成设置该条数据is_used 字段为 true的操作,而这是后一个请求到达,导致返回了同一条数据的情况?如果会的话,有没有什么好的办法解决呢?
我现在考虑的是,通过同步 http 请求或者是将数据预先放在一个缓存队列中,然后从队列中同步的读取数据。不知道大家有没有好的方案?多谢指教。
环境:Express、PostgreSQL, orm 使用 Sequelize。