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
相关文章
|
2天前
|
存储 缓存 NoSQL
深入浅出Redis(一):对象与数据结构
深入浅出Redis(一):对象与数据结构
|
11天前
|
存储 缓存 NoSQL
【Go语言专栏】Go语言中的Redis操作与缓存应用
【4月更文挑战第30天】本文探讨了在Go语言中使用Redis进行操作和缓存应用的方法。文章介绍了Redis作为高性能键值存储系统,用于提升应用性能。推荐使用`go-redis/redis`库,示例代码展示了连接、设置、获取和删除键值对的基本操作。文章还详细阐述了缓存应用的步骤及常见缓存策略,包括缓存穿透、缓存击穿和缓存雪崩的解决方案。利用Redis和合适策略可有效优化应用性能。
|
1天前
|
存储 NoSQL Redis
Redis数据结构精讲:选择与应用实战指南
Redis数据结构精讲:选择与应用实战指南
10 0
|
2天前
栈的基本应用
栈的基本应用
10 3
|
2天前
|
存储 NoSQL 算法
深入浅出Redis(十一):Redis四种高级数据结构:Geosptial、Hypeloglog、Bitmap、Bloom Filter布隆过滤器
深入浅出Redis(十一):Redis四种高级数据结构:Geosptial、Hypeloglog、Bitmap、Bloom Filter布隆过滤器
|
2天前
|
存储 缓存 监控
中间件应用合理使用缓存和数据结构
中间件应用合理使用缓存和数据结构
15 3
|
7天前
|
存储 缓存 算法
【C 言专栏】C 语言中的数据结构应用
【5月更文挑战第4天】本文探讨了C语言中的核心数据结构,包括数组、链表(单链表和双链表)、栈、队列、二叉树(如二叉搜索树和二叉堆)以及图结构。这些数据结构在程序设计中扮演着关键角色,如数组的快速访问、链表的动态管理、栈和队列的处理流程控制、树和图的复杂关系表示。理解并选择适当的数据结构可优化程序性能,而内存管理和算法优化则进一步提升效率。通过案例分析和展望未来发展趋势,本文旨在帮助读者深化对C语言数据结构的理解和应用。
【C 言专栏】C 语言中的数据结构应用
|
11天前
|
存储 NoSQL 关系型数据库
redis数据结构与应用场景
Redis 是一款开源、免费的内存数据库,常用于处理高并发和大数据场景下的热点数据访问,以提升性能。它支持 key-value 存储及多种数据结构,如字符串、列表、集合和哈希表。数据可持久化到磁盘,与 MySQL 等传统数据库相比,Redis 作为缓存能提供更快的读写速度。Redis 应用场景包括:使用字符串进行计数(如商品库存、点赞数)、利用列表实现消息队列或展示最新商品、使用集合去重和计算交集等,以及通过有序集合进行自动排序(如商品热度榜)。
|
存储 NoSQL 算法
「Redis」数据结构与对象
Redis数据结构与对象介绍
|
NoSQL 算法 Java
Redis进阶 - 数据结构:对象机制详解,一文深入底层分析
我们在前文已经阐述了Redis 5种基础数据类型详解,分别是字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset),以及5.0版本中Redis Stream结构详解;那么这些基础类型的底层是如何实现的呢?Redis的每种对象其实都由对象结构(redisObject) 与 对应编码的数据结构组合而成, 本文主要介绍对象结构(redisObject) 部分。
296 0
Redis进阶 - 数据结构:对象机制详解,一文深入底层分析