Session 有很多记录和拉威尔在一起是正常的吗?

Session 有很多记录和拉威尔在一起是正常的吗?,session,laravel-4,memcached,Session,Laravel 4,Memcached,我有一个Laravel实例,它在负载平衡器的支持下运行。我们已经设置了memcached(两个服务器节点)来处理会话管理。到目前为止,该站点在我们的测试环境中运行良好。该站点很大程度上与基于web的API相关联,因此我们只在用户会话中存储一些值(用户身份验证数据除外)来使用该站点 在一两个用户短暂使用之后,缓存中大约有3000个项目。我没有对节点的完全访问权限,所以我不知道这些项目是什么。但是,我们似乎没有用内存最大化节点,并且应用程序功能良好 这是意料之中的事吗?我知道缓存管理会随着时间的推移

我有一个Laravel实例,它在负载平衡器的支持下运行。我们已经设置了memcached(两个服务器节点)来处理会话管理。到目前为止,该站点在我们的测试环境中运行良好。该站点很大程度上与基于web的API相关联,因此我们只在用户会话中存储一些值(用户身份验证数据除外)来使用该站点

在一两个用户短暂使用之后,缓存中大约有3000个项目。我没有对节点的完全访问权限,所以我不知道这些项目是什么。但是,我们似乎没有用内存最大化节点,并且应用程序功能良好


这是意料之中的事吗?我知道缓存管理会随着时间的推移清除过期的旧记录,因此这些记录可能只是“残留”数据记录,但这是我第一次使用memcached,因此我想验证这是正常行为。

任何缓存解决方案都会收集大量项目,这是很正常的。特别是对于许多小对象,缓存通常更有效地将它们保持在过期状态(但不再为它们提供服务),然后定期进行大范围扫描以清除它们。 “残存记录”几乎描述了它

只要您的应用程序按预期运行,我就不会担心。如果对象本应在缓存中,但由于缺少存储它们的内存而在到期前被踢出,那么您应该担心会出现大量缓存未命中。

Memcache中有很多记录是正常的。但是您需要有适当的会话管理。 每个会话存储少量值。(大多数API所需的数据,如用户访问令牌)

缓存过期

使用Memcache的最大挑战是在编写干净代码的同时避免缓存过时。大多数开发人员将数据存储到Memcache中,并在数据更改时删除或更新数据。这种策略很快就会变得混乱——Memcache代码在整个应用程序中变得错综复杂。Rails的清理程序可以帮助解决这个问题,但其他语言和框架没有类似的替代方案

避免代码复杂性的一个简单策略是在到期时将数据写入Memcache。过期的数据将在到期时自动过期。大多数应用程序都可以从基于时间的缓存过期中获益,缓存过期的内容不经常更改,例如静态资产、页眉、页脚、博客文章等

列表管理

存储在Memcache中的简单列表对于维护非规范化关系非常有用

例如一个电子商务网站可能想要存储一个小的最近购买的表格。可以使用append和prepend存储非规范化数据,避免数据库查询,而不是在Memcache中保留序列化列表并在进行新购买时重新计算

注意-Memcache仅支持1 MB的最大值大小。创建列表时要小心,列表的大小可能会超过允许的最大值大小

同时检查这些链接-


您确定没有在API中使用Memcached吗?不幸的是,您必须显式地将API的会话驱动程序设置为“array”,以使其成为无状态。也许您认为API是无状态的,相反,它一直在创建会话,因为它需要一个您永远不会发送回的会话id……不,API是一个完全不同的系统,而Laravel站点或多或少是一个“用户外壳”来访问这些命令。我添加了一些调试日志消息,似乎我们没有执行过多的会话推送命令,这使我认为会话存储/检索工作正常。我们的服务器管理员表示,在上线几个小时后,活动/存储级别似乎会达到最高,因此可能需要进行一些“登录”。好吧,这正是重点!如果作为开发人员,您不能完全控制存储的内容,那么最终可能会出现缓存未命中。OP表示,他们对每个经过身份验证的会话“只存储几个值”。假设“少数”是10;要达到缓存中的3000个项目,您仍然需要300个会话,如果只有“一个或两个用户”在测试,那么这些会话将需要数周的时间。一些我们没有意识到的事情正在发生;关键是,最好提前知道它是否危险!