【Redis基础知识 三】Redis五种常用数据结构应用场景(三)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: 【Redis基础知识 三】Redis五种常用数据结构应用场景

场景十:利用set交并差实现推荐系统池

可以使用如下命令实现:

总而言之就是实现数据的关联差异:

场景十一:利用set不重复特征获取所有业务系统权限

我们可以设置用户为一个set集合,他的权限为value,然后合并所有用户就可以拿到所有不重复权限

场景十二:利用set不重复特征获取UV和IP数据

我们可以采用将ip或者cookie放到set中保证不重复,对同类型数据进行快速去重

场景十三:利用set不重复特征实现黑白名单

实现时把对应黑白名单信息源添加到set中即可。

操作规范

Sorted_Set类型

redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。

基本操作

操作都是关联score的,获取时按照score值来进行排序获取。

同时需要注意,删除的时候按照值删除,而不是按照score删除。

扩展操作【应用场景】

sorted_set最经典的应用场景就是进行排行榜设置了。当然除此之外还有些带权重的操作都类似:

  • 场景十四:利用set不重复排序特征实现计数器组合排序排行榜功能
  • 场景十五:利用set不重复排序特征实现基于时效性任务提醒
  • 场景十六:利用set不重复排序特征实现带权重任务队列

接下来看下这三种场景

场景十四:利用set不重复排序特征实现计数器组合排序排行榜功能

可以利用如下命令直接获取排名

场景十五:利用set不重复排序特征实现基于时效性任务提醒

队列中全部为vip,按照会员时间长短排序,短时间到期后提醒下一个。

场景十六:利用set不重复排序特征实现带权重任务队列

仅是任务队列可以通过队列,但是如果队列中的任务有优先级,则需要使用带权重的。

操作规范

Redis数据结构综合应用场景及总结

最后总结一下各类数据结构他们的性能和特点吧,方便之后用的时候好记忆:

数据类型 特点 查询性能 插入、删除性能 适用场景
string 性能高 O(1)【多指令时为O(N)】 O(1)【多指令时为O(N)】 计数器、分布式自增主键、按时按次服务计算、热点数据刷新、时效性投票系统
hash 结构性 O(1)【同时设置多字段时为O(N)】 O(1)【同时设置多字段时为O(N)】 购物车操作、抢购系统
list 顺序性 O(n) O(1) 社交点赞、任务队列、分布式日志顺序显示
set 不重复性 O(1)【多值操作时为O(N)】 O(1)【多值操作时为O(N)】 黑白名单、推荐系统、业务系统权限整合、UV\IP数据统计
sorted_set 不重复排行榜 O(1) O(log(n)) 合并排行榜、带权重的任务队列、vip超时队列【时间作为得分】

总体而言,redis的设计就是简单、快,时间复杂度最多不超过O(N),并且设计了多种有特色的数据结构,利用这些数据结构服务现有的业务场景。

时间复杂度部分来源于 https://blog.csdn.net/zzm848166546/article/details/80360665,深度好文

限时限次结算的服务控制

按此结算的服务限制需要限制:每分钟最多调用10次

选定类型:string,选定命令 setex , 设定redis的生命周期,每次incr后get一次,到10次的时候禁止调用,并且生命周期到期后清空值。

操作同理,但是可以设置数字的最大值,利用超过报异常来避免每次get操作

微信接收消息顺序通知

需要区分置顶用户和普通用户,并且后来的消息在最上边,先看到【按栈模型使用】

选定类型:list、set,选定命令 消息来了之后先和set比较是否为置顶用户然后加入不同的list,并且后来的list较新展示

如果需要做计数,再对相同的消息设备同步使用一个计数redis去实现。当然这里使用sorted_set也可以,用时间作为排行榜得分。

总结

通过一周的学习终于从场景的角度更深入的理解了redis的使用,基于这周的学习内容,依据redis的不同数据结构的特性,再次梳理下场景:

  • string,redis对于KV的操作效率很高,可以直接用作计数器。例如,统计在线人数等等,另外string类型是二进制存储安全的,所以也可以使用它来存储图片,甚至是视频等。【计数器、分布式自增、分布式锁、热点数据刷新】
  • hash,存放键值对,一般可以用来存某个对象的基本属性信息,例如,用户信息,商品信息等,另外,由于hash的大小在小于配置的大小的时候使用的是ziplist结构,比较节约内存,所以针对大量的数据存储可以考虑使用hash来分段存储来达到压缩数据量,节约内存的目的,例如,对于大批量的商品对应的图片地址名称。比如:商品编码固定是10位,可以选取前7位做为hash的key,后三位作为field,图片地址作为value。这样每个hash表都不超过999个,只要把redis.conf中的hash-max-ziplist-entries改为1024,即可。【数据对象存储、秒杀系统、分布式锁】
  • list,列表类型【顺序性】,可以用于实现消息队列,也可以使用它提供的range命令,做分页查询功能。【任务队列、社交点赞、分布式日志顺序显示】
  • set,集合,整数的有序列表可以直接使用set。可以用作某些去重功能,例如用户名不能重复等,另外,还可以对集合进行交集,并集操作,来查找某些元素的共同点。【推荐系统、数据去重、运营数据统计、黑白名单】
  • Sorted_Set,有序集合,可以使用范围查找,排行榜功能或者topN功能。【排行榜】

总而言之,string当做计数器,hash存储对象,list实现消息队列(安全队列),set用来去重和联表查询,zset用来做排行榜。

相关实践学习
基于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
相关文章
|
5天前
|
存储 NoSQL 关系型数据库
redis数据结构与应用场景
Redis 是一款开源、免费的内存数据库,常用于处理高并发和大数据场景下的热点数据访问,以提升性能。它支持 key-value 存储及多种数据结构,如字符串、列表、集合和哈希表。数据可持久化到磁盘,与 MySQL 等传统数据库相比,Redis 作为缓存能提供更快的读写速度。Redis 应用场景包括:使用字符串进行计数(如商品库存、点赞数)、利用列表实现消息队列或展示最新商品、使用集合去重和计算交集等,以及通过有序集合进行自动排序(如商品热度榜)。
|
7天前
|
存储 NoSQL Java
Redis对象与底层数据结构详解(下)
Redis对象与底层数据结构详解(下)
9 1
|
7天前
|
存储 NoSQL 安全
Redis对象与底层数据结构详解(上)
Redis对象与底层数据结构详解
19 1
|
存储 缓存 NoSQL
DB,Cache和Redis应用场景分析
最近做一产品,微博方面的。数据存储同时用到了DB(mysql),Cache(memcache),Redis。其实最开始架构设计的时候是准备用MongoDB的,由于学习成本太高,最终选择放弃了,采用了比较保守的方案。
1126 0
|
25天前
|
存储 NoSQL 算法
09- Redis分片集群中数据是怎么存储和读取的 ?
Redis分片集群使用哈希槽分区算法,包含16384个槽(0-16383)。数据存储时,通过CRC16算法对key计算并模16383,确定槽位,进而分配至对应节点。读取时,根据槽位找到相应节点直接操作。
58 12
|
25天前
|
NoSQL Linux Redis
06- 你们使用Redis是单点还是集群 ? 哪种集群 ?
**Redis配置:** 使用哨兵集群,结构为1主2从,加上3个哨兵节点,总计分布在3台Linux服务器上,提供高可用性。
343 0
|
1月前
|
负载均衡 监控 NoSQL
Redis的集群方案有哪些?
Redis集群包括主从复制(基础,手动故障恢复)、哨兵模式(自动高可用)和Redis Cluster(官方分布式解决方案,自动分片和容错)。此外,还有如Codis、Redisson和Twemproxy等第三方工具用于代理和负载均衡。选择方案需考虑应用场景、数据规模和并发需求。
282 2
|
2天前
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
32 10
透视Redis集群:心跳检测如何维护高可用性
|
5天前
|
监控 NoSQL 算法
Redis集群模式:高可用性与性能的完美结合!
小米探讨Redis集群模式,通过一致性哈希分散负载,主从节点确保高可用性。节点间健康检测、主备切换、数据复制与同步、分区策略和Majority选举机制保证服务可靠性。适合高可用性及性能需求场景,哨兵模式则适用于简单需求。一起学习技术的乐趣!关注小米微信公众号“软件求生”获取更多内容。
32 11
Redis集群模式:高可用性与性能的完美结合!
|
5天前
|
监控 NoSQL Redis