对于我的应用程序,我将地图图像存储在外部存储器的缓存中,以减少对我正在使用的API的调用。由于这些数据是地图数据,因此它可能会随着时间的推移而改变。因此这些图像应该每隔一次更新一次。
如何以编程方式定期删除缓存目录?比如说,每周一次。
一些额外的想法:也许删除整个目录并不是最好的方法。也许我可以检查每一张图片的“新鲜度”,并删除旧的?
发布于 2011-11-21 23:35:03
是的,用某种方法限制缓存通常是个好主意。有些缓存有固定的大小,一旦超过缓存大小,就会删除旧的内容。此大小可以是项目数量的计数,也可以是磁盘空间中的大小。有些缓存对每个项都有TTL (或对所有项具有相同的TTL),因此项在一定时间后过期。有些缓存可能永远不会过期。也许它的大小被最初缓存的可能项的数量所限制。这些方法中的任何一种都是有效的,尽管有些方法可能比其他方案更适合于某些情况。
“新鲜感”可能是我会考虑的一种方法。和TTL一样。基本上,您希望设置缓存项要生存的时间长度。将此缓存时间与缓存数据一起存储,然后在读取缓存数据时检查它。如果过期了,您可以删除该缓存文件,并再次从API检索映射数据(并缓存该数据)。如果您不想单独存储日期,并且在应用程序中具有固定的生存期、硬编码或可配置,那么您也可以通过读取文件创建时间来做一些事情。
更新以处理注释:
我以前也用过散列URL作为文件名。请注意,冲突是有可能发生的(当然,这高度依赖于哈希算法和数据集)。另外,如果您正在经历大量的URL,哈希算法的性能也可能很重要。
将该缓存元数据存储在文本文件中是可以的,特别是在没有大量URL的情况下。但是,您需要注意如何更新该文本文件。如果您不小心,并且在没有适当同步的情况下从多个线程访问它,您可能很容易破坏它。如果您有大量的数据,您可以考虑的另一个选择是使用数据库。如果您确实将这个缓存元数据存储在一个文件中--无论是数据库还是文本文件--您可以通过对文件名使用不同的方案来避免哈希的所有问题。例如,您只需增加十六进制或基数36。
https://stackoverflow.com/questions/8219999
复制相似问题