Java高并发优化:中间件redis

本文探讨了高并发系统设计的目标,如高性能、高可用和高扩展,并指出Redis在解决高并发问题中的作用。文章详细阐述了Redis的特性、使用场景和优势,包括其快速响应、数据结构、内存淘汰机制以及持久化策略。同时,文章讨论了使用Redis时需要注意的缓存一致性、雪崩、穿透等问题,并提出了相应的解决方案。此外,还提及了Redis的事务和并发竞争Key问题以及为何在分布式环境下更倾向于使用Redis而非HashMap。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 高并发系统设计的目标

  • 高性能:性能体现了系统的并行处理能力
  • 高可用:表示系统可以正常服务的时间
  • 高扩展:表示系统的扩展能力,流量高峰时能否在短时间内完成扩容

性能衡量指标
大体上可以分为:吞吐量、响应时间、并发量、秒开率和正确性等
吞吐量:单位时间内执行的请求数量
并发量:并发量指的是系统能够同时处理的请求数量,反映的是系统的负载能力
秒开率:秒开率主要针对的是前端网页或者移动端APP来说的,如果一个前端网页或者APP能够在1秒内很平滑的打开,尤其是首页的加载
正确性:

在这里插入图片描述

2. 高并发中的问题

日常分享模块:请求数据量大,网络IO操作

解决方案:

  1. 上拉加载机制,后端分页查询机制,每次请求一部分数据,
  2. 这部分对于实时性,一致性的要求并不高,所以可以使用CDN,或者redis进行缓存

购买模块:对于一致性要求高,典型的原子性要求

解决方案:

  1. 后端使用事务控制,买家账户的减操作,卖家账户的增操作,以及商品数量的更新。

扩展
高并发的场景中,如果一本书是一个热点的商品,那么在这行数据上会产生大量的竞争。(秒杀)
在这里插入图片描述
热点数据的处理性能影响
主要是在事务的执行时间,一个事务必须等待另一个事务commit之后才能开始。
如果在客户端去控制事务的逻辑的话,其会受网络IO的影响
所以解决方法是

  1. 将事务的逻辑放在服务端。
  2. 使用存储过程优化:事务行级锁的持有时间
    这部分其实也不是redis所解决的问题

3. 消息队列,和redis的使用场景

为什么使用消息队列?

消息队列的特点:异步,削峰,解耦

  • 削峰:当流量大的时候,服务器承受能力不够,大量的请求流量全部涌入到服务器中,会对服务器造成问题。所以先将请求放在队列中,然后服务器去从队列中取请求去处理即可。
  • 异步:消息队列的特点,将不需要同步的逻辑放在消息队列中,可以减少用户的等待时间
  • 解耦:

为什么使用redis?

  1. 性能:对于一些耗时久,结果不频繁变动的sql,适合将运行结果放入缓存,提高查询速度
  2. 并发:高并发的情况下,所有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值