我在我的网站上缓存推文(有30分钟的到期时间)。当缓存为空时,要查找的第一个用户将重新填充它。
然而,当时Twitter API可能会返回200.在这种情况下,我想将之前的数据再延长30分钟。但以前的数据已经丢失了。
所以相反,我想考虑重新填充缓存,比如说,在到期时间前5分钟,这样我就不会丢失任何日期。
那么在使用php的memcache :: get()时如何知道项目的到期时间?
此外,还有更好的方法吗?
答案 0 :(得分:5)
在这种情况下,这不是更好的逻辑吗?
关键是,只有用新东西替换数据,不要让旧数据自动丢弃。
答案 1 :(得分:1)
不要在memcached中存储关键数据。它什么都不保证。
如果您总是需要获得“最新的好”缓存 - 您需要将数据存储在任何持久存储中,例如数据库或平面文件。
在这种情况下,如果在缓存中找不到任何内容 - 请执行twitter api请求。如果失败 - 你从持久性中读取数据。在另一个http请求中,您将再次进行相同的迭代。
或者您可以将持久性数据从持久性存储到内存缓存中。几分钟,例如(1-5)让twitter服务器有时间变得健康。过期后 - 重复请求。
答案 2 :(得分:0)
当您将数据放入内存缓存时 - 您还要设置缓存有效的时间。所以理论上你也可以把创建缓存的时间和/或缓存过期时间。从缓存中获取后,您可以随时验证缓存过期所需的时间,并决定您要执行的操作。
但是让缓存在用户访问时重新填充在某些时候仍然存在风险 - 假设您希望在到期时间达到约5分钟之前重新填充缓存 - 并且突然之间没有访问者进入最后6缓存过期前的几分钟 - 然后缓存仍将过期,没有人会导致重新填充。如果您希望始终确保存在缓存条目 - 您需要定期进行检查 - 例如 - 制作一个执行缓存检查和填充的cronjob。