- 博客(83)
- 资源 (5)
- 收藏
- 关注
原创 使用docker部署sentinel并融合到springcloub中
将jre安装包复制到镜像中(ADD与COPY的区别:ADD复制并解压,COPY仅复制)下面用的是绝对路径。# 在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建该目录。并在当前目录下新建一个Dockerfile文件,内容如下。#指定基础镜像,并且必须是第一条指令。上传到私库中(为了方便之后安装)自己打包的地址:IP:18080。将下载的jar放到一个目录下。# 指明镜像的作者和电子邮件。# 容器启动时需要执行的命令。官方镜像:IP:8858。打包成docker镜像。
2024-05-15 17:47:43
504
原创 将存放在gitee上项目,通过jenkins使用docker推送到阿里云私服上,并控制远程部署到其他服务
输入任务名称,选择构建一个自由风格的软件项目(Freestyle project)COPY ${JAR_FILE} app.jar# 入口点。执行JAVA运行命令。# 指定存储卷,任何向/tmp写入的信息都不会记录到容器存储层。系统管理-》全局工具配置,配置好JDK、Git、Maven等。任务名称为jar包名称(要一摸一样,且不能有大写字母)VOLUME /tmp# 拷贝运行JAR包。设置Build Steps。# 设置JAVA版本。
2024-04-11 16:53:37
1025
原创 Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境
查看所有可安装的 JDK 版本使用 apt 安装 JDK(以 11为例),最好是用11,java8对应的jenkins会有兼容问题。配置JAVA_HOME内容:配置生效验证。
2024-04-11 16:41:27
1028
原创 Docker 集成 redis,并在nacos进行配置时需要注意点
nacos使用配置中心,启动项目控制台报错:[NACOS HTTP-GET] The maximum number of tolerable server reconnection errors has been reached。由于Redisson在解析配置时,无法解析“!<org.redisson.codec.JsonJacksonCodec> {}”导致的,解决方式在config: 后添加“ |”# 900s内至少一次写操作则执行bgsave进行RDB持久化。
2024-04-08 18:15:16
993
原创 Windows11 使用WSL安装虚拟机
使用管理员命令打开powershell,执行如下命令,默认安装Unbuntu最新版本使用如下命令,获取在线的所有版本指定版本安装默认安装在C盘,可能需要迁移到其他盘中执行脚本时,过程中可能存在“,win10可能需要提升更加宽松的更换镜像安装ssh,该博主还有很多其他软件的安装教程。更换网络模式使用windows+r,在输入框中输入%USERPROFILE%,在打开文件夹中新建.wslconfig文件。安装docker。
2024-04-03 12:50:48
366
原创 多线程编程
假设我们用一个Runable实例task来表示一个任务,我们直接调用task.run()来执行该任务,此时这个任务就是同步任务,如果使用new Thread(task).start()调用一个专门的工作者线程来执行该任务,或者将该任务提交给Executor实例executor执行,此时该任务为异步任务。Integer.MAX_VALUE:线程池中最大的线程数,当现在执行的线程数没有超过且没有空闲线程的时候,线程池会立即启动一个新的线程执行任务。60L:线程池中的线程等待时间超过60s后,会自动销毁。
2024-03-15 17:01:37
986
原创 Java并发之ReentrantLock、CountDownLatch、CyclicBarrier、Semaphore
reentrantlock
2023-08-15 01:01:29
223
原创 Spring-BeanFactory
通过 MessageSource,我们可以轻松实现多语言支持,使得应用程序可以根据不同用户的语言偏好提供合适的本地化文本信息。
2023-07-27 17:04:44
335
原创 Redis 读写分离 使用redisTemplate执行lua脚本时,报错处理
READONLY You can‘t write against a read only replica 解决策略
2023-07-14 17:06:22
2049
原创 关于System.out.println和Thread.sleep对多线程可见性的影响
我们知道共享变量是存储在主内存中的,每个线程使用的时候从主内存复制到自己的工作内存,所以线程在操作这个变量的时候是在自己的工作内存中,操作完毕才会将值刷新到主内存,也就是说其他线程刷新了主内存的值,而我们当前线程是无法感知的,会继续操作自己工作空间的值,进而最终导致主内存的共享变量不是我们预期的结果。我们看到do stop这个线程已经将stop修改为false,但是线程还没没终止,这就印证了我们的说法。是指当一个线程修改了某一个共享变量的值,其他线程是否能够立即知道这个修改。
2023-06-28 14:04:25
228
原创 Redis慢查询分析
就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来。可以看到每个慢查询日志有4个属性组成,分别是慢查询日志的标识id、发生时间戳、命令耗时、执行命令和参数。如果要Redis将配置持久化到本地配置文件,需要执行config rewrite命令。slowlog-log-slowerthan
2023-06-26 15:42:53
432
原创 MySQL锁
MySQL自身在对插入或者修改的数据(没有显示的添加s、x锁)时进行加锁,防止其他事务进行脏读等。实现方式:判断当前记录的trx_id的值是否处于活跃事务阶段。一个事务在插入一条记录时需要判断插入位置是否已被背的事务加了gap锁。在gap锁的范围基础上添加了该条数据的范围。
2023-06-07 18:12:57
519
原创 MySQL事务隔离级别和MVCC
MVCC是MySQL中用于实现可重复读隔离级别的并发控制机制。它通过在数据行中维护多个版本来实现并发读取和写入的一致性。Read View(读视图)是用于实现多版本并发控制(MVCC)机制的重要概念之一。Read View是事务在特定时间点看到的数据库的一致性视图。根据聚簇索引记录中的两个必要列(row_id,主键或者是非NULL的唯一索引)在合适的时候把update undo日志以及仅仅被标记删除的记录彻底删除。
2023-06-05 18:06:32
626
原创 MySQL redo log、undo log、binlog
MySQL是一个广泛使用的关系型数据库管理系统,它通过一系列的日志来保证数据的一致性和持久性。在MySQL中,有三个重要的日志组件,它们分别是redo log(重做日志)、undo log(回滚日志)和binlog(二进制日志)。在下面的博客内容中,我将介绍这三个组件的实现原理。
2023-06-05 17:46:44
622
原创 Redis持久化
Redis持久化Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题。RDBRDB持久化是把当前进程数据生成快照保存到硬盘的过程,触发RDB持久化过程分为手动触发和自动触发。触发机制手动触发分别对应save和bgsave命令:save命令:阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。运行save命令对应的Redis日志如下:* DB saved on diskbgsave命令:Re
2023-06-01 10:22:32
597
原创 MySQL 事务简介
狗哥和猫爷是⼀对好基友,他们都到银⾏开⼀个账户,他们在现实世界中拥有的资产就会体现在数据库世界的account表中。+ ----+--------+---------+ | id | name | balance | + ----+--------+---------+ | 1 | 狗哥 | 11 | | 2 | 猫爷 | 2 | + ----+--------+---------+⽐⽅说有⼀次猫爷在赌场赌博输了钱,急忙打电话给狗哥要借10块钱,不然那些看场⼦的就会把⾃⼰剁了。
2023-05-31 23:43:56
462
原创 Mysql InnoDB的Buffer Pool
上述的这个间隔时间是由系统变量。每当需要从磁盘中加载⼀个⻚到Buffer Pool中时,就从free链表中取⼀个空闲的缓存⻚,并且把该缓存⻚对应的控制块的信息填上(就是该⻚所在的表空间、⻚号之类的信息),然后把该缓存⻚对应的free链表节点从链表中移除,表示该缓存⻚已经被使⽤了。,在需要访问某个⻚的数据时,先从哈希表中根据表空间号 + ⻚号看看有没有对应的缓存⻚,如果有,直接使⽤该缓存⻚就好,如果没有,那就从free链表中选⼀个空闲的缓存⻚,然后把磁盘中对应的⻚加载到该缓存⻚的位置。
2023-05-31 23:00:44
794
原创 MySQL 优化器⽣成执⾏计划的整个过程(optimizer trace)
以看到该查询可能使⽤到的索引有3个,那么为什么优化器最终选择了idx_key2⽽不选择其他的索引或者直接全表扫描呢?在MySQL 5.6以及之后的版本中才会有optimizer_trace。
2023-05-31 17:32:13
700
原创 MySQL基于规则的SQL优化
、等操作符和某个操作数组成⼀个布尔表达式,这样的⼦查询必须是标量⼦查询或者⾏⼦查询。如果查询语句中没有出现诸如SUM、MAX等等的聚集函数以及GROUP BY⼦句,优化器就把HAVING⼦句和WHERE⼦句合并起来。然后在将上⼀步⼦查询得到的结果当作外层查询的参数再执⾏外层查询SELECT * FROM s1 WHERE key1 = …不直接将不相关⼦查询的结果集当作外层查询的参数,⽽是将该结果集写⼊⼀个临时表⾥。SELECT⼦句中,我们前边说过的在查询列表中的⼦查询必须是标量⼦查询。
2023-05-30 22:38:16
535
原创 MySQL成本优化
I/O成本:把数据从磁盘加载到内存中,读取一个页面话费的成本默认是1.0。CPU成本:读取记录以及检测记录是否满足对应的搜索条件、对结果集进行排序等。读取或者检测一条记录是否符合搜索条件的成默认是0.2。
2023-05-29 16:02:24
677
原创 Join的连接原理
连接就是把各个表中的记录都取出来进行一次匹配,并把匹配后的组合发送给客户端。如果连接查询中的结果集中包含一个表中的每一条记录与另一个表中的每一条记录相互匹配的组合,那么这样的结果集就可以称为笛卡尔积。t1、t2表数据t1.m1 >1;步骤1:假设使用t1作为驱动表,那么就需要到t1表中查找满足t1.m1 >1的记录。步骤2:步骤1中从驱动表每获取到一条记录,都需要到t2表中查找匹配的记录。
2023-05-28 21:33:08
1157
转载 MySQL索引
页10中用户记录最大的主键值是 5 ,而 页28 中有一条记录的主键值是 4 ,因为 5>4 ,所以这就不符合下一个数据页中用户记录的主键值必须大于上一个页中用户记录的主键值的要求,所以在插入主键值为 4 的记录的时候需要伴随着一次记录移动,也就是把主值为 5 的记录移动到 页28 中,然后再把主键值为 4 的记录插入到页10中。这时新插入的记录根据键值(也就是聚簇索引中的主键值,二级索引中对应的索引列的值)的大小就会被分配到页a或者页 中,而根节点便升级为存储目录项记录的页。
2023-03-23 23:55:59
79
原创 InnoDB数据页结构
表示当前记录拥有的记录数,页中的数据其实还会分为多个组,每个组会有一个最大的记录,最大记录的 n_owned 就记录了这个组中的记录数。页是InnoDB管理存储的基本单位,一个页的大小一般是16KB。页头部存的是一个数据页的概要信息,是一个页专有的,而文件头存的是各种页通用的信息,比如页的类型是什么、页的编号是多少、上一页的页号是多少、下一页的页号是多少等等。表示从当前记录的真实数据到下一条记录的真实数据的地址偏移量,如果没有下一条记录就是 0,当为负数时,说明当前记录的下一条记录在当前记录的前面。
2023-03-20 00:23:44
85
原创 MySQL 存储引擎
2.仅在使用压缩行格式时才支持压缩 MyISAMtable。在 MyISAM 中使用压缩行格式的 table 是只读的。1PB(拍字节)=1024TB。1TB(太字节)=1024GB。6.MySQL 5.6 和更高版本提供了对 FULLTEXT 索引的 InnoDB 支持。4.在 MySQL 5.7 和更高版本中,支持静态数据 table 空间加密。5.MySQL Cluster NDB 7.3 和更高版本提供了对外键的支持。7.MySQL 5.7 和更高版本提供了 InnoDB 对地理空间索引的支持。
2023-02-13 16:06:58
72
原创 mysql 技巧 * 判断查询缓存是否命中
参考:https://mysqlserverteam.com/mysql-8-0-retiring-support-for-the-query-cache/MySQL 服务收到到查询请求时,会先在内存中找是否有完全一致的查询语句数据,有直接返回,无才经过一系列步骤查询数据,注意是语句完全一致才能被查询缓存命中。所以查询缓存适合有大量相同查询的应用,不适合有大量数据更新的应用。可见 Qcache_hits(缓存命中数): 1,Qcache_inserts(插入缓存数):0,查询缓存被命中。
2023-02-10 16:58:00
576
Node.js - Express 4.x框架高级实战(上).rar
2020-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人