自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

转载 什么是CPU、GPU、TPU、DPU、NPU、BPU?有什么区别?

哦,对了,Nervana 的 CEO 在创立 Nervana 之前,在高通负责一个神经形态计算的研究项目,就是上面提到的 Zeroth。「解读脑电波」,「意念交流」,永恒的科幻话题。有一点需要强调,虽然GPU是为了图像处理而生的,但是我们通过前面的介绍可以发现,它在结构上并没有专门为图像服务的部件,只是对CPU的结构进行了优化与调整,所以现在GPU不仅可以在图像处理领域大显身手,它还被用来科学计算、密码**、数值分析,海量数据处理(排序,Map-Reduce等),金融分析等需要大规模并行计算的领域。

2023-11-20 15:05:59 8278

转载 BIO、NIO、AIO详解

Java NIO的非阻塞模式,使一个线程从某通道发送请求或者读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可,这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

2023-04-20 10:47:09 1215

转载 数据库索引,到底是什么做的?-- 转自沈剑公众号

问题1. 数据库为什么要设计索引?图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又按照书名音序排序…以便快速找到一本书。与之类比,数据库存储了1000W条数据,要从中找到name=”shenjian”的记录,一条条查,要查到什么时候去?于是,要有索引,用于提升数据库的查找速度。问题2. 哈希(has

2021-08-17 20:04:27 294

转载 MySql 缓冲池(buffer pool) 和 写缓存(change buffer)

 应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。 MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘IO。 今天,和大家聊一聊InnoDB的缓冲池。InnoDB的缓冲池缓存什么?有什么用? 缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访..

2021-08-17 19:51:39 1389

转载 数据库事务的四大特性、隔离级别、传播行为、锁机制

数据库事务概念数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位作用一个数据库事务通常包含了一个序列的对数据库的读/写操作。它的存在包含有以下两个目的:为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。当事务被提交给了DBMS.

2021-08-17 16:05:55 619

转载 事务的4种隔离级别

当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获取数据的准确性,所以,对于不同的事务,采用不同的隔离级别会有不同的结果。如果不考虑事务的隔离性,那么会发生下表所示的3种问题:不可重复读是由于事务并发修改同一条记录导致的,要避免这种情况,最简单的方法就是对要修改的记录加锁,这会导致锁竞争加剧,影响性能。另一种方法是通过MVCC可以在无锁的情况下,避免不可重复读。幻读是由于并发事务增加记录导致的,这个不能像不可重复读通...

2021-08-17 16:02:26 8990 1

转载 MySQL的锁机制 - 记录锁、间隙锁、临键锁

记录锁(Record Locks)记录锁是封锁记录,记录锁也叫行锁,例如:SELECT * FROM `test` WHERE `id`=1 FOR UPDATE;它会在 id=1 的记录上加上记录锁,以阻止其他事务插入,更新,删除 id=1 这一行。记录锁、间隙锁、临键锁都是排它锁,而记录锁的使用方法跟之前的一篇文章共享/排它锁里的排它锁介绍一致,这里就不详细多讲。间隙锁(Gap Locks)(重点)间隙锁是封锁索引记录中的间隔,或者第一条索引记录之前的范围,又或者...

2021-08-17 15:45:55 3982 1

转载 Spring Boot改变服务启动端口

1、端口设置方式 Spring Boot默认启动端口是8080,但是可以通过server.port参数来改变启动端口。Spring Boot指定了两种方式传入server.port参数,任意一种均可: 1)通过Java程序启动参数传入:可以通过在Program arguments中添加--server.port=8123传入; 2)通过配置文件传入:可以通过在配置文件application.properties中添加server.port=8123传入。 3)通过JVM...

2021-08-16 17:44:13 8038

转载 MySQL索引背后的数据结构及算法原理

摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分。第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。第二部分结合MySQL数据库中MyIS

2021-08-13 17:47:59 133

转载 MySQL索引B+树数据结构原理(绝对好文)

索引!可谓是重中之重。面试可谓是必问内容,当然了,平时开发对于SQL的优化也是很重要的而当实践SQL优化不能盲目的操作,理论是支撑实践的基础索引的意义索引的本质就是一种排好序的数据结构。这个肯定都明白,自然而言就联想到字典中的目录在详细讲解下面的索引数据前补充一句:通过不断缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序事件,也就是说,有了这种索引机制,总是用同一种方式来锁定数据索引分类1.普通索引 index:加速查找2.唯一索引​ 主键索引:

2021-08-13 17:37:07 3099

转载 MySQL中innoDB和myisam对比及索引原理区别

InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了1、事务和外键InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修复能力和多版本并发的事务安全,包括ACID。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择2、全文索引Inn

2021-08-13 16:08:20 425

转载 浅谈MySQL存储引擎-InnoDB&MyISAM

存储引擎在MySQL的逻辑架构中位于第三层,负责MySQL中的数据的存储和提取。MySQL存储引擎有很多,不同的存储引擎保存数据和索引的方式是不同的。每一种存储引擎都有它的优势和劣势,本文只讨论最常见的InnoDB和MyISAM两种存储引擎进行讨论。本文中关于数据存储形式和索引的可以查看图解MySQL索引MySQL逻辑架构图:InnoDB存储引擎#InnoDB是默认的事务型存储引擎,也是最重要,使用最广泛的存储引擎。在没有特殊情况下,一般优先使用InnoDB存储引擎。1️⃣、数据存储形式

2021-08-13 15:50:56 174

转载 io多路复用的原理和实现

高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种:(1)同步阻塞IO(BlockingIO):即传统的IO模型。(2)同步非阻塞IO(Non-blockingIO):默认创建的socket都是阻塞的,非阻塞IO要求socket被设置为NONBLOCK。注意这里所说的NIO并非Java的NIO(NewIO)库。(3)IO多路复用(IOMultiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Li...

2021-08-12 19:08:23 5188

转载 ConcurrentHashMap底层结构与实现原理

前言HashMap是一个非常优秀的类,使用也非常频繁。唯一的遗憾就是HashMap不是线程安全的。前置阅读:HashMap底层结构与实现原理HashMap多线程扩容导致死循环解析(JDK1.7)理解了HashMap,再来看ConcurrentHashMap会有事半功倍的效果,因为ConcurrentHashMap底层数据结构、核心方法几乎和HashMap一模一样,只是在多线程环境下做了很多保证线程安全的操作。JDK早期提供了线程安全的HashMap类,那就是Hashtable,底层

2021-08-12 15:52:49 1468

转载 TreeSet

TreeSet集合:可以对Set集合中的元素进行排序。是不同步i的。 判断元素唯一性的方式:根据比较方法的返回值来判断。是0(零)就存入集合,不是0就不存。因为Set集合是不能有重复的元素,无序。 既然是无序的集合。我们有时为了到达需求,需要使它变得有序,那怎么办呢? TreeSet对元素排序的方式一: 让元素自身具备比较排序功能,具备比较排序功能的元素只需要...

2021-08-12 15:24:17 176

转载 TreeSet &TreeMap的底层实现

TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点。TreeSet 和 TreeMap 的关系为了让大家了解 TreeMap 和 TreeSet 之间的关系,下面先看 TreeSet 类的部分源代码: public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.

2021-08-12 15:23:03 467

转载 Kafka为何弃用zookeeper

Kafka的核心是日志——一种简单的数据结构,它使用与底层硬件共生的顺序操作。Kafka的设计是以日志为中心,这样带来了高效的磁盘缓冲和CPU缓存使用率、预取、零拷贝数据传输以及许多其他好处,从而带来了显著的高效率和吞吐量。对于那些刚接触Kafka的人来说,他们通常要了解的第一件事就是topic及其作为提交commitLog的底层实现。但是日志本身的代码在整个系统中所占的比例相对较小。Kafka的代码库中有很大一部分负责调整分区(即日志),这些分区跨一个集群中多个broker节点、分配领导权、处理失败等

2021-08-11 21:03:34 1143

转载 HashMap多线程扩容1.7导致死循环解析及1.8优化

前言前一篇 HashMap底层结构与实现原理 遗留了一个问题:JDK1.7中的HashMap在多线程情况下扩容可能会导致死循环。本篇就这个问题进行讲解。扩容死循环前一篇深入的讲解了HashMap1.7扩容的过程,这里回顾一下在扩容过程中,单链表的表现,相关的代码如下void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; // 外层循环遍历数组槽(slot)...

2021-08-11 20:58:48 689

转载 布隆过滤器

什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你“某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。实现原理HashMap 的问题讲述布隆过滤器的原理之前,我们先思考一下,通常你判断某个元素是否存在用的是什么?应该蛮多人回答 HashMap 吧,确实可以将值.

2021-08-11 20:15:59 164

转载 CSRF跨域攻击及预防

一.CSRF是什么?  CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF二.CSRF可以做什么?  你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。三.CSRF漏洞现状  C

2021-08-11 20:02:54 827

转载 ThreadLocal原理

概述在java学习生涯中可能很多人都会听到ThreadLocal变量,从字面上理解ThreadLocal就是“线程局部变量”的意思。简单的说就是,一个ThreadLocal在一个线程中是共享的,在不同线程之间又是隔离的(每个线程都只能看到自己线程的值)。可能一开始把这句话放出来很难理解,那我们就继续往后面看吧。API介绍再学习一个类之前我们需要了解一个类的API,这也是我们学习类的入口。而ThreadLocal类的API相当简单。在这里面比较重要的就是,get、set、remove了,.

2021-08-11 14:36:47 338

转载 BlockingQueue(阻塞队列)详解

一. 前言  在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。二. 认识BlockingQueue  阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:  从上图我们可以很清楚看到,通过一个共享的队列,可以使得数

2021-08-11 11:38:26 217

转载 线程池流程图

默认构造函数public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { ....}

2021-08-11 10:42:15 529

转载 深入springboot原理——一步步分析springboot启动机制(starter机制)

前言使用过springboot的同学应该已经知道,springboot通过默认配置了很多框架的使用方式帮我们大大简化了项目初始搭建以及开发过程。本文的目的就是一步步分析springboot的启动过程,分析springboot是如何帮我们简化这个过程的。springboot帮我们做了什么通常搭建一个基于spring的web应用,我们需要做以下工作:1、pom文件中引入相关jar包,包括spring、springmvc、redis、mybaits、log4j、mysql-connector-ja

2021-08-10 16:54:33 307

转载 SpringCloud

SpringCloud框架针对这个架构图我分层介绍一下:1、是web服务器的选型,这个我选择的是nginx+keepalived,haproxy也是一个选择,但是haproxy在反向代理处理跨域访问的时候问题很多。所以我们nginx有些地方做了keep-alive模式处理,减少了三次握手的次数,提高了连接效率。keepalived做nginx的负载,虚拟一个vip对外,两个nginx做高可用,nginx本身反向代理zuul集群。2、api gateway,这里的zuul很多人诟病,说是速度..

2021-08-10 16:35:37 312

转载 kafka

1、Kafka 都有哪些特点?高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。可扩展性:kafka集群支持热扩展持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)高并发:支持数千个客户端同时读写2、Kafka 的设计架构?Kafka 架构分为以

2021-08-10 16:17:38 440

转载 Spring Cloud核心组件

概述毫无疑问,Spring Cloud是目前微服务架构领域的翘楚,无数的书籍博客都在讲解这个技术。不过大多数讲解还停留在对Spring Cloud功能使用的层面,其底层的很多原理,很多人可能并不知晓。因此本文将通过大量的手绘图,给大家谈谈Spring Cloud微服务架构的底层原理。实际上,Spring Cloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件。一

2021-08-10 10:10:02 105

转载 Java锁--Lock实现原理(底层实现)

关于java lock的底层实现原理,讲的有点深,转载学习!Lock完全用Java写成,在java这个层面是无关JVM实现的。在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurrent.AbstractQueuedSynchronizer类,实现思路都大同小异,因此我们以ReentrantLock作为讲解切入

2021-08-08 16:01:18 1972 2

转载 Java 并发编程:synchronized、volatile

Java 并发编程:核心理论并发编程是Java程序员最重要的技能之一,也是最难掌握的一种技能。它要求编程者对计算机最底层的运作原理有深刻的理解,同时要求编程者逻辑清晰、思维缜密,这样才能写出高效、安全、可靠的多线程并发程序。本系列会从线程间协调的方式(wait、notify、notifyAll)、Synchronized及Volatile的本质入手,详细解释JDK为我们提供的每种并发工具和底层实现机制。在此基础上,我们会进一步分析java.util.concurrent包的工具类,包括其使用方式、实现源

2021-08-07 14:58:19 1329

转载 深入理解final关键字

final 是Java 中重要关键字之一,可以应用于类、方法以及变量上。这篇文章中将讲解什么是 final 关键字?将变量、方法和类声明为 final 代表了什么?使用 final 的好处是什么?final 关键字是什么?final 在 Java 中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作 final,你将不能改变这个引用了,编译器会检查代码,如果试图将变量再次初始化的话,编译器会报编译错误。final 变量凡是对成员变量或者本地变量(在方法中的或者代码

2021-08-07 13:47:17 348

转载 kafka中topic的partition数量和customerGroup的customer数量关系以及storm消费kafka时并行度设置问题总结:

前段时间通过网上查找和自己测试仔细研究了partition和customer关系以及工作中遇到的storm并行度调整的问题,认真梳理了一下现总结如下:一、先说kafka部分:produce方面:如果有多个分区,发送的时候按照key值hashCode%partitionNum哈希取模分区数来决定该条信息发往哪个partition, 这里可以自定义partition的分发策略,只要实现Partitioner接口就好,可以自定义成随机分发或者fangwang发往指定分区;customer方面:

2021-08-07 13:16:45 580

转载 CAS算法与ABA问题

锁是用来做并发最简单的方式,当然代价也是最高的。独占锁是一种悲观锁,synchronized就是一种独占锁;它假设最坏的情况,并且只有在确保其它线程不会造成干扰的情况下执行,会导致其它所有需要锁的线程挂起直到持有锁的线程释放锁。所谓乐观锁就是每次不加锁,假设没有冲突而去完成某项操作;如果发生冲突了那就去重试,直到成功为止。CAS(Compare And Swap)是一种有名的无锁算法。CAS算法是乐观锁的一种实现。CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存

2021-08-06 14:12:59 366

转载 HashMap实现原理及源码分析&为何选用红黑树

哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行讲解,然后会对JDK7的HashMap源码进行分析。目录  一、什么是哈希表  二、HashMap实现原理  三、为何HashMap的数组长度一定是2的次幂?  四、重写equals方法需同时

2021-08-06 11:28:23 621

转载 算法一看就懂之「 递归 」

一、「 递归 」是什么?递归就是指函数直接或间接的调用自己,递归是基于栈来实现的。递归的经典例子就是斐波拉契数列(Fibonacci)。一般如果能用递归来实现的程序,那它也能用循环来实现。用递归来实现的话,代码看起来更清晰一些,但递归的性能并不占优势,时间复杂度甚至也会更大一些。上图为 斐波拉契数列 图例。要实现递归,必须满足2个条件:可调用自己 就是我们要解决的这个问题,可以通过函数调用自己的方式来解决,即可以通过将大问题分解为子问题,然后子问题再可以分解为子子问题,这样不停的分解。并..

2021-08-02 19:22:02 146

转载 算法一看就懂之「 队列 」

一、「 队列 」是什么?队列(queue)是一种先进先出的、操作受限的线性表。队列这种数据结构非常容易理解,就像我们平时去超市买东西,在收银台结账的时候需要排队,先去排队的就先结账出去,排在后面的就后结账,有其他人再要过来结账,必须排在队尾不能在队中间插队。「 队列 」数据结构就是这样的,先进入队列的先出去,后进入队列的后出去。必须从队尾插入新元素,队列中的元素只能从队首出,这也就是「 队列 」操作受限制的地方了。与堆栈类似,队列既可以用 「 数组 」 来实现,也可以用 「 链表 」 来实现。

2021-08-02 19:21:06 506

转载 算法一看就懂之「 堆栈 」

一、「 堆栈 」是什么?堆栈(stack)是一种先进后出的、操作受限的线性表,也可以直接称为栈。可以把栈想象成一个桶一样,往这个桶里面一层一层的放东西,先放进去的在里面,后放进去的东西依次在外面。但取东西的时候就是先取靠近外面的,再依次一层层取里面的。这就是 后进先出( Last In-First Out )的原则。因此「 栈 」虽然是线性的,有2个端:顶端和底端,但它只允许从一端进行插入和删除数据,这就是为啥前面说「 栈 」是操作受限的了。栈只有两种操作:Push 和 Pop 。我们.

2021-08-02 19:19:31 337

转载 算法一看就懂之「 数组与链表」

数据结构是我们软件开发中最基础的部分了,它体现着我们编程的内功。大多数人在正儿八经学习数据结构的时候估计是在大学计算机课上,而在实际项目开发中,反而感觉到用得不多。其实也不是真的用得少,只不过我们在使用的时候被很多高级语言和框架组件封装好了,真正需要自己去实现的地方比较少而已。但别人封装好了不代表我们就可以不关注了,数据结构作为程序员的内功心法,是非常值得我们多花时间去研究的,我这就翻开书复习复习:本文就先从大家最经常使用的「 数组 」和「 链表 」聊起。不过在聊数组和链表之前,咱们先看一下数据的逻辑结

2021-08-02 19:15:08 212

转载 Kafka高性能原因

1. 批量处理传统消息中间件的消息发送和消费整体上是针对单条的,这样会造成多次网络传输。Kafka是通过将发送到相同partition的数据组装成一个批量消息,然后进行发送,这在前面文章中介绍batch.size参数时提到过,这种方式大大减少了请求的数量,提升了客户端和服务器的性能。2. 客户端优化新版生产者客户端摒弃了以往的单线程,而采用了双线程:主线程负责将消息置入客户端缓存Sender线程负责从缓存中发送消息3. 消息压缩Kafka支持多种消息压缩方式(gzip、snappy、lz4

2021-08-02 14:32:07 1137

转载 Kafka

Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶级开源 项目。1.前言消息队列的性能好坏,其文件存储机制

2021-08-02 13:53:30 248

转载 分布式锁解决并发的三种实现方式

分布式锁解决并发的三种实现方式在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同 一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案: 分布式锁一般有三种实现方式: - 1. ==数据库锁== - 2. ==基于Redis的分布式锁== - 3

2021-08-02 13:51:26 696

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除