好的,所以我还没有深入了解使用 memcached 的细节,因为我正在集思广益/计划在我开始破解并制造一些可怕的东西之前我可能会如何使用 memcached 解决方案。
环境如下:该网站显示了来自许多不同供应商的交易列表,按交易的受欢迎程度排序(想想一个大网格)。非用户总是看到相同的网格,但用户可以选择最喜欢的供应商,以便他们最喜欢的供应商的交易总是首先出现。
现在的工作方式:如果非用户打开站点,则会发送 SQL 查询以从 table 获取所有交易信息deals
,然后用于填充页面所需的 html。如果用户进入该站点,则会发送一个更高级的 SQL 查询(基本上是deals
and的左连接) userfavorites
,按上述方式对交易进行排序并填充 html。
我想要做什么:显然,非用户 SQL 查询似乎非常适合 memcached,因为在deals
更新表之前它总是相同的(我猜它可以同时更新 memcached 版本)。但是,由于用户的收藏夹会有很多变化,所以我想知道如何为他们提供缓存解决方案。用户看到的所有数据都和非用户完全一样,唯一不同的是顺序。对缓存中已经可用的数据执行查询对我来说似乎很荒谬。是否可以缓存deals
and userfavorites (where userid=?)
,然后使用 PHP 人为地对它们执行左连接和排序操作?
基本上,是这样的吗?
memcached version of deals (desc order by pageviews)
memcached version of favorites (specific to the user)
favoritecount = 0
for i = 0, i < length(deals), i++
if deals.i.vendor is a member of favorites
push deals.i to deals.favoritecount
favoritecount++
else
continue
如果我正确地考虑了这一点,因为deals
它已经排序并且正在按顺序处理,这应该产生一个favorites (desc order by pageviews)
∪形式的交易列表deals (desc order by pageviews)
,我可以用它来吐出 html。
当然,我可以进行检查,以便如果用户添加或删除收藏夹,它会更新他们的缓存版本。
你们有什么感想?这可能吗?我希望我的用户尽可能少地接触我的数据库以获得大部分相同的数据,所以我希望 memcached 将允许我做我上面描述的事情。就目前而言,对网站的每一次点击都会触及数据库。感谢您花时间阅读本文,非常感谢您的任何意见。