节点缓存是否使用锁



我正在尝试了解node-cache包是否对缓存对象使用了锁,并且找不到任何内容。

我试着查看源代码,但它看起来不像,但这个答案表明:

所以有Redis和用于内存锁的节点缓存。

此缓存用于CRUD服务器,我希望确保GET/UPDATE请求不会在数据上创建竞争条件。

我在代码中没有看到任何锁定的证据。

如果对不在缓存中的同一密钥的两个请求相继发出,则它将启动两个单独的fetch()操作,最后返回的请求将保留在缓存中。这通常可能不是问题,但改进的实现可以只对同一个密钥发出一个请求,而让第二个请求只等待第一个请求来提供已经在运行的值。

由于缓存本身都在内存中,所以对缓存的所有访问都是同步的,因此受Javascript的单线程特性的约束。因此,并发问题唯一可能影响缓存代码本身的地方是当它们启动异步fetch()操作时。

当然,在如何使用访问数据的代码方面,就像使用数据库接口一样,也存在竞争条件,因此调用代码必须明智地使用接口,以避免因其调用事物的方式而产生竞争条件。

不幸的是,没有,你可以写一个单元测试来确认它

我写了一个库来解决这个问题,还添加了read-through方法来简化代码的使用:https://github.com/KhanhPham2411/node-cache-async-lock

最新更新