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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 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


目录
相关文章
|
29天前
|
数据采集 安全 数据管理
深度解析:DataHub的数据集成与管理策略
【10月更文挑战第23天】DataHub 是阿里云推出的一款数据集成与管理平台,旨在帮助企业高效地处理和管理多源异构数据。作为一名已经有一定 DataHub 使用经验的技术人员,我深知其在数据集成与管理方面的强大功能。本文将从个人的角度出发,深入探讨 DataHub 的核心技术、工作原理,以及如何实现多源异构数据的高效集成、数据清洗与转换、数据权限管理和安全控制措施。通过具体的案例分析,展示 DataHub 在解决复杂数据管理问题上的优势。
150 1
|
13天前
|
存储 缓存 网络协议
如何防止DNS缓存中毒攻击(一)
DNS缓存中毒也称为DNS欺骗
43 10
|
13天前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
服务器应该配置为尽可能少地依赖与其他DNS服务器的信任关系
36 10
|
16天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
55 3
|
29天前
|
存储 缓存 监控
利用 Redis 缓存特性避免缓存穿透的策略与方法
【10月更文挑战第23天】通过以上对利用 Redis 缓存特性避免缓存穿透的详细阐述,我们对这一策略有了更深入的理解。在实际应用中,我们需要根据具体情况灵活运用这些方法,并结合其他技术手段,共同保障系统的稳定和高效运行。同时,要不断关注 Redis 缓存特性的发展和变化,及时调整策略,以应对不断出现的新挑战。
62 10
|
25天前
|
Web App开发 缓存 UED
如何设置浏览器的缓存策略?
【10月更文挑战第23天】通过合理地设置浏览器的缓存策略,可以在提高网页性能、减少网络流量的同时,确保用户能够获取到最新的内容,从而提升用户体验和网站的性能优化效果。
70 4
|
26天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
64 4
|
25天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
53 2
|
26天前
|
存储 消息中间件 缓存
缓存策略
【10月更文挑战第25天】在实际应用中,还需要不断地监控和调整缓存策略,以适应系统的变化和发展。
|
29天前
|
缓存 监控 NoSQL
Redis 缓存穿透及其应对策略
【10月更文挑战第23天】通过以上对 Redis 缓存穿透的详细阐述,我们对这一问题有了更深入的理解。在实际应用中,我们需要根据具体情况综合运用多种方法来解决缓存穿透问题,以保障系统的稳定运行和高效性能。同时,要不断关注技术的发展和变化,及时调整策略,以应对不断出现的新挑战。
44 4

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面