-
redisson分布式锁学习
什么是分布式锁?当有多个线程并发访问同一共享数据时,如果多个线程同时都去修改这个共享数据,且修改操作不是原子操作,就很有可能出现线程安全问题,而产生线程安全问题的根本原因是缺乏对共享数据访问的同步和互斥。 为了解决这个问题,通常我们的做法是通过加锁来解决该问题,比如ReentrantLock or Synchronized ,但是在分布式系统中,存在多台服务器与客户端,这些节点之间都可能访问相同的共享数据。而Java中的内置锁机制如synchronized和ReentrantLock都是J...…
-
引入reidsson--基于redisson-spring-boot-starter
gradleimplementation("org.redisson:redisson-spring-boot-starter:3.20.1")yamlspring: redis: host: xxx port: 6379 database: 0 password: xxx timeout: 3600 lettuce: pool: max-active: 3 max-wait: 5 max-idle:...…
-
基于redisson学习加载"文本"配置文件
基于spring反射工具类获取yaml配置中指定配置信息 yamlspring: redis: client-name: redisson_demo properties@ConfigurationProperties(prefix = "spring.redis")public class RedisProperties { private String clientName; public String getClientName() { return this.clie...…
-
引入redisson踩坑(Unable to init enough connections amount!)
业务背景:项目中有业务需要用到分布式锁的功能,而redisson对于分布式锁有比较好的封装,于是遍着手开干接入redisson。版本依赖:项目中用到的redis版本为(spring-boot-starter-data-redis:2.3.8.RELEASE),redis是买的阿里云的云数据库, 引入的redisson版本为(redisson-spring-boot-starter:3.13.6), 没有做其他自定义配置,而是直接采用redisson-starter的默认配置,所以引入red...…
-
初次遇到go之linux配置go环境启动项目
layout: posttitle: linux配置Go环境启动项目tags: Gocategories: Go配置linux go运行环境下载安装go安装包 下载go安装包https://studygolang.com/dl 解压安装包tar -zxvf go1.17.2.linux-amd64.tar.gz配置go环境变量//命令行仅输入“cd”到主目录下$ cd//ls -a可以查看主目录下的所有文件,目标文件为.bashrc//vi .bashrc进行增添环境变量$ vi .b...…
-
Kubernetes微服务学习之Kubernetes基本概念和应用(下)
K8s内部反向代理ClusterIp Service主要学习内容 K8s内部反向代理ClusterIp Service原理 Petclinic通过ClusterIp Service访问内部MySql Pod内部服务如果相互访问?传统内部反向代理K8s内部反向代理ClusterIP Service 内部访问MySql Pod 配置kubectl logs petclinit-s12312c 查看指定pod下的日志ClusterIP Service学习小结 ClusterIP Servi...…
-
Kubernetes微服务学习之Kubernetes基本概念和应用(上)
k8s架构简介k8s平台主要是解决集群资源调度的问题,当有请求过来时,进行分发请求具有监控节点、自愈、管理集群网络、保证pod互联的能力 ![image](http://oss.longmarch.work/k8s-2-1.png)k8s Master节点与Worker节点 Master节点是Kubernetes 的主节点。集群所有的控制命令都传递给Master组件,在Master节点上运行。kubectl命令在其他Node节点上无法执行。 Master节点上面主要...…
-
kubernetes微服务学习之阿里云k8s部署
学习内容 将Petclinic单体解耦拆分为微服务架构 在阿里云部署发布微服务将Petclinic单体解耦拆分为微服务架构petclinic微服务架构DeckerFile文件描述FROM openjdk:8-使用openJdkARG AARTIFACT_NAME EXPOSED_PORT传递参数 artifact_name exposed_portADD ${ARTIFACT_NAME}.jar /usr/share/app.jar 把springboot构建出的jar 文件添加到镜...…
-
Kubernetes微服务学习之SpringCloud(PetClinic)微服务应用
spring社区版PetClinic微服务项目技术栈及架构简介PetClinic微服务Docker Compose 部署文件简析Docker-Compose:是可以一键运行/关闭Docker容器(只要在开发测试使用),规范服务镜像的依赖关系的管理Docker容器的工具。docker-compose up 一键启动docker-compose down 一键关闭 ```yaml version: '2'services:服务名称config-server: ## 镜像名称 image...…
-
多线程之阻塞队列
阻塞队列 ArrayBlockingQueue LinkedBlockingQueue DelayQueue SynchrosQueue操作方法 插入元素add/offer()/put 删除/获取元素remove/poll/take源码分析public class BlockingQueueDemo{ // add method /** * 将元素插入队列中 * @param e * @return */ public ...…
-
多线程之ConcurrentHashMap原理分析
学习内容 put的实现过程 不同版本区别 源码分析 为什么使用CounterCell来计算容器大小? 学习内容总结不同版本区别HashMap?ConcurrentHashMap基本的数据结构数组+链表+红黑树put的实现过程CHM的put方法实现过程中,会经过计算key的hash值、initTable(初始化节点)、存储数据、记录集合的size等流程 计算key的hash值:通过计算key的hash值将数据散列的存储到各个节点 initTable:通过sizeCtl确保在并发...…
-
多线程之JUC工具类原理及Semaphore使用及源码分析
学习内容 Semaphore的使用 Semaphore源码分析Semaphore的使用semaphore 常用于限流的使用他使用了AQS的共享锁在使用的过程中可以通过构造参数指定公平锁还是非公平锁停车场案例/** * @PackageName: com.raven.multithreaded.concurrentutil.semaphore * @ClassName: SemaphoreTest * @Blame: raven * @Date: 2021-09-01 16:51 * @...…
-
多线程之JUC工具类原理及CountDownLatch、CyclicBarrier使用及源码分析
学习内容 CountDownLatch的使用 CountDownLatch源码分析 CyclicBarrier的使用 CyclicBarrier源码分析CountDownLatch的使用CountDownLatch 主要的使用场景为计数器。在整个过程中会用到AQS的共享锁CountDownLatch中的state标识计数器的数值。 ## 计数器demo ```java /** * @PackageName: com.raven.multithreaded.concurrentut...…
-
多线程之JUC工具类原理及Condition使用及源码分析
学习内容 condition的使用 源码分析condition的使用我们通过syncsynchronize 、wait、notify、notifAll 可以完成线程间通信,完成生产者消费者功能==同样也可以通过Lock、condition(await、signal、signalAll)实现==demo案例==ConditionWait==/** * @PackageName: com.raven.multithreaded.concurrentutil * @ClassName: Co...…
-
多线程之深入AQS(Lock锁基本使用、ReentrantLock重入锁、AQS原理分析、AQS源码分析)
学习内容 了解J.U.C Lock的基本使用 ReentrantLock重入锁 AQS原理分析 AQS源码分析J.U.Cj.u.c(java.util.concurrent)是java并发编程工具包包,像concurrentMap、BlockingQueue、Lock、AbstractOwnableSynchronizer等等都是该包下的类(接口)Lock的基本使用@Datapublic class UseLock { static ReentrantLock lock =...…
-
多线程之内存可见性的本质(volatile、JMM内存模型、Happens-Before原则)
学习内容 初步认识Volitale 从硬件层面了解可见性的本质 什么是JMM Happens-Before规则初步认识Volitalevolatile的作用volatile可保证内存可见性/** * @PackageName: com.raven.multithreaded.memoryvisibility * @ClassName: VolatileTest * @Blame: raven * @Date: 2021-08-16 20:53 * @Description: 使用v...…
-
多线程之Synchronized(Synchronized的使用、锁的存储、锁升级原理、wait¬ify)
1.学习收获 学习方法 如何保证线程安全性? Synchronized的基本使用 锁的存储 Synchronized锁的升级原理 wait/notify实现线程通信2.学习方法场景->需求->解决方案->应用->原理 场景: 多线程场景 需求:多线程并行产生的线程安全性 解决方案:加锁(Synchronized) 应用:synchronized的几种使用方式,对象锁、静态方法锁、代码块 原理:偏向锁(cas乐观锁) -> 轻量级锁(自旋锁...…
-
多线程之多线程基础(应用场景、生命周期、中断、复位)
1.学习内容 并发编程的发展历史 线程在java中的应用 多线程的实际应用场景 线程的生命周期 线程的基本操作-启动/停止 2.学习方法 ==公式:场景->需求->解决方案->应用->原理== 例子:Doubbo:分布式-> 服务治理 -> dubbo -> dubbo应用 -> 了解原理jvm(从计算机的发展带来的进程和线程的概念):场景(提高资源的利用率)->需求->解决方案(进程、线程)->应用...…
-
设计模式总结
1.学习目标1.了解GOF23种设计模式和设计原则,做整体认知。2.了解各设计模式之间的关联,解决设计模式混淆的问题。3.了解spring中设计模式的应用2.内容定位1.设计模式在于理解,不只在于形式。2.不要为了套用设计模式而使用设计模式,而是在业务遇到问题时,很自然的想到设计模式可以作为一种解决方案3.GOF 23种设计模式简介3.1设计模式归类分类 | 设计模式—|—创建型 | 工厂方法模式(Factroy Method) 、抽象工厂模式(Abstract Factory)、建造者模...…
-
设计模式之工厂模式
code demohttps://github.com/Gaoning97/coding-life/tree/main/spring/src/main/java/com/raven/pattern/factory0.设计模式Spring不同技术中的体现1、简单工厂模式1.1简单工厂模式的定义简单工厂模式(Simple Factory Pattern) 是指由一个工厂对象决定创界出哪一种产品类的实例。简单工厂模式属于创建型模式,但是他不属于GOF,23中设计模式。1.2简单工厂模式的实现ca...…