Redis
1. 高并发系统设计的目标
- 高性能:性能体现了系统的并行处理能力
- 高可用:表示系统可以正常服务的时间
- 高扩展:表示系统的扩展能力,流量高峰时能否在短时间内完成扩容
性能衡量指标
大体上可以分为:吞吐量、响应时间、并发量、秒开率和正确性等
吞吐量:单位时间内执行的请求数量
并发量:并发量指的是系统能够同时处理的请求数量,反映的是系统的负载能力
秒开率:秒开率主要针对的是前端网页或者移动端APP来说的,如果一个前端网页或者APP能够在1秒内很平滑的打开,尤其是首页的加载
正确性:
2. 高并发中的问题
日常分享模块:请求数据量大,网络IO操作
解决方案:
- 上拉加载机制,后端分页查询机制,每次请求一部分数据,
- 这部分对于实时性,一致性的要求并不高,所以可以使用CDN,或者redis进行缓存
购买模块:对于一致性要求高,典型的原子性要求
解决方案:
- 后端使用事务控制,买家账户的减操作,卖家账户的增操作,以及商品数量的更新。
扩展
高并发的场景中,如果一本书是一个热点的商品,那么在这行数据上会产生大量的竞争。(秒杀)
热点数据的处理性能影响
主要是在事务的执行时间,一个事务必须等待另一个事务commit之后才能开始。
如果在客户端去控制事务的逻辑的话,其会受网络IO的影响
所以解决方法是
- 将事务的逻辑放在服务端。
- 使用存储过程优化:事务行级锁的持有时间
这部分其实也不是redis所解决的问题
3. 消息队列,和redis的使用场景
为什么使用消息队列?
消息队列的特点:异步,削峰,解耦
- 削峰:当流量大的时候,服务器承受能力不够,大量的请求流量全部涌入到服务器中,会对服务器造成问题。所以先将请求放在队列中,然后服务器去从队列中取请求去处理即可。
- 异步:消息队列的特点,将不需要同步的逻辑放在消息队列中,可以减少用户的等待时间
- 解耦:
为什么使用redis?
- 性能:对于一些耗时久,结果不频繁变动的sql,适合将运行结果放入缓存,提高查询速度
- 并发:高并发的情况下,所有