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

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

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

Set荟萃在行使场景上照旧较量多和自由的。举个简朴的例子,在应用体系中较量常见的就是商品、勾当类场景。用一个Set缓存有用商品荟萃,再用一个Set缓存勾当商品荟萃。假如商品呈现上下架操纵只必要维护有用商品Set,每次获取勾当商品的时辰必要过滤下是否有下架商品,假若有就必要从勾当商品中剔除。

虽然,下架的时辰可以直接删除缓存的勾当商品,,可是勾当是从marketing体系中load出来的,就算我将cache里的勾当商品删除,当下次再从marketing体系中load勾当商品时辰照旧会有下架商品。

虽然这只是举例,一个场景有差异的实现要领。

下图中阁下双方是两个差异的荟萃:

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

左边是营销域中的可用商品ids荟萃,右边是营销域中勾当商品ids荟萃,中间计较出两个荟萃的交集。

  1. SADD set:marketing:product:available:ids 1000100 1000120 1000130 1000140 1000150 1000160  
  2.  
  3. SMEMBERS set:marketing:product:available:ids  
  4. 1) "1000100"  
  5. 2) "1000120"  
  6. 3) "1000130"  
  7. 4) "1000140"  
  8. 5) "1000150"  
  9. 6) "1000160"   
  10. SADD set:marketing:activity:product:ids 1000100 1000120 1000130 1000140 1000200 1000300  
  11.  
  12. SMEMBERS set:marketing:activity:product:ids  
  13. 1) "1000100"  
  14. 2) "1000120"  
  15. 3) "1000130"  
  16. 4) "1000140"  
  17. 5) "1000200"  
  18. 6) "1000300"  
  19.  
  20. SINTER set:marketing:product:available:ids set:marketing:activity:product:ids  
  21. 1) "1000100"  
  22. 2) "1000120"  
  23. 3) "1000130"  
  24. 4) "1000140" 

在一些伟大的场景中,也可以行使SINTERSTORE呼吁将交集计较后的功效存储在一个方针荟萃中。这在行使pipeline呼吁管道中出格有效,将SINTERSTORE呼吁包裹在pipeline呼吁串中可以一再行使计较出来的功效集。

因为Redis是Signle-Thread单线程模子,基于这个特征我们就可以行使Redis提供的pipeline管道来提交陆续串带有逻辑的呼吁荟萃,这些呼吁在处理赏罚时代不会被其他客户端的呼吁滋扰。

5)Zset

Zset排序荟萃与Set荟萃相同,可是Zset提供了排序的成果。在先容Set荟萃的时辰我们知道Set荟萃中的成员是无序的,Zset弥补了荟萃可以排序的旷地。

Zset最强盛的成果就是可以按照某个score比分值举办排序,这在许多营业场景中很是急需。好比,在促销勾当里按照商品的贩卖数目来排序商品,在旅游景区里按照流入人数来排序热点景点等。根基上人们在做任何工作都必要按照某些前提举办排序。

着实Zset在我们应用体系中能用随处所处处都是,这里我们举一个简朴的例子,在团购体系中我们凡是必要按照参团人数来排序成团列表,各人都但愿介入那些即将成团的团。

下图是一个按照团购code建设的Zset,score分值就是参团人数累加和:

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

  1. ZADD zset:marketing:groupon:group:codes 5 G_PXYJY9QQFA 8 G_4EXMT6NZJQ 20 G_W7BMF5QC2P 10 G_429DHBTGZX 8 G_KHZGH9U4PP  
  2. ZREVRANGEBYSCORE zset:marketing:groupon:group:codes 1000 0  
  3. 1) "G_W7BMF5QC2P"  
  4. 2) "G_ZMZ69HJUCB"  
  5. 3) "G_429DHBTGZX"  
  6. 4) "G_KHZGH9U4PP"  
  7. 5) "G_4EXMT6NZJQ"  
  8. 6) "G_PXYJY9QQFA"   
  9.  
  10. ZREVRANGEBYSCORE zset:marketing:groupon:group:codes 1000 0 withscores  
  11.  1) "G_W7BMF5QC2P"  
  12.  2) "20"  
  13.  3) "G_ZMZ69HJUCB"  
  14.  4) "10" 
  15.  5) "G_429DHBTGZX"  
  16.  6) "10"  
  17.  7) "G_KHZGH9U4PP"  
  18.  8) "8"  
  19.  9) "G_4EXMT6NZJQ"  
  20. 10) "8"  
  21. 11) "G_PXYJY9QQFA"  
  22. 12) "5" 

Zset自己提供了许多要领用来举办荟萃的排序,假如必要score分值,可以行使withscore字句带出每一项的分值。

(编辑:湖南网)

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

热点阅读