系统优化!! 吞吐量??

2023-03-01  本文已影响0人  公子请留步LookMe

一、jvm 堆内存大小 (减少full gc)

二、静态资源分离
将静态资源数据加载至nginx或者其他服务提升系统吞吐量

三、数据库索引,减少读写io次数 统一查询处理

四、缓存
本地缓存(缓存不一致)

设计一个本地内存需要有什么功能
  存储;并可以读、写;
  原子操作(线程安全),如ConcurrentHashMap
  可以设置缓存的最大限制;
  超过最大限制有对应淘汰策略,如LRU、LFU
  过期时间淘汰,如定时、懒式、定期;
  持久化
  统计监控

缺点:使用本地缓存如果存在多台服务器会使每台服务器都需要缓存,而且需要保证并发安全需要加锁,这样导致每台服务器都得进行一次抢占操作影响速度
redis缓存:
分布式锁和同步器 · redisson/redisson Wiki · GitHub

springboot2.0以后默认lettuce作为操作redis的客户端,它使用netty进行网络通信
lettuce的bug导致netty推外内存溢出
1>使用jedis 2>升级lettuce
缓存穿透:空结果缓存
缓存雪崩 :设置过期时间(进行随机过期)
缓存击穿:加锁

锁:

本地锁  :JUC
分布式锁: Redis中间锁 
Redis锁:可重入锁、读写锁、信号量, 闭锁

缓存一致性:

双写模式:数据发生改变的话,删除缓存重新写入缓存
失效模式:数据发生改变,直接删除缓存 等待下一次查询缓存在写入
解决方案:
1.加过期时间,保存读多写少的数据,处理并发可以加读写锁
2.canal:模拟mysql从表使用binlog日志记录实时监控更新redis,数据异构
总结:都会出现脏数据

SpringCache

@Cacheable: 触发保存缓存数据.
@CacheEvict: 触发删除缓存数据.
@CachePut: 更新缓存数据.
@Caching: 重新组合缓存.
@CacheConfig: 在类级别共享一些与缓存相关的常见设置.
上一篇下一篇

猜你喜欢

热点阅读