redis五种数据结构的使用场景

高版本的redis其实不止5中数据结构了,常见的有string,list,sort,set,zset。

先聊Hash ,

Hash结构使用场景 :存放购物车中订单 。一个用户,一个购物车,很多个商品。

(1)。以用户id为key,

(2)。商品id为field

(3)。商品数量为value

添加商品 : -- hset cart(key) :1001 1008(field) :1(value)

删除商品: --hdel cart :1001 1008

Hash的优缺点:

优点:1. 同类数据归类整合存储,方便管理

2.相比string,操作消耗内存和cpu更小

3.相比string更节省空间

缺点:

1.过期功能不能使用在field上,只能用在key上

2.Redis集群下不适合大规模使用 比如说我的key是user表,value是全部的数据,那么在集群模式下,可能会导致,整张表的全部数据,都存放在了一个节点上,这样效率很低。不符合集群设计原理。

聊一下list

Lpush——key value [value...]先进后出,在列表头部插入元素
Rpush——key value [value...]先进先出,在列表的尾部插入元素
Lrange——出栈,根据索引,获取列表元素
Lpop——key 移除并返回key列表的头元素
Rpop——key 移除并返回key列表的尾元素

BRPOP  key [key ...] timeout  //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待timeout秒,如果timeout=0,一直阻塞等待。

常用数据结构:

 Stack (栈)=LPUSH +LPOP  -->FIFO

Queue (队列)= LPUSH +RPOP

Blocking MQ (阻塞队列)= LPUSH+BRPOP

聊一下set 

set1  a,b,c       set2 b,c,d     set3 c,d,e

SINTER set1 set2 set3  --> {c}      表示set1,2,3三个集合中的交集元素c,被取出来。

SUNION set1 set2 set3 -->{a,b,c,d,e} 表示三个集合的并集元素。

SDIFF set1 set2 set3 -->{a} 表示 set1的元素减去set2和set3的并集元素 

集合操作实现微博微信关注模型,以及推荐可能认识的人

诸葛关注的人 :

诸葛Set ->{杨过,司马,鲁班}

杨过关注的人:

杨过Set ->{诸葛,司马,鲁班,郭嘉}

司马关注的人:

司马Set ->{诸葛,杨过,鲁班,郭嘉,荀彧}

诸葛和杨过的共同关注:

SINTER 诸葛set 杨过set -->{司马,鲁班}

诸葛关注的人,也关注杨过:

SISMEMBER 司马set 杨过

SISMEMBER 鲁班set  杨过

诸葛可能认识的人:

SDIFF 杨过set 诸葛set ->{诸葛,郭嘉}

再聊一下Zset

Zset集合实现操作实现微博热搜榜

ZADD key score member [[score member]...]  往有序集合key中加入带分值元素

ZREVRANGE key start stop  [WITHSCORES]  倒序获取有序集合key从start下标到stop下标的元素

点击新闻所需要操作:
ZINCRBY hotNews(热搜榜的意思):20220515(日期) 1(点击量) 守护香港(当日新闻)

展示当日排行榜前十:

ZREVANGE hotNews:20220515  0 9 [WITHSCORES] 

七日搜索榜单计算:

ZUNIONSTORE hotNews:20220515-20220522  7(此处写了7,后面应跟7个key)   hotNews:20220515  hotNews:20220516...hotNews:20220522

展示七日排行榜前十:

ZREVANGE hotNews :20220515-20220522 0 9  [WITHSCORES] 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值