加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0518zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Redis存储总用String?你大概错过了更优的使用方法

发布时间:2019-01-31 04:43:37 所属栏目:站长百科 来源:王清培(沪江)
导读:副标题#e# Redis为我们提供了5种数据类型,基本上我们使用频率最高的就是String,而对其他四种数据类型使用的频次稍弱于String。原因在于: String使用起来比较简单,可以方便存储复杂的对象,使用场景比较多; 由于Redis expire time只能设置在key上,像Lis

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填补了集合可以排序的空隙。

(编辑:网站开发网_安阳站长网)

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