Redis 核心数据结构和应用(下)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 常用 5 种数据类型 string, list, set, hash, zset

1. 36 氪发推送消息,消息id 1001


lpush msg:{zhangsan id} 1001 


2. 汽车之家推送消息, 消息id 1002


lpush msg:{zhangsan id} 1002


3. 获取最新消息


lrange msg:{zhangsan id} 0 4


遇到的问题:如果大 V 关注的用户上几千万,那么我们就可以分批次发消息


  1. 先发在线的用户


  1. 再后台分批次发其他用户


4. set


Set 常用操作


sadd key member [member ...]  // 往集合key 中存入数据,如果元素存在则忽略若key 不存在则新建
srem key member [member ...]  // 从集合 key 中删除元素
smember key                   // 获取集合 Key 中所有元素
scard key                     // 获取集合 key 中的元素个数
simember key member           // 判断 member 元素是否存在与集合 key 中
srangmembre key [count]       // 从集合中选出 count 个元素。 元素不从 key 中删除
spop key [count]              // 从集合 key 中选出 count 个元素, 元素从 key 中删除


Set 运算操作


sinter key [key..]                                  // 交集运算
sinterstore destination key [key ...]               // 将交集结果存入新的集合 destination 中
sunion key [key ...]                                // 并集运算
sunionstore destination key [key ...]               // 将并集结果存入新的集合 destination 中
sdiff key [key ...]                                 // 差集运算
sdiffstore destination key [key ...]                // 将差集结果存入新集合 destination 中


使用场景


1)微信抽奖功能


  1. 点击参与加入集合


sadd key {userId}


  1. 查看参与抽奖的所有用户


smembers key


  1. 抽取 count 名中间者


srandmember key [count] / spop key [count]
srandmember 抽奖完成后,那么就没有这个用户了
spop 抽奖完成一个这个用户就没有了


2) 微信新浪微博点赞,收藏,标签


image.png


  1. 点赞


sadd like:{消息id} {用户id}


  1. 取消点赞


srem like:{消息id} {用户id}


  1. 检查用户是否点赞


sismember like:{消息id} {用户id}


  1. 获取点赞的用户列表


smembers like:{消息id}


  1. 获取点赞用户数


scard like:{消息id}


集合操作


sinter set1 set2 set3 -> {c}  //交集
sumion set1 set2 set3 -> {a, b, c, d ,e} // 并集
sdiff set1 set2 set3 -> {a} // 差集, 第一个集合减去后面集合的并集


集合操作实现微博关注模型


image.png


  1. 张三关注的人


zhangsan -> {lisi , wangmazi}


  1. 李四关注的人


lisi -> {zhaoliu, wangmazi}


  1. 王麻子关注的人


wangmazi -> {lisi, zhangsan, wangwu}


  1. 张三和李四共同关注的人


sinter zhangsan lisi -> {wangmazi}


  1. 张三罐组的人也关注了李四


sismember zhangsan lisi
sisimember wangmazi lisi


  1. 我可能认识的人


sdiff  lisi zhangsan -> {zhaoliu}


集合操作实现电商商品筛选


image.png


sadd brand:huawei P40
sadd brand:xiaomi mi-11
sadd brand:iPhone iphone11
sadd os:android P40 mi-11
sadd cpu:brand:intel P40 mi-11
sadd ram:8G mi-11 iphone11
     sinter os:andorid cpu:brand:intel ram:8G -> {P40, mi-11}


5. zset


zset 常用操作


zadd key score member [[score member] ... ]      // 往有序集合 key 中加入代分值元素
zrem key member [member ... ]                    // 从有序集合 key 中删除元素
zscore key score                                 // 返回有序集合 key 元素 member 的分值
zrange key start stop [withscores]               // 正序获取有序集合 key 下标 start 下标到 stop 下标的元素
zrevrages key start stop [withscores]            // 倒序获取有序集合 key 从 start 下标到 stop 下标的元素
zset 集合操作
zunionstore destkey numkeys key [key ...]        // 并集计算
zunionstore destkey numkeys key [key ...]        // 并集计算


热搜推荐


image.png


  1. 点击新闻


zincrby hotnews:20210120 1 中国航天2021开门红 


  1. 展示当日排行前 10


zrevrange hotnews:20210120 0 9 withscores


  1. 七日搜索榜单计算


zunionstore hotnews:20210114 - hotnews:20210120  10


  1. 展示七日排行前十


zrevrange hotnews:20210114 - hotnews:20210120  0 9 withscores



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
14天前
|
XML JSON NoSQL
Redis的常用数据结构之字符串类型
Redis的常用数据结构之字符串类型
19 0
|
21天前
|
存储 消息中间件 NoSQL
Redis数据类型详解:选择合适的数据结构优化你的应用
Redis数据类型详解:选择合适的数据结构优化你的应用
|
26天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
36 0
|
25天前
|
存储 编译器 C语言
【数据结构】深入浅出理解链表中二级指针的应用
【数据结构】深入浅出理解链表中二级指针的应用
27 0
|
26天前
|
存储 NoSQL Redis
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)(三)
作者推荐 |【Redis技术进阶之路】「原理系列开篇」揭秘高效存储模型与数据结构底层实现(SDS)
21 0
|
16天前
|
消息中间件 存储 搜索推荐
深入理解栈和队列(二):队列
深入理解栈和队列(二):队列
29 0
|
1月前
【栈】数据结构栈的实现
【栈】数据结构栈的实现
|
1月前
|
存储
数据结构--栈和队列
数据结构--栈和队列
|
1月前
|
存储 算法 数据处理
数据结构从入门到精通——栈
栈,作为一种后进先出(LIFO)的数据结构,在计算机科学中扮演着重要的角色。它的特性使得它在处理函数调用、括号匹配、表达式求值等问题时具有得天独厚的优势。然而,如果我们跳出传统思维的束缚,会发现栈的用途远不止于此。
58 0
|
1月前
|
C语言
数据结构之栈详解(C语言手撕)
数据结构之栈详解(C语言手撕)
35 1

热门文章

最新文章