【Redis从入门到放弃系列 五】数据结构综合应用场景及总结

上一篇的2万字长文【Redis从入门到放弃系列 四】数据结构应用场景后,其实对Redis的五种数据结构整体有了一个认知,对于其详细的应用场景也加深了理解,本篇再次综合性的使用这几种场景探讨下它的使用场合。

限时限次结算的服务控制

【Redis从入门到放弃系列 五】数据结构综合应用场景及总结

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

【Redis从入门到放弃系列 五】数据结构综合应用场景及总结
选定类型:string,选定命令 setex , 设定redis的生命周期,每次incr后get一次,到10次的时候禁止调用,并且生命周期到期后清空值。

【Redis从入门到放弃系列 五】数据结构综合应用场景及总结
操作同理,但是可以设置数字的最大值,利用超过报异常来避免每次get操作

微信接收消息顺序通知

【Redis从入门到放弃系列 五】数据结构综合应用场景及总结
需要区分置顶用户和普通用户,并且后来的消息在最上边,先看到【按栈模型使用】
【Redis从入门到放弃系列 五】数据结构综合应用场景及总结
选定类型:list、set,选定命令 消息来了之后先和set比较是否为置顶用户然后加入不同的list,并且后来的list较新展示

【Redis从入门到放弃系列 五】数据结构综合应用场景及总结

如果需要做计数,再对相同的消息设备同步使用一个计数redis去实现。当然这里使用sorted_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.****.net/zzm848166546/article/details/80360665,深度好文