(全栈须知)5.应用场景整理

前言

redis搬运整理参考:
Redis 列表
Redis使用场景》、《Redis的使用场景

1、Redis使用场景

消息队列的使用 RabbitMQ 更专业。
哈希hash相当于是简化版的有序集合(sorted set)
redis支持集群水平扩展,支持持久化,在高发、逻辑简单、非核心的功能上可以替代MySQL。

a. 缓存功能:作为mysql缓存

对于高并发的数据查询服务,可以将常用查询结果放到redis:[ key => value ]、设为优先使用。注意设置合理的键名。

b. session共享:php原生支持

php自动管理。

c. 限速器:验证码/短信

每分钟/30s发送最多一条验证短信,限制通过速率。

d. 计数器:文章浏览

对于与评论等相对不重要的热数据,可以全部放到redis中,比如像IT之家主要看评论的这种。

  • 对象属性自增:每条微博都有点赞数,评论数,转发数和浏览数四条属性,这时用hash进行计数会更好,该计数器的key设为为weibo:weibo_id,hash的 field 为like_number、comment_number、forward_number和view_number,在对应操作后通过 HINCRBY 使hash 中的 field 自增。
  • 集合属性自增:如果应用有一个发帖排行榜的功能,便选择sorted set吧,将集合的 key 设为POST_RANK。当用户发帖后,使用 ZINCRBY 将该用户 id 的 score 增长 1。sorted set会重新进行排序,用户所在排行榜的位置也就会得到实时的更新。
  • 可重复的时间轴:使用:列表(List)。

e. 排行榜:热点排序

使用:有序集合(sorted set)。ZREVRANGEBYSCORE 返回有序集中指定分数区间内的所有的成员。

f. 好友关系:交集关系计算

使用:集合(Set)。对于一个用户A,将它的关注和粉丝的用户id都存放到两个set中:

  • A:follow:存放A所有关注的用户id
  • A:follower:存放A所有粉丝的用户id

g. 倒排索引:常量搜索

假设一个城市北京,通过拼音词库将北京转为beijing,再通过前缀分词将这两个词分为若干个前缀索引,有:北、北京、b、be…beijin和beijing。将这些索引分别作为set的 key(例如:index:北)并存储北京的 id,倒排索引便建立好了。接下来只需要在搜索时通过关键词取出对应的set并得到其中的 id 即可。

h. 商品秒杀:列表lpop

初始化,添加秒杀商品rpush ==> 分布式消费,消费锁lpop
...

2、RabbitMQ异步场景

RabbitMQ可以搭建集群,用于任务的异步处理。相比Redis,RabbitMQ实现了AMQP协议,队列可靠性更高,多了各端中阶段的ack验证,性能差些。
RabbitMQ与Redis队列对比

a. 消息队列:流量削峰,异步处理

把执行任务保存为执行单元、延时处理,发布、订阅处理任务。秒杀时可以串行执行,应用解耦时异步延时处理,普通队列任务并行执行。

b. 发布订阅/即时通讯

适合运行在命令行的web后台环境使用。

3、API 风格

API设计风格(RRC、REST、GraphQL、服务端驱动)

a. RESTful(表征状态转移) API

面向资源

b. GraphQL(描述性查询语言) API

面向结果数据

d. RPC(远程过程调用) API

面向过程

相关推荐