大话Redis系列--实战案例总结(上)(二)

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 大话Redis系列--实战案例总结(上)(二)

抽奖活动案例



前几年有个火起来的小程序叫做抽奖助手,挺多的号主在做一些抽奖活动的时候都喜欢让读者们分享推文,然后参加抽奖活动,类似如下界面:


网络异常,图片无法展示
|


这里的抽奖功能其实也是可以使用Redis进行实现的:


点击参与抽奖加入集合


SADD key {userlD}
复制代码


查看参与抽奖所有用户


SMEMBERS key    
复制代码


抽取count名中奖者


SRANDMEMBER key [count] / SPOP key [count]
复制代码


而且Redis自身内部对于参加抽奖的人群还能通过随机抽取的功能直接生成一组随机中奖人群,非常便捷。


朋友圈评论点赞案例


在一些社交App或电商App中,我们经常会看到评论这类型的互动功能,用户可以针对自己感兴趣的内容模块进行点赞,回复等互动。


网络异常,图片无法展示
|


假如点赞这块的功能也采用redis来进行实现,那么可以参考使用set结构:


点赞


SADD  like:{消息ID}  {用户ID}
复制代码


取消点赞


SREM like:{消息ID}  {用户ID}
复制代码


检查用户是否点过赞


SISMEMBER  like:{消息ID}  {用户ID}
复制代码


获取点赞的用户列表


SMEMBERS like:{消息ID}
复制代码


获取点赞用户数


SCARD like:{消息ID}
复制代码


对于回复的评论其实可以采用之前我们提及到的List结构来进行实现:


发表评论


> rpush review:10001 这是评论内容
1
> rpush review:10001 这是评论内容2
2
> rpush review:10001 这是评论内容3
3
> rpush review:10001 这是评论内容4
4
复制代码


查看评论


> lrange review:10001 0 5
这是评论内容
这是评论内容2
这是评论内容3
这是评论内容4
复制代码


互相关注用户



社交软件中还有一类比较典型的应用场景,例如说互相关注案例:A用户和B用户共同关注的人群等等。


网络异常,图片无法展示
|


这类型的场景也比较适合采用Set结构进行设计,例如说:


userA关注的人:


userASet-> {userD, userB, userC}
复制代码


userB关注的人:


userBSet--> {userD, userA, userB , userG
复制代码


筛选出双方都共同关注的人:


SINTER userASet userBSet--> {userD, userB}
复制代码


希望认识对方的关注的朋友:(注意过滤掉自己)


SDIFF userASet userBSet->(userG,userA}
复制代码


不过这类计算不是太推荐高频率地在redis内部使用,原因是redis做这类型的计算会比较复杂,再高并发场景下可能会产生堵塞情况发生,所以如果希望使用的话,可以加入一些本地缓存来进行优化。(注意是高并发下,一般场景还是支持使用的)


热搜榜单



最常见的案例,如微博的热搜榜单,每天总是能刷新出各类有趣的热点,


这部分的热点数据排序主要参考网民们在微博搜索的热点话题频率。当用户点击了某个话题的时候,后台就需要将其记录到数据库中,并且记录其点击频率。


网络异常,图片无法展示
|


Zset集合操作实现排行榜


点击新闻


ZINCRBY  hotNews:20190819  1  守护香港
复制代码


展示当日排行前十


ZREVRANGE  hotNews:20190819  0  10  WITHSCORES 
复制代码


七日搜索榜单计算


ZUNIONSTORE  hotNews:20190813-20190819  7 
hotNews:20190813  hotNews:20190814... hotNews:20190819
复制代码


展示七日排行前十


ZREVRANGE hotNews:20190813-20190819  0  10  WITHSCORES
复制代码


简易版本的搜索引擎



在大多数的电商平台中经常会看到类似于下方的搜索功能,这类搜索条件非常复杂,在早期没有出现es的情况下,有些互联网公司会采用redis内部的set结构取进行设计,从而实现一个简单版本的搜索引擎。(不过现在数据量增大后,大多数都是采用es做查询了)


网络异常,图片无法展示
|


例如:


希望查询安卓型号,intel的cpu,8g内存的手机:


预备好一些关键字信息到redis


SADD  brand:huawei  P30
SADD  brand:xiaomi  mi-6X
SADD  brand:iPhone iphone8
SADD os:android  P30  mi-6X
SADD cpu:brand:intel  P30  mi-6X
SADD ram:8G  P30  mi-6X  iphone8
复制代码


多条件查询


SINTER  os:android  cpu:brand:intel  ram:8G ->  {P30,mi-6X}
复制代码


小结


其实在互联网圈内还有很多关于Redis实践的案例,如:


微博、微信、陌陌<附近的人>

微信<摇一摇><抢红包>

滴滴打车、摩拜单车<附近的车>

美团和饿了么<附近的餐馆>

搜索自动补全

布隆过滤器


这部分内容点将在下一篇文章中和大家分享。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
24天前
|
NoSQL 关系型数据库 MySQL
MySQL与Redis协同作战:优化百万数据查询的实战经验
【10月更文挑战第13天】 在处理大规模数据集时,传统的关系型数据库如MySQL可能会遇到性能瓶颈。为了提升数据处理的效率,我们可以结合使用MySQL和Redis,利用两者的优势来优化数据查询。本文将分享一次实战经验,探讨如何通过MySQL与Redis的协同工作来优化百万级数据统计。
55 5
|
1月前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
71 2
|
2月前
|
缓存 NoSQL 应用服务中间件
Redis实战篇
Redis实战篇
|
2月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
69 2
|
1月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
131 0
|
3月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
3月前
|
消息中间件 存储 NoSQL
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
本文档介绍了如何使用 Go 语言中的 `go-redis` 库操作 Redis 数据库
179 0
redis实战——go-redis的使用与redis基础数据类型的使用场景(一)
|
3月前
|
缓存 NoSQL Java
惊!Spring Boot遇上Redis,竟开启了一场缓存实战的革命!
【8月更文挑战第29天】在互联网时代,数据的高速读写至关重要。Spring Boot凭借简洁高效的特点广受开发者喜爱,而Redis作为高性能内存数据库,在缓存和消息队列领域表现出色。本文通过电商平台商品推荐系统的实战案例,详细介绍如何在Spring Boot项目中整合Redis,提升系统响应速度和用户体验。
67 0
|
存储 缓存 NoSQL
Redis实战之入门进阶到精通
Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis 提供了 5 种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis 的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将 Redis 扩展成一个能够包含数百 GB 数据、每秒处理上百万次请求的系统。
Redis实战之入门进阶到精通
|
存储 NoSQL Java
当Java遇到Redis:Jedis实战入门
Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序。本文将概要介绍Redis的特性和语法,并以实例代码的形式介绍如何通过Jedis在java语言环境下控制Redis,帮助各位读者快速入门。
1625 0