加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

Redis存储总用String?你或许错过了更优的行使要领

发布时间:2019-01-18 07:15:05 所属栏目:编程 来源:王清培(沪江)
导读:Redis为我们提供了5种数据范例,根基上我们行使频率最高的就是String,而对其他四种数据范例行使的频次稍弱于String。缘故起因在于: String行使起来较量简朴,可以利便存储伟大的工具,行使场景较量多; 因为Redis expire time只能配置在key上,像List、Hash、

在一些较量非凡的场所也许必要组合排序,也许有多个Zset别离用来对统一个实体在差异维度的排序,定时刻排序、按人数排序等。这个时辰就可以组合行使Zset带来的便捷性,操作pipeline再团结多个Zset最终得出组合排序荟萃。

二、案例:沪江团购体系大促hot-top接口cache计划

以沪江团购体系大促hot-top接口cache计划为例,我们总结了Redis提供的5种数据范例的各自特点和一样平常的行使场景。可是我们不只仅可以分隔行使这些数据范例,我们完全可以综合行使这些数据范例来完成伟大的cache场景。

下面我们分享一个行使多个Zset、String来优化团购体系前台接口的例子。因为篇幅和时刻限定,这里只先容跟本次案例相干的信息。

注:hot-top接口是指热门、排名接口的意思,暗示它的赏识量、并发量较量高,一样平常大促的时辰城市有几个这种机能要求较量高的接口。

我们先来说明一个查询接口所包括的通例信息。

起首一个查询接口必定是有query condition查询前提,然后是sort排序信息、最后是page分页信息。这是一样平常接口所包袱的根基职责,虽然,非凡场景下还必要支持master/slave replication时关于数据session同等性的要求,必要提供跟踪标志往返master查询数据,这里就不睁开了。

我们可以抽象出这几个维度的信息:

  • querycondition:查询前提,companyid =100,sellerid=1010101诸云云类。
  • sort:排序信息,一样平常是默认一个列排序,可是在伟大的场景下会有也许让接口行使者定制排序字段,好比一些租户信息列。
  • page:分页信息,简朴领略就是数据记录排完序之后的第几行到第几行。

因为这里我们纯粹用Redis来进步cache手段,不涉及到有关于任何搜刮的手段,以是这里忽略其他伟大查询的环境。着实我们在伟大的处所行使了Elastcsearch来进步搜刮手段。

上述我们说明总结出了一个查询接口的根基信息,这里尚有一个有关于高并发接口的计划原则,就是将hot-top接口和一样平常search接口分分开,由于只有分而治之才气别离按照特点选用差异的技能。

假如我们不分职责将全部的查询场景封装在一个接口里,那么在后头优化接口机能的时辰根基就很贫困了,有些场景是无法可能很难用cache来办理的,由于接口里耦合了各类场景逻辑,就算始末能实现机能也不会高。

前面做这些铺垫是为了能在先容案例的时辰告竣一个根基的共鸣。此刻我们来看下这个团购体系的hot-top接口的详细逻辑。

注:在大促的时辰必要揭示团购列表,这个接口的会见量长短常大的,团购勾当必要按照参团人数倒序排序,而且分页返回指定命量的团列表。我们假设这个接口名为getTopGroups(getTopGroupsRequestrequest)。

1)query condition查询前提题目

我们来细心说明下,起首差异的查询前提从DB里查询出来的数据是纷歧样的,也就是说查询出来的团列表是纷歧样的,也许有company公司、channel渠道等过滤前提。

因为一个团购勾当下不会有太多团,顶多上百个是极限了,以是一个查询前提出来的团列表也顶多几十个,并且按照场景说明热门查询前提不会高出十个,以是我们选择将查询前提Hash出一个code来缓存本次查询前提的全量团列表荟萃,可是这些功效集是没有任何排序的。

2)sort排序题目

再看按照参团人数排序题目,我们立即就可以想到行使Zset来处理赏罚团排序题目,由于只有一个排序维度,以是一个Zset就够了。我们行使一个Zset来缓存全部团的参团人数荟萃,它是一个全量的团排序荟萃。

那么我们怎样将用户的查询前提出来的团列表按照参团人数排序呢?恰恰可以行使Zset的交集运算,直接计较出当前这个荟萃的Zset子集。

3)page分页题目

通过对已经排序之后的团列表Zset行使Zrange来获取出分页荟萃。我们来看下完备的流程,如那里理赏罚查询、排序、分页的。

下图从query condition计较Hash Code,然后通过DB查询出当前前提全量团列表:

Redis存储总用String?你或许错过了更优的行使要领

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读