【Redis从入门到放弃系列 五】数据结构综合应用场景及总结
上一篇的2万字长文【Redis从入门到放弃系列 四】数据结构应用场景后,其实对Redis的五种数据结构整体有了一个认知,对于其详细的应用场景也加深了理解,本篇再次综合性的使用这几种场景探讨下它的使用场合。
限时限次结算的服务控制
按此结算的服务限制需要限制:每分钟最多调用10次。
选定类型:string,选定命令 setex , 设定redis的生命周期,每次incr后get一次,到10次的时候禁止调用,并且生命周期到期后清空值。
操作同理,但是可以设置数字的最大值,利用超过报异常来避免每次get操作
微信接收消息顺序通知
需要区分置顶用户和普通用户,并且后来的消息在最上边,先看到【按栈模型使用】
选定类型:list、set,选定命令 消息来了之后先和set比较是否为置顶用户然后加入不同的list,并且后来的list较新展示
如果需要做计数,再对相同的消息设备同步使用一个计数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,深度好文