zoukankan      html  css  js  c++  java
  • 分布式高并发系统设计与分析

    • 如何搭建SpringBoot微服务
    • ThreadPoolExecutor线程池的使用
    • ReentrantLock和Synchronized的使用场景
    • 数据库锁机制(悲观锁、乐观锁)
    • 分布式锁(RedissLock、Zookeeper)
    • 进程内消息队列(LinkedBlockingQueue、ArrayBlockingQueue、ConcurrentLinkedQueue)
    • 分布式消息队列(Redis、Kafka)
    • AOP实现切面锁
    • Disruptor高效队列
    • 商品详情页静态化

    case0: 抢红包case

    0.悲观锁::独占锁(阻塞锁),只有一个线程可以独占这个资源,性能低下

    1.乐观锁 :非阻塞锁,基于CAS原理实现

    但是乐观锁可能会存在ABA问题

    乐观锁会存在大量因为版本不一致而导致抢红包失败的请求,也就是最终100个红包,只被抢走了25个。可以通过重入机制进行改善。

    2.使用redis抢红包

    如何使用redis实现数据不一致的问题。 redis提供的lua脚本,消除了数据不一致性。

    并发修改同一记录时,避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,使用 version 作为更新依据。

    说明:如果每次访问冲突概率小于 20%,推荐使用乐观锁,否则使用悲观锁。乐观锁的重试次 数不得小于 3 次。

    case1: 秒杀活动

  • 相关阅读:
    “echo >”和“echo >>”的区别
    socket 简介
    Shell 获取当前执行脚本的路径
    input子系统 KeyPad-Touch上报数据格式与机制
    Java垃圾回收-GC
    Java多线程-yield函数&interrupt函数
    Java内存模型-堆和栈的区别
    Java反射
    Java正则表达式
    Java多线程-sleep和wait的区别
  • 原文地址:https://www.cnblogs.com/shawshawwan/p/9268404.html
Copyright © 2011-2022 走看看