我有一个Laravel实例,并且已经安装了负载均衡器。我们设置了memcached(两个服务器节点)来处理会话管理。到目前为止,该网站在我们的测试环境中运行良好。该网站主要与基于Web的API相关联,因此我们仅在用户会话中存储一些值(用户身份验证数据除外)以与该网站一起使用。
在一个或两个用户短暂使用后,缓存中大约有3000个项目。我无法完全访问节点,因此我不确切知道这些项目是什么。但是,我们似乎没有使用内存最大化节点,应用程序功能也很好。
这是预期的吗?据我所知,缓存管理会随着时间的推移清除旧记录,因此这些记录可能只是“剩余的”记录。数据记录,但这是我第一次使用memcached,所以我想验证这是正常行为。
答案 0 :(得分:2)
任何缓存解决方案都很常见。特别是对于许多小对象来说,缓存通常更有效地使它们超过它们的期限(但不再服务它们),然后定期清除它们。 “残余记录”几乎描述了它。
只要您的应用程序按预期执行,我就不用担心了。你应该担心,如果对象应该在高速缓存中被大量缓存丢失,但由于缺少内存而无法在到期之前被淘汰。
答案 1 :(得分:1)
是
在Memcache中拥有大量记录是正常的。但是你需要有适当的会话管理。 每个会话存储少量值。 (大多数API需要的数据,与用户访问令牌类似)
缓存过期
使用Memcache时面临的最大挑战是在编写干净代码的同时避免缓存过时。大多数开发人员将数据存储到Memcache,并在数据发生变化时删除或更新数据。这种策略可能会很快变得混乱 - Memcache代码在整个应用程序中都会变得混乱。 Rails的Sweepers可以帮助解决这个问题,但其他语言和框架没有类似的替代方案。
避免代码复杂性的一个简单策略是将数据写入Memcache并过期。到期数据将在到期时自动过期。大多数应用程序都可以从基于时间的缓存过期中受益,而不经常更改的内容包括静态资产,页眉,页脚,博客文章等。
列表管理
存储在Memcache中的简单列表可用于维护非规范化关系。
例如电子商务网站可能希望存储最近购买的小表。不是在Memcache中保留序列化列表并在进行新购买时重新计算它,而是可以使用append和prepend来存储非规范化数据,从而避免数据库查询。
注意 - Memcache仅支持最大值1 MB。小心创建可能比最大允许值大小
更大的列表同时查看这些链接 - https://cloud.google.com/appengine/docs/adminconsole/memcache
http://docs.oracle.com/cd/E17952_01/refman-5.6-en/ha-memcached-faq.html