1,cas
Cas是JUC中的JAR,用来处理线程,多并发情况下的数据一致性问题。
2,优点:
底层操作,原子性,数据一致性
缺点:CPU开销大,ABA问题
CAS 比较重试机制,在高并发的情况下。反复更新又更新不成功,循环往复。
ABA问题,AtomicStampedReference,使用版本号解决ABA问题
使用volatile 保证比较值都是最新的
怎样提高系统的高并发能力?
1、静态资源结合CDN来解决图片文件等访问
2、分布式缓存:redis、memcached等。
3、消息队列中间件:activeMQ等,解决大量消息的异步处理能力。
4、应用拆分:一个工程被拆分为多个工程部署,利用dubbo解决多工程之间的通信。
5、数据库垂直拆分和水平拆分(分库分表)等。
6、数据库读写分离,解决大数据的查询问题。
7、利用nosql ,例如mongoDB配合mysql组合使用。
8、建立大数据访问情况下的服务降级以及限流机制等。
Synchronized 锁优化
偏向锁
单线程情况下使用,避免使用CAS造成的开销,产生本地延迟。
对象头是否指向当前线程,CAS替换Mark Work。到达全局安全点同时线程替换失败,挂起,并撤销偏向锁,进入轻量级锁
常用技巧
按目标设计接口做幂等设计
l 查询接口,每次结果一致
l 更新,修改。保证只操作一次。考虑一场情况可能造成的影响
Redis 雪崩,击穿
l 雪崩,高并发同时请求失效数据。直接请求数据库,导致数据库崩掉,并且重启继续崩。避免redis同时大面积失效,时间时间后加随机数,或者设置成永不过期
l 击穿,同时请求一条数据库中不存在的数据