我有一个Web应用程序,如果某些数据库操作被缓存,它将表现良好。这些是静态数据,每天都会添加新数据。为了减少数据库读取操作,我将使用memcached。
如果我没有给出我在memcached中输入的数据的到期时间,会发生什么。它会消耗更多的RAM来影响性能吗?在向缓存添加数据时,放弃到期时间是否合适。
PS:我们使用AWS与ngnix,php,mysql一起部署webapp。
答案 0 :(得分:3)
据推测,当你的应用程序在2050年仍在运行时,你在2012年缓存的一些东西将不再具有相关性。如果您没有提供某种过期,只有缓存重置(例如服务器重启)将最终刷新缓存。
除非你有无限的内存(而且我很确定AWS不提供;-),否则为缓存项添加一些过期时间是明智的。
即使Memcached将基于least recently used机制使项目过期(感谢@mikewied指出这一点),在memcache开始基于LRU驱逐项目之前,缓存仍将完全填满。不幸的是,Memcache的LRU算法是每块板,而不是全局的。这意味着基于LRU的驱逐可能不是最佳的。请参阅Memcached Memory Allocation and Optimization。