【发布时间】:2015-03-05 20:04:54
【问题描述】:
想象以下场景:
- 客户端 #1 从 Redis 请求对象 A
- Redis 以 null 回答
- 客户端 #1 从数据库请求对象 A
- 数据库返回对象A
- 客户端 #1 将对象 A 存储在 Redis 中
一切正常。让我们在 4 到 5 之间添加另一个客户端:
- 客户端 #1 从 Redis 请求对象 A
- Redis 以 null 回答
- 客户端 #1 从数据库请求对象 A
-
数据库返回对象 A
- 客户端 #2 从 Redis 请求对象 A
- Redis 以 null 回答
- 客户端 #2 从数据库请求对象 A
- 数据库返回对象A
- 客户端 #2 将对象 A 存储在 Redis 中
- 客户端 #2 更新数据库和 Redis 中的对象 A
- 客户端 #1 将对象 A 存储在 Redis 中
现在对象 A 在数据库中是最新的,但在 Redis 中已过时。是否有任何模式可以防止这种行为?显然,在等待 Redis 存储其副本时锁定数据库不是解决方案。
我还应该注意我正在使用 NodeJS,它维护一个固定大小的 Redis 连接池,并且请求是异步处理的,所以我们不能假设来自不同客户端的查询顺序不会在单个连接中混合.
【问题讨论】:
标签: database node.js caching redis