多条件查询缓存怎么搞

pokerface
  • 628

1.有的人说,根据不同的条件去缓存,那么比如我有按时间排序 那得缓存两份,如果按价格排序也得做两份缓存

2.有的人说mysql的查询缓存可以解决问题

3.我想知道比如美团的多条件查询是如何做缓存的?

回复
阅读 3.7k
3 个回答

mark关注一下问题,没有经历过这样的项目,所以不清楚具体怎么解决的.
然后提一下自己的一些想法:
他们可能没有缓存各种组合条件的查询结果,我认为商品单项是被缓存了,比如 "全聚德烤鸭","肯德基五折券" 这种具体单个商品是缓存了.但是各种条件组合的查询结果应该不会被缓存.
如果单品被缓存,那么只要能保证一个高效的多条件查询引擎就可以了,查询出来的结果就是各种商品的id,然后从缓存高速获取到这些商品就ok了.这种高速的多面查询引擎可以通过elasticsearch来实现.

仅仅是个人想法 , 持续关注该问题 , 希望看到合适的答案.

  • 简单处理一般是mysql语句md5一下作为缓存key(大问题:就是在分页会有问题)。
  • 在复杂点就是根据请求的参数,在按ksort进行排序组合后,生成一个唯一字符,在md5作为缓存可以。问题同上
  • 一般美团这样的大并发的一般是纯缓存。由异步(服务端)生成缓存数据,而不是web端触发生成(优点:不存在分页问题;缺点:维护成本大)
$key = "select * from where .........";
cache::put($key,$data);
cache::get($key);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏