Magento搜索结果页缓存策略解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

在给Magento网站规划缓存方案时,很少有人关注到搜索结果页面。有些人可能认为搜索结果页面千变万化(用户可能使用任何词汇来你的网站搜索),所以没法做缓存。另一些人可能认为没有必要为搜索结果页面做缓存,因为搜索只是网站里很小的一部分。真的如此吗?

先来回答第二个问题,有没有必要为搜索结果页面做缓存?缓存的作用分为两方面,一方面是可以明显减少网页的加载时间,提高用户的体验,另一方面因为数据从缓存中获取,避免了读数据库和程序逻辑的运算,可以明显降低服务器的负载压力。针对Magento的情况,只要sku数达到一定量级(也许2000),前台搜索所花时间就会明显上升,某些平台类的Magento站,sku数上万很正常,影响会更明显。服务器方面,每一次的搜索请求都会对catalogsearch_fulltext表做读操作,然后对catalogsearch_query表做更新(写操作),也许同时还更新下catalogsearch_result表,整个流程没有任何防护,直接穿透到数据库层,表面的问题是搜索量大是数据库压力会很大,更进一步的问题是不设防的流程给别有用心的人留下了一个很好的攻击网站的入口。

既然有必要为搜索结果页面做缓存,再来看第一个问题,怎么做?以FPC为例(这里推荐Lesti_Fpc,其他FPC同理),一般FPC会针对四类页面做缓存:首页,CMS页面,商品列表页,商品详情页。如果简单的在此基础上加上对搜索结果页的支持(参数“q”作为cache key的一部分),确实可以无差别的把所有搜索词的结果页都给缓存起来(甚至不管有没有搜到结果),但这样子一方面缓存占据的容量(一般是内存)会大量上升,另一方面这些缓存的命中率会非常低。那么很简单的一个处理思路就是,我只缓存有必要缓存的搜索词带来的结果页,放过那些不必要缓存的词。

首先做一个预测的词库,哪些搜索词你预测用户会经常使用,就放入一个池子里,当前台有用户搜索词包含在词库里时,就把这个词对应的搜索结果页缓存起来,缓存有效期内再次有用户使用同一个搜索词时,就可以直接从缓存中读取数据了。这个词库怎么做,结合Magento的实际情况,可以去根据catalogsearch_query表筛选出预测命中率会比较高的词。比如我是这么筛选的,首先这个词必须是能搜到结果的(num_results >0),其次这个词没有在后台指定跳转(redirect is null),然后这个词最近半个月内被搜索过(updated_at >xxx),最后把符合条件的按流行度排序(popularity desc),取出排前500的词,这500个词就是我要的词库。因为catalogsearch_query表的数据随着时间在改变,所以我每天重新初始化一遍我的词库。

以上是我针对自己网站的例子,每个网站实际情况不同,筛选的条件和参数应该也不同,共同点就是Magento的catalogsearch_query表提供了基础,可以按自己的需求筛出自己要的词。


词库需要一个容器,传统做法是新建一张Mysql的表来保存这些数据,然后通过判断表中是否含有用户请求的词来决定是否缓存页面。非传统做法是使用Nosql做容器,我的建议是Redis。Nosql读写效率高,还可以减轻Mysql主库的压力。

有了词库之后就是要在你的FPC里去做逻辑判断,这个就很简单了,通过Mage::app()->getRequest()->getParam('q')获取前台搜索词,把这个词去词库里匹配,匹配上的走缓存流程,匹配不上的跳出走正常流程。

可能有人会想到,网站搜索不是可以用专业的全文搜索引擎来帮助我们更快更好的做搜索吗?比如经典的Solr或者Sphinx,又或者小鲜肉ElasticSearch。这个想法没错,不过跟本文并不冲突。全文搜索引擎搜索引擎的常规用法(针对B2C)是根据搜索词快速匹配出符合条件的商品ID集合,再根据这些商品id去数据库里取出商品的完整信息(图片,价格等等),而缓存所做的是直接把搜索词和页面做一个K\V对应,命中缓存时绕过所有的检索流程直接返回用户以结果。

关于全文搜索引擎(比如Sphinx)与Magento的结合,是一个单独的大话题,以后有机会可以探讨下。



最后推荐看下高大上的淘宝是怎么玩的:http://www.tao-sou.com/840.html


目录
相关文章
|
26天前
|
SQL 安全 算法
网络安全与信息安全的全面解析:应对漏洞、加密技术及提升安全意识的策略
本文深入探讨了网络安全和信息安全的重要性,详细分析了常见的网络安全漏洞以及其利用方式,介绍了当前流行的加密技术及其应用,并强调了培养良好安全意识的必要性。通过综合运用这些策略,可以有效提升个人和企业的网络安全防护水平。
|
3天前
|
数据采集 安全 数据管理
深度解析:DataHub的数据集成与管理策略
【10月更文挑战第23天】DataHub 是阿里云推出的一款数据集成与管理平台,旨在帮助企业高效地处理和管理多源异构数据。作为一名已经有一定 DataHub 使用经验的技术人员,我深知其在数据集成与管理方面的强大功能。本文将从个人的角度出发,深入探讨 DataHub 的核心技术、工作原理,以及如何实现多源异构数据的高效集成、数据清洗与转换、数据权限管理和安全控制措施。通过具体的案例分析,展示 DataHub 在解决复杂数据管理问题上的优势。
14 1
|
19天前
|
缓存 算法 数据挖掘
深入理解缓存更新策略:从LRU到LFU
【10月更文挑战第7天】 在本文中,我们将探讨计算机系统中缓存机制的核心——缓存更新策略。缓存是提高数据检索速度的关键技术之一,无论是在硬件还是软件层面都扮演着重要角色。我们会详细介绍最常用的两种缓存算法:最近最少使用(LRU)和最少使用频率(LFU),并讨论它们的优缺点及适用场景。通过对比分析,旨在帮助读者更好地理解如何选择和实现适合自己需求的缓存策略,从而优化系统性能。
30 3
|
26天前
|
运维 负载均衡 安全
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
深度解析:Python Web前后端分离架构中WebSocket的选型与实现策略
78 0
|
2天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
21 10
|
2天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
17 4
|
23小时前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
防止DNS缓存中毒的方法包括:减少DNS服务器与其它服务器的信任关系;限制DNS服务器上的服务;使用最新版DNS;加强用户安全教育,如识别可疑网站,仅访问HTTPS网站等。部署SSL证书并选择符合国际Webtrust标准的CA机构,可进一步提高安全性。
7 1
|
3天前
|
数据采集 机器学习/深度学习 数据挖掘
10种数据预处理中的数据泄露模式解析:识别与避免策略
在机器学习中,数据泄露是一个常见问题,指的是测试数据在数据准备阶段无意中混入训练数据,导致模型在测试集上的表现失真。本文详细探讨了数据预处理步骤中的数据泄露问题,包括缺失值填充、分类编码、数据缩放、离散化和重采样,并提供了具体的代码示例,展示了如何避免数据泄露,确保模型的测试结果可靠。
13 2
|
6天前
|
存储 缓存 NoSQL
保持HTTP会话状态:缓存策略与实践
保持HTTP会话状态:缓存策略与实践
|
24天前
|
存储 缓存 监控

推荐镜像

更多