【发布时间】:2020-11-18 19:12:26
【问题描述】:
我试图了解node-cache 包是否对缓存对象使用了锁并且找不到任何东西。
我试图查看源代码,但它看起来不像,但 this answer 建议与引用相反:
所以内存锁有 Redis 和节点缓存。
此缓存用于 CRUD 服务器,我想确保 GET/UPDATE 请求不会对数据造成竞争条件。
【问题讨论】:
-
你自己去看the source code了吗?
-
正如我所说,我看了,确实不像,但我想知道是否可能由于其他人的评论而遗漏了什么,还有一些小测试我这样做确实让它看起来像是被锁定了
-
我没有看到任何锁定代码的证据。如果对不在缓存中的相同键的两个请求一个接一个地发出,那么它将启动两个单独的
fetch()操作,并且最后返回的请求将保留在缓存中。通常可能不是问题,但改进的实现可以只对同一个键发出一个请求,而第二个请求只是等待第一个请求提供值。 -
由于缓存本身都是在内存中的,所有对缓存的访问都是同步的,因此受 Javascript 的单线程特性的约束。因此,并发问题可能会影响缓存代码本身的唯一地方是它们启动异步
fetch()操作时。当然,在如何使用访问数据的代码时,会出现竞争条件,就像使用数据库接口一样,因此调用代码必须对竞争性的事情很聪明。