- 博客(118)
- 资源 (1)
- 收藏
- 关注
原创 三台 Centos7.9 中 Docker 部署 Redis 哨兵模式
sentinel auth-pass mymaster your_master_password:为哨兵提供与 Redis 主节点通信时使用的密码。在每台服务器上创建自己的 docker-compose.yml 文件。在每个服务器上创建 redis.conf 文件,内容如下。Redis 主节点和哨兵将在同一台服务器上运行。masterauth:从节点用此密码认证主节点。requirepass:设置访问实例的密码。redis.conf (适用于主节点)查看日志确认哨兵是否选出新的主节点。
2025-01-14 22:51:55
542
原创 三台Centos7.9中Docker部署Redis集群模式
你需要在每台服务器上使用 Docker 容器部署 Redis 实例,每台服务器配置两个 Redis 容器,一个主节点,一个从节点。使用 Docker Compose 管理每台服务器上的 Redis 实例。配置 Redis 集群时,可以通过 redis-cli --cluster create 命令来创建集群。Redis 集群成功创建后,可以通过 cluster nodes 命令验证集群状态。
2025-01-13 00:09:49
1030
翻译 Mysql的几种日志-面试专题
binlog记录数据库表结构和表数据变更,比如update/delete/insert/truncate/create,它不会记录select。存储着每条变更的SQL语句和XID事务Id等等。主要有两个作用:复制和恢复数据主要有两个作用:复制和恢复数据【1】MySQL架构为了高可用性都是一主多从,从服务器需要与主服务器保持数据一致,这就是通过binlog进行复制;【2】数据库的数据如果被误删,可以通过binlog数据进行恢复。
2024-02-22 12:53:26
92
1
原创 Mysql的SQL调优-面试专题
通常为了方便拼装查询条件,我们会默认使用该条件,数据库引擎会放弃索引进行全表扫描。貌似两种方式效率差不多,即使union扫描的是索引,or扫描的是全表)优化方式:用代码拼装sql时进行判断,没where加where,有where加and。6、尽量避免进行null值的判断,会导致数据库引擎放弃索引进行全表扫描。优化方式:如果是连续数值,可以用between代替。优化方式:可以给字段添加默认值0,对0值进行判断。优化方式:使用具体的字段代替 *,只返回使用到的字段。优化方式:尽量在字段后面使用模糊查询。
2024-02-21 23:53:01
1829
原创 Ubuntun20安装及其部署
启动完成后记得使用:redis-cli shutdown,否则后面全局无法启动。以上方法设置后,竟然直接可以使用systemctl实现,暂不清楚为何。把 daemonize no 改为 daemonize yes。上面的命令可能会和下面的自启动冲突,下面的失效使用上的。1、安装net-tools,方便使用:ifconfig。5、安装vim,否则出现vi上下左右为ABCD的问题。没有用root登录,而是用其他账户,参考方法6。2、安装ssh,方便客户端ssh访问。后续增加大小写及其其他设置。
2023-05-20 01:27:03
1241
原创 SDK版本管理工具-SDKMAN
可以安装SDKMAN!到 $HOME/.sdkman 以外的自定义位置。这可以通过在安装之前将您的自定义位置导出为 SDKMAN_DIR 来实现。为此,您的用户必须拥有对该文件夹的完全访问权限,这一点至关重要。该文件夹不作为 SDKMAN 存在也很重要!将尝试创建它。
2023-05-09 12:40:39
1180
原创 Centos7.6部署ruoyi-vue记录
使用mvn package打包后,在ruoyi-admin目录获取ruoyi-admin.jar,上传服务器运行即可。以上讨论的方式都是基于原始的部署方式,docker部署后续增加。
2023-04-29 21:46:30
346
原创 ThreadPoolExecutor源码剖析
三、线程池的执行流程为什么要先进行阻塞在去尝试创建非核心线程:**举例解释:**饭店(线程池)-厨子(线程)-排队(阻塞)、招厨子(创建线程)?-今日客满(拒绝策略)4.2、线程池的状态变化从execute方法开始(对应4.2的线程变化图):通过上述源码,线程池的执行流程,同4.2,以下将进行addWorker方法七、Worker的封装runWorker方法:可以继续深入getTask方法,以及processWorkerExit方法......
2022-06-08 18:22:54
421
原创 CopyOnWriteArrayList学习
CopyOnWriteArrayList简介 在很多应用场景中,读操作可能会远远大于写操作。由于读操作根本不会修改原有的数据,因此对于每次读取都进行加锁其实是一种资源浪费。我们应该允许多个线程同时访问 List 的内部数据,毕竟读取操作是安全的。 这和我们之前在多线程ReentrantReadWriteLock读写锁的思想非常类似,也就是读读共享、写写互斥、读写互斥、写读互斥。JDK中提供了CopyOnWriteArrayList类比相比于在读写锁的思想又更进一步。为了将读取的性能发挥到极致,Cop
2022-05-26 12:10:57
160
原创 HashMap原理学习
1、HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.7:数组+链表:“拉链法” :将链表和数组相结合。也就是说创建一个链表数组,数组中每一格就是一个链表。若遇到哈希冲突,则将冲突的值加到链表中即可。JDK1.8:数组+链表+红黑树:相比于之前的版本,jdk1.8在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间。2、hashMap基本属性publicclassHas
2022-05-25 11:56:10
138
转载 前端JS接口错误、超时处理
// postAPI(data) 网络接口 let promise = new Promise((resolve,reject)=>{ const timer = setTimeout(()=>{ reject("timeout"); },1000); // 若接口未返回,则1秒后reject, postAPI(data,res()=>{ clearTimeout(timer); // 关闭定时器 resolve(res); // 接口.
2022-05-24 15:07:36
4228
翻译 Java8的Stream流学习总结
什么是 Stream?Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等。聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, Stream操作还有两个基础的特征:Pipelining: 中
2022-05-24 11:36:47
188
原创 uniapp微信支付方案
使用uniapp对接微信支付,目前发现有两种方式:微信支付原生方式;uniapp的unipay方式(unicloud)。本次由于暂不熟悉unicloud方式,后面仔细研究unicloud方式。注意事项:同时目前的微信支付分为V2和V3版本,注意版本选择开发链接指引1、普通商户开发流程文档2、开发指引附带代码文档后端创建订单1、使用开发指引2进行后端下单,生成参数前端使用;2、签名生成算法见:https://pay.weixin.qq.com/wiki/doc/apiv3/wecha
2022-05-10 16:41:46
3843
原创 CAS-CompareAndSet源码分析
CAS是什么?第一反应应该有两种:1、Cas单点登录,当然本次不讨论这一方面的问题;2、compareAndSet方法,先学习其API,再精通原理,才是我们学习代码的正确方法,不要被我们小时候填鸭式的教学影响,和学习数学、英语等知识学科不同,因此直接来一段代码:CAS API用法: //原子操作 AtomicInteger atomicInteger = new AtomicInteger(5); //期望值为5,若和5相同,则改为2019 System.out.println(atomic
2022-02-23 18:42:18
515
原创 https免费证书获取方式
1、前往来此加密官网申请证书https://letsencrypt.osfipin.com/2、申请证书,3、验证证书:dns验证:前往所在云dns解析服务https认证:使用nginx认证4、下载证书后,切记不能用迅雷下载,要用浏览器自带下载,否则会造成文件丢失......
2022-01-10 10:46:27
4745
原创 el-select如何选择整个对象item
el-select选择整个对象踩坑记录1、官方文档说明2、整个对象item被选择的方法:必须使用value-key3、参考链接:1、官方文档说明 官方文档提到一句说:这里说的对象指的就是选择器中的对象或数组的item对象2、整个对象item被选择的方法:必须使用value-key<el-select v-model="subProjectInfo.user" value-key="userName" placeholder="请选择人员" @change="change">
2021-12-15 11:40:41
1661
原创 Mybatis分页插件Pagehelper分析
Mybatis分页插件Pagehelper用法及其分析0、PageHelper的用法:在service层中的mapper接口前加入,只分页statrtPage后的第一个sql://实现分页方法PageHelper.startPage(startIndex, endIndex);//前端经常需要获取总条数或者总页数,就需要在返回的结果做处理,list为查询返回结果Long total = new PageInfo(list).getTotal();//通过自定义的统一返回值返回给前端或
2021-12-09 16:36:52
340
翻译 MySQL数据类型与Java数据类型
MySQL Connector/J在处理MySQL数据类型和Java数据类型之间的转换方面非常灵活。通常,任何MySQL数据类型都可以转换为java.lang。String和任何数字类型都可以转换为任何Java数字类型,尽管可能会发生舍入、溢出或精度损失。 Connector/J按照JDBC规范的要求发出警告或抛出DataTruncation异常,除非通过使用属性jdbcCompliantTruncation并将其设置为false,将连接配置为不这样做。 下表中列出了始终保证有效的转换。第一列
2021-12-07 16:32:55
1886
原创 css控制字符长度超出变成点点点显示(单行,多行)
单行:width 必不可少.div{ width: 80%; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}多行(需要浏览器支持该属性):.div{ overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -w
2021-11-11 15:00:17
1492
转载 mybatis 实现多条update同时执行
mybatis 实现多条update同时执行想在mapper的一个更新节点进行多条update语句的操作: <update id="cleanUserByPhone" parameterType="java.lang.String"> update user set valid_status = 1 where mobile_phone = #{mobilePhone}; update user_account set valid_status = 1 where mobile_ph
2021-11-10 12:04:05
1911
原创 前后端参数对应总结
文章目录前后端交互参数总结一、Web端的Axios传参二、Uniapp使用Luch-request传参前后端交互参数总结一、Web端的Axios传参前端使用Axios,后端使用SpringBoot:1、url的param类型:(1)、常规的形如:“xxx/coop/list?pageNum=1&pageSize=10” //前端js Api export function getSubProjectList(param) { return request({ url:
2021-09-27 16:39:14
647
2
原创 Ftp用户和用户组操作
Ftp用户和用户组操作1、添加用户组命令groupadd -g 140 tbeaftp2、用户添加入用户组gpasswd -a "用户" “用户组”3、改变文件用户组 chgrp -R “用户组” "文件夹"4、更改文件夹权限,使得当前用户组成员访问chmod -R 775 “文件夹”5、查看用户组命令cat /etc/group6、修改文件夹归属chown -R “用户” "文件夹"...
2021-02-20 19:34:38
1652
转载 Mysql的GROUP BY和JOIN学习
GROUP BY分组( GROUP BY)操作和其他的关系操作不同,因为它改变了关系的结构。来看下面的示例: SELECT department_id, count(*), first_name FROM employees GROUP BY department_id;该语句的目的是按照部门统计员工的数量,但是存在一个语法错误,就是 first_name 不能出现在查询列表中。原因在于按照部门进行分组的话,每个部门包含多个员工;无法确定需要显示哪个员工的姓名,这是一个逻辑上的错误。所以
2020-10-10 11:23:16
2224
原创 Vue父子组件之间的传值
Vue父子组件之间的传值父组件向子组件传值传递静态或动态 Prop<blog-post title="My journey with Vue"></blog-post>prop 可以通过 v-bind 动态赋值,例如:<!-- 动态赋予一个变量的值 --><blog-post v-bind:title="post.title"></blog-post><!-- 动态赋予一个复杂表达式的值 --><blo
2020-09-23 17:47:13
160
转载 Linux防火墙Firewall和Iptables的使用
Linux防火墙Firewall和Iptables的使用Linux中有两种防火墙软件,ConterOS7.0以上使用的是firewall,ConterOS7.0以下使用的是iptables,本文将分别介绍两种防火墙软件的使用。Firewall开启防火墙:systemctl start firewalld关闭防火墙:systemctl stop firewalld查看防火墙状态:systemctl status firewalld设置开机启动:systemctl en
2020-09-23 11:53:22
188
转载 Mybatis 中遍历map 参数中的 list 和 array 属性
Mybatis 中遍历map 参数中的 list 和 array 属性文章目录Mybatis 中遍历map 参数中的 list 和 array 属性问题解决方案代码controller层dao层mapper.xml参考链接问题在项目有中遇到批量删除操作时,需要根据两个属性去删除数据,其中一个是类型:type,另一个是ids:数组形式的id数组。由于在官方文档中只是简单的介绍foreach的用法,套用之后进行批量删除操作:提示遍历map中的array 属性是无法获取值.解决方案代码controll
2020-09-22 15:39:03
1249
转载 JS中var和let的区别
var和let的区别:区别:1.使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象;2.使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升;3.let不允许在相同作用域内,重复声明同一个变量。1.基本语法{ let a = 125; var b = 521;}a // Uncaught ReferenceError: a is not definedb // 521总结:使用let声明的变量报错,var声明的返回正确的值,这说明,let声明
2020-09-10 14:57:24
24136
5
原创 flex布局样例
flex布局样例<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title></title> </head> <body> <div class="first-face"> <span class="pip"></span> </div> <div class=
2020-09-08 10:43:44
155
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人