Redisson 框架中的分布式锁
实现分布式锁通常有三种方式:数据库、Redis 和 Zookeeper。我们比较常用的是通过 Redis 和 Zookeeper 实现分布式锁。Redisson 框架中封装了通过 Redis 实现的分布式锁,下面分析一下它的具体实现
1、关键点
原子性:要么都成功,要么都失败
过期时间:如果锁还没来得及释放就遇到了服务宕机,就会出现死锁的问题。给 Redis 的 key 设置过期时间,即使服务宕机了超过设置的过期时间锁会自动进行释放。
锁续期: 因为给锁设置了过期时间而我们的业务逻辑具体要执行多长时间可能是变化和不确定的,如果设定了一个固定的过期时间,可能会导致业务逻辑还没有执行完,锁被释放了的问题。锁续期能保证锁是在业务逻辑执行完才被释放。
正确释放锁: 保证释放自己持有的锁,不能出现 A 释放了 B 持有锁的情况。
2、实现2.1、引入依赖1234567<!-- pom.xml文件--><dependency> <groupId>org.redisson</groupId> <artifactId>redi ...
sharding-jdbc
1、基本概念分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成 ,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表分为分库和分表两部分,通常分为垂直分库、垂直分表、水平分库、水平分表
1.1、垂直分库垂直分库是指按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上。例如,将用户信息表和订单信息表分别存储在不同的数据库中,以减轻单个数据库的负载压力
1.2、水平分库水平分库是将一个表的数据按照某个条件(例如,按照用户ID的范围或哈希值)分散存储在多个数据库中。每个数据库只存储部分数据。这样可以将数据库负载均衡,并提高查询性能。例如,将用户信息根据用户ID的哈希值分散存储在不同的数据库中
1.3、垂直分表垂直分表是将一个表按照列的方式进行拆分,将不同的列存储在不同的表中。每个表负责存储特定的列数据。这样可以降低单个表的数据量和表的宽度,提高查询性能。例如,将用户表拆分为用户基本信息表和用户扩展信息表,分别存储基本信息和扩展信息
1.4、水平分表水平分表是将一 ...
汽车
1、汽车汇总1.1、日系
价位
本田-轿车
本田-suv
丰田-轿车
丰田-suv
日产-轿车
日产-suv
马自达-轿车
马自达-suv
10W
飞度
致炫/威驰
骐达
劲客
10-15W
凌派
缤智
卡罗拉/雷凌
锐放/锋兰达
轩逸
逍客
昂克赛拉
CX-30
15-20W
思域
XR-V
亚洲狮
奕泽
天籁
奇骏/楼兰
CX-4
20-25W
雅阁/英诗派
CR-V/皓影
亚洲龙/凯美瑞
荣放/威兰达
天籁
阿特兹
CX-5
30W
冠道/U-RV
陆放/汉兰达
CX-8
35W+
80W+
途乐
1.2、德系
价位
大众-轿车
大众-suv
奔驰-轿车
奔驰-suv
宝马-轿车
宝马-suv
奥迪-轿车
奥迪-suv
10W
Polo/桑塔纳
10-15W
宝来/朗逸
15-20W
速腾/凌度/高尔夫
探影 ...
设计模式
创建型模式:创建型模式关注对象的创建过程,主要包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。
结构型模式:结构型模式关注对象之间的组合和协作关系,主要包括适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式和代理模式。
行为型模式:行为型模式关注对象之间的交互和通信,主要包括模板方法模式、策略模式、命令模式、职责链模式、状态模式、观察者模式、中介者模式和访问者模式。
1、单例模式
饿汉模式:在类加载时就完成了初始化,但是加载比较慢,获取对象比较快
12345678910public class Singleton_hungry { //构造函数私有化 private Singleton_hungry(){} //定义私有的引用 private static Singleton_hungry instance = new Singleton_hungry(); //对外提供获取实例的方法 public static Singleton_hungry getInstance()& ...
springBoot
1、Spring Boot基础应用1.1、springBoot特征概念:
约定优于配置,简单来说就是你所期待的配置与约定的配置一致,那么就可以不做任何配置,约定不符合期待时才需要对约定进行替换配置。
特征:
1.SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中
2.使编码变得简单,SpringBoot采用 JavaConfig的方式对Spring进行配置,并且提供了大量的注解,极大的提高了工作效率,比如@Configuration和@bean注解结合,基于@Configuration完成类扫描,基于@bean注解把返回值注入IOC容器。
3.自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们
4.使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow.我们只需要一个Java的运行环境就可以跑SpringBoot的项目了,SpringBoot的项目可以打成一个j ...
jvm
1、jvm概念1.1、JVM JRE JDK区别
JVM:就是一个虚拟的用于执行bytecode字节码的”虚拟计算机”。一般与OS操作系统打交道
JRE:java运行环境,包含Java虚拟机、库函数、运行Java应用程序所必须的文件
javaw(windos java启动器,不显示黑窗口),libraries(外部类库),rt_jar(核心库)
JDK:java开发工具,包含JRE,以及增加编译器和调试器等用于程序开发的文件
javac(编译器),debugging(调试器),tools,javap(反编译工具)
2、内存结构
注意:常量池,运行时常量池,字符串常量池逻辑上属于方法区,只是存储的物理位置在堆(所以他们属于方法区)
2.1、程序计数器当前线程所执行的字节码的行号指示器。在JVM的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令
特点:(1).为了在线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,独立存储,互不影响。所以,程序计数器是线程私有的内存区域(2).如果线程执行的是一个Java方法,计数器记 ...
mqtt
1、简介MQTT 可以简单看做一个网络协议,用于机器对机器的通信(与客户端到服务器的传输有点区别)。智能传感器、可穿戴设备和其他物联网(IoT)设备通常必须通过带宽有限的资源受限网络传输和接收数据。这些物联网设备使用 MQTT 进行数据传输,因为它易于实施,并且可以有效地传输物联网数据。MQTT 支持设备到云端和云端到设备之间的消息传递。
1.1、特点
轻量级:MQTT协议是一种轻量级的协议,它的开销非常小,可以在低带宽、不稳定的网络环境下运行。
灵活性:双向通信,MQTT协议支持多种消息传输模式,包括点对点、发布/订阅和请求/响应等模式,可以根据不同的应用场景选择合适的模式。
可靠性:MQTT协议支持QoS(服务质量)等级,可以确保消息的可靠传输,同时还支持消息持久化和重传机制,保证消息不会丢失。
易于集成:MQTT协议可以与各种不同的平台和设备集成,包括传感器、嵌入式设备、移动设备和云平台等,可以实现跨平台、跨设备的通信。
安全性:MQTT协议支持TLS/SSL加密和认证机制,可以保证消息的安全传输和身份验证,防止数据泄露和攻击。
1.2、 ...
shiro
1、shiro基本概念Shiro是Apache组织下的一个开源的安全框架,常常用来做:安全认证、权限管理、会话管理、加密
1.1、安全认证可用于验证用户的身份凭证,如用户名和密码。通过配置 Shiro 的 Realm(领域)来自定义身份验证的逻辑,通过 Subject 对象进行身份验证,可以获取用户的身份信息和执行相关操作
1.2、权限管理可以通过配置 Shiro 的 Realm 来定义用户的角色和权限信息,或者使用注解方式进行权限控制。通过 Subject 对象进行权限检查,可以判断用户是否具有某个角色或权限,并根据结果进行相应的处理
1.3、会话管理shiro 提供了会话管理的功能,用于跟踪用户的登录状态和管理用户的会话信息。Shiro 的会话管理可以基于 Web 容器的 HttpSession,也可以使用自己的非 Web 环境会话管理(redis等)
1.4、加密对密码进行加密和解密操作,以保护用户的密码安全。Shiro 支持常用的加密算法,如MD5、SHA、AES等。你可以根据需求选择适当的加密算法进行使用
2、shiro架构
2.1、主体(Subject)Subject即主体 ...
thymeleaf
1. 简介Thymeleaf 是一个服务器端 Java 模板引擎,能够处理 HTML、XML、CSS、JAVASCRIPT 等模板文件。Thymeleaf 模板可以直接当作静态原型来使用,它主要目标是为开发者的开发工作流程带来优雅的自然模板,也是 Java 服务器端 HTML5 开发的理想选择
2. 创建模板文件创建一个html模板文件:
12345678910<!DOCTYPE HTML><html xmlns:th="http://www.thymeleaf.org"><head> <title>Index Page</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body> <p th:text="${message}">Welcome ...
java core
1、Java概述1.1、java特点
Java 语言是面向对象的(oop)
Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证
Java 语言是跨平台性的。[即: 一个编译好的.class 文件可以在多个系统下运行,这种特性称为跨平台]
java是一种半编译,半解释型语言。 . Java–>. class是由 Javac 编译,这个过程符合编译型语言的特点。而. class–>对应平台机器码 的这一过程 是由Java解释执行
1.2、访问修饰符
2、变量2.1、java基本数据类型java基本数据类型 - 四类八种
整型
byte 、short 、int 、long
浮点型
float 、 double
字符型
char
布尔型
boolean
数据类型名称
占用字节
范围
封装器类
byte(字节型)
1
-(2^7)2^7-1(-128127)
Byte
shot(短整型)
2
-(2^15)2^15-1(-3276832767)
Short
int(整形)
4
-(2 ...