阿里面试常问的redis数据结构,建议收藏 (2)

redis集群架构下不适合大规模使用

列表list list常用操作 LPUSH key value [value ...] //将一个或多个值value插入到key列表的表头(最左边) RPUSH key value [value ...] //将一个或多个值value插入到key列表的表尾(最右边) LPOP key //移除并返回key列表的头元素 RPOP key //移除并返回key列表的尾元素 LRANGE key start stop //返回列表key中指定区间内的元素,区间以偏移量start和stop指定 BLPOP key [key ...] timeout //从key列表表头弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 BRPOP key [key ...] timeout //从key列表表尾弹出一个元素,若列表中没有元素,阻塞等待 timeout秒,如果timeout=0,一直阻塞等待 使用list构造数据结构

Stack(栈)= lpush+lpop -> FIFO(先进后出,后进先出)

Queue(队列)=lpush+rpop

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

List应用场景

微信公众号消息

在这里插入图片描述

memocoding关注了MacTalk,备胎说车等大V

MacTalk发微博,消息ID为10018

LPUSH msg:{memocoding-ID} 10018

备胎说车发微博 消息ID 为10086

LPUSH msg:{memocoding-ID} 10086

查看最新微博消息

LRANGE msg:{memocoding-ID} 0 5 集合set 常用操作

Set常用操作

SADD key member [member ...] // 往集合key中存入元素 元素存在则忽略 若key不存在则新建 SREM key member [member ...] // 从集合key中删除元素 SMEMBERS key // 获取集合key中所有元素 SISMEMBER key member // 判断member元素是否存在于集合key中 SRANDMEMBER key [count] // 从集合key中选出count个元素 元素不从key中删除 SPOP key [count] // 从集合key中选出count个元素 元素从key中删除

Set运算操作

SINTER key [key ...] // 交集运算 SINTERSTORE destination key [key ...] // 将交集结果存入新集合destination中 SUNION key [key ...] // 并集运算 SUNION destination key [key ...] // 将并集结果存入新集合destination中 SDIFF key [key ...] // 差集运算 SDIFFSTORE destination key [key ...] // 将差集结果存入新集合destination中 set应用场景 微信小程序抽奖活动

在这里插入图片描述

点击参与抽奖加入集合

SADD key {userID}

查看参与抽奖所有用户

SMEMBERS key

抽取count名中奖者

SRANDMEMBER key [count] // 从集合key中选取count元素,元素不从key中删除 SPOP key [count] //从集合key中选取count元素 元素从key中删除 微信微博点赞 收藏 标签

图片: https://uploader.shimo.im/f/hYOWyXKin1DYGE8m.png

点赞

SADD like:{消息ID} {用户ID}

取消点赞

SREM like:{消息ID} {用户ID}

检查用户是否点赞

SISMEMBER like:{消息ID} {用户ID}

获取点赞的用户列表

SMEMBERS like:{消息ID}

获取点赞用户数

SCARD like:{消息ID} 有序集合zset 数据结构

ZSet 常用操作

ZADD key score member [[score member] ...] // 往有序集合key中加入带分值元素 ZREM key member [member ...] // 从有序集合key中删除元素 ZScore key member // 返回有序集合key中元素member的分值 ZINCRBY key increment member // 为有序集合key中元素member的分值加上increment ZCARD key // 返回有序集合key中元素个数 ZRANGE key start stop [WITHSCORES] // 正序获取有序集合key从start下标到stop下标的元素 ZREVRANGE start stop [WITHSCORES] // 倒序获取有序集合key从start下标到stop下标的元素

ZSet集合操作

ZUNIONSTORE destkey numkeys key [key ...] // 并集计算 destkey: 新生成集合 numkeys:后面所有key的集合数量 ZINTERSTORE destkey numkeys key [key ...] // 交集计算

图片: https://uploader.shimo.im/f/az8nBSuHWKYm4wFc.png

zset应用场景

ZSet集合操作实现排行榜

图片: https://uploader.shimo.im/f/pz5SdoboErHtah3A.png

点击新闻

ZINCRBY hostNews:20190819 1 守护香港

展示当日排行前十

ZREVRANGE hostNews:20190819 0 9 WITHSCORES

七日搜索榜单计算

ZUNIONSTORE hostNews:20190813-20190819 7 hostNews:20190813 hostNews:20190814 ... hostNews:20190819

展示七日排行前十

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyzjfx.html