对于我的应用程序,我将地图图像存储在外部存储器的缓存中,以减少对我正在使用的API的调用。由于此数据是地图数据,因此可能会随时间而变化。因此,这些图像应该经常更新。
如何定期以编程方式删除缓存目录?比方说,例如,每周。
一些额外的想法: 也许删除整个目录不是最好的方法。也许我可以检查每个图像的“新鲜度”,并删除旧图像?
答案 0 :(得分:2)
是的,使用某种方法或其他方法来限制缓存通常是个好主意。某些缓存具有固定大小,超过缓存大小后会删除较旧的内容。此大小可以是项目数或磁盘空间大小的计数。一些缓存有每个项目的TTL(或所有项目的相同TTL),因此项目在一定时间后过期。有些缓存可能永不过期。也许它的大小与首先缓存的可能项目的数量有关。这些方法中的任何一种都是有效的,尽管某些方法可能比某些方案更适合某些方案。
“新鲜”的想法可能是我考虑的一种方法。它与TTL相同。基本上,您希望设置缓存项目的生存时间长度。将此缓存时间与缓存数据一起存储,然后在读取缓存数据时进行检查。如果它超过了到期日期,您可以删除该缓存文件并再次从API检索地图数据(并缓存该缓存)。如果您不想单独存储日期并且在应用程序中具有硬编码或可配置的固定生命周期,那么您也可以只读取文件创建时间。
更新以发表评论
我之前也使用过散列URL作为文件名。请注意,存在冲突的可能性(当然,高度依赖于您的哈希算法和数据集)。此外,如果您要浏览大量URL,则哈希算法的性能也可能很重要。
将缓存元数据存储在文本文件中很好,特别是如果您没有大量的URL。您需要注意如何更新该文本文件。如果您不小心并且在没有正确同步的情况下从多个线程访问它,您可能很容易损坏它。如果您有大量数据,则可以考虑的另一个选项是使用数据库。如果将此缓存元数据存储在文件中(无论是数据库还是文本文件),则可以通过对文件名使用不同的方案来避免散列的所有问题。例如,您可以以十六进制或基数36递增。