ibireme / YYCache

High performance cache framework for iOS.
MIT License
2.37k stars 505 forks source link

缓存同时执行读取操作失败的问题 #72

Open z-shu07 opened 8 years ago

z-shu07 commented 8 years ago

由于使用的异步存储的方法,但是经常发生执行读区操作的同时执行存储操作导致了读区数据为 nil,有没有办法 在读区操作执行时 如果正在写入, 等待写入结束再读取,而不是返回 nil

ibireme commented 8 years ago

所有的 memoryCache 操作都是同步的,所以如果用 YYCache 或者 YYMemoryCache 的接口,应该不会出现这种情况。如果只用 YYDiskCache,那这个可能难以避免,你说的那种办法,实现起来很麻烦而且对性能也会有影响。

如果你自己封装了异步调用的方法,那可以把所有读取和写入操作都放到一个 serial queue 里,这样也能避免数据不同步的问题。

z-shu07 commented 8 years ago
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

这样就是导致我这个问题出现的原因么?

ibireme commented 8 years ago

这个 queue 是并发的...

我不清楚你的使用方法,贴一下你的相关代码看看吧。