我有几个表,用户经常访问。相同的查询一次又一次地运行,这会导致服务器上的额外负载。
记录不经常插入/更新,我当时想将ID缓存到memcached中,然后从数据库中获取它们,这将减少搜索/排序等负担。
这是一个例子
SELECT P.product_id FROM products P, product_category C WHERE P.cat_id=C.cat_id AND C.cat_name='Fashion' AND P.is_product_active=true AND C.is_cat_active=true ORDER BY P.product_date DESC
上面的查询将返回特定类别的所有产品ID,这些产品ID将导入到Memcached中,然后其余过程(即分页)的模拟将与mysql结果集相同。
插入过程将使缓存过期或将产品ID插入阵列的第一行。
我的问题是这是切实可行的方法吗?人们如何处理搜索,如果某人正在搜索返回10000个结果的产品(实际上是不可能的),他们是否在每个时间表中进行搜索?是否有可用的memcached和mysql很好的示例来说明如何完成这些任务?
最佳答案
您可能会问自己,在插入/更新产品时是否真的需要使缓存无效。
通常,产品列表可以使用5分钟的缓存。
如果您的失效方案仅基于时间(新条目仅在5分钟后才会出现),您可以使用快速,肮脏的技巧与memcache配合使用:只需将sql查询字符串的md5用作memcache键,并告诉memcache保留选择结果5分钟。
我希望这能帮到您
关于php - 将SQL结果移植到memcached,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3795478/