自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用Docker一键安装MySQL与Nginx脚本

在项目开发和部署过程中,使用Docker可以方便地快速搭建和管理数据库(MySQL)以及Web服务器(Nginx)。本教程将为你提供一份一键安装脚本。

2023-11-30 22:50:54 309

原创 CentOS一键安装docker脚本

在CentOS上安装Docker是许多项目中常见的任务之一。为了简化这个过程,你可以使用下面的一键脚本。

2023-11-30 22:02:23 1366 1

原创 uniapp微信小程序消息订阅快速上手

其中thing2、phrase3是模板的字段名,根据自己模板去修改即可。这边的模板id和详细内容后续前后端需要使用。需要是一个button触发。

2023-08-16 23:30:09 1184

原创 富文本CKEditor5简易入门,包括自定义上传图片(html版+vue.js)

CKeditor简易入门

2023-07-24 21:41:28 2151

原创 Nginx将ws升级为wss

使用nginx将ws升级为wss

2023-02-19 11:43:53 1312 6

原创 CentOS 7脚本一键安装MySQL5.7、Nginx

CentOS7 一键安装MySQL、Nginx脚本

2022-03-14 21:54:43 4392

原创 利用BigInteger的setBit、testBit实现权限控制

setBit /** * Returns a BigInteger whose value is equivalent to this BigInteger * with the designated bit set. (Computes {@code (this | (1<<n))}.) * * @param n index of bit to set. * @return {@code this | (1<<n)}

2022-03-14 15:10:24 216

原创 windows清理过去N天的文件夹或文件

需求有时候可能需要定时清理一些文件或文件夹,在windows下可以使用Bat脚本来执行清理某个目录下的文件forfiles /p "E:\logs" /s /m *.* /d -240 /c "cmd /c del @path"其中/d -240 表示清理240天以前的文件清理某个目录下的文件夹及其文件set SrcDir=E:\img\set DaysAgo=100forfiles /p %SrcDir% /d -%DaysAgo% /c "cmd /c if @isdir==TRUE

2021-12-18 11:12:42 1028

原创 SpringBoot整合CaffineCache实现redis的一级缓存,热key问题的一种简单解决

导言主要通过AOP的方式,在redis查询方法上加上自定义注解,实现先查询caffineCache一级缓存,然后再查redis,同时将结果缓存到一级缓存中,支持redis的集合批量查询以及单key查询。一、导入pom <dependency> <groupId>com.github.ben-manes.caffeine</groupId> <artifactId>caffeine</a

2021-08-10 11:22:41 480

原创 SpringBoot整合Redis实现简单发布/订阅

一、添加pom<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt

2021-07-19 17:52:49 113

原创 Ubuntu将openssl7.2离线升级到7.4

背景 因为安全原因,服务器无法访问外网,不能通过apt-get安装各种包,因此只能通过其他ubuntu服务器下载所有deb包后再拷贝过去手动安装。步骤1.找一台尽量相同版本的ubuntu服务器2.在/var/cache/apt下新建一键下载依赖包的脚本download.sh#!/bin/bash logfile=/home/logret=""function getDepends(){ echo "fileName is" $1>>$logfile # us

2021-05-29 13:45:45 275 1

原创 分布式会话Session

粘性会话 Sticky Session会话复制 Session Replication集中会话 Centralized Session集中会话Spring Session简化集群中的用户会话管理无需绑定容器特定解决方案支持的存储RedisMongoDBJDBCHazelcast实现原理定制HttpSession通过定制的HttpServletRequest返回定制的HttpSessionSessionRepositoryRequestWrapperSession.

2021-04-24 21:41:11 99

原创 负载均衡

一、Round-Robin功能在加权轮询的方式访问server指令的上游服务,集成在Nginx的upstream框架中指令weight服务访问的权重,默认1max_connsserver的最大并发连接数,仅作用于单worker进程。默认0,无限制max_fails在fail_timeout时间段内,最大的失败次数。当达到最大失败时,会在fail_timeout秒内这台server不允许再次被选择fail_timeout单位为秒,默认值为10s。指定一段时间内,最大的失败次数max_fa

2021-04-24 15:25:24 86

原创 CentOS下用Certbot部署Nginx的HTTPS

1.安装yum install epel-releaseyum install python2-certbot-nginx2.设置软链接ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginxln -s /usr/local/nginx/conf/ /etc/nginx3.生成证书并自动部署-d 后面为你的域名certbox --nginx -d xxx.com...

2021-04-23 14:58:35 116

原创 使用GoAccess实时动态监控Nginx

一、准备工作开启utf8以及GeoIP,安装相应依赖包utf8yum install -y ncurses-develgeoIpwget https://github.com/maxmind/geoip-api-c/releases/download/v1.6.11/GeoIP-1.6.11.tar.gztar -xzvf GeoIP-1.6.11.tar.gzcd GeoIP-1.6.11./configuremake && make install二、安装GoAc

2021-04-23 14:08:30 254

原创 Oracle 数据导出导入exp imp

保证oracle版本一致,尽量到源数据库所在服务器进行以下操作。安装sqlplus环境参考 https://www.cnblogs.com/immer/p/5336607.html导出命令expexp 用户名/密码@IP/服务名 file=D:\xxx.dmp常用参数:full=y指明导出全库,导出全库的用户必须拥有exp_full_database的权限,用sys特权用户导出的,必须由sys特权用户导入ingore=y 如果表不存在就创建表结构;已经存在则直接导入数据tables=(表

2021-04-16 17:57:50 87

原创 事务的传播特性

开启事务注解的方式@EnableTransactionManagement@TransactionaltransactionManagerpropagationisolationtimeoutreadOnly

2021-03-29 21:36:06 79

原创 Full GC触发条件

System.gc()方法的调用老年代空间不足持久代空间满了,在未配置采用CMS GC的情况下会执行Full GC通过Minor GC后进入老年代的平均大小大于老年代的可用内存由Eden区、From Space区向To Space区复制时,对象大小大于To Space可用内存,则把该对象转存到老年代,且老年代可用内存不足...

2021-03-03 14:38:41 294 1

原创 volatile可见性

场景引入java内存模型中,每个线程都有自己的工作内存,同时还有一个共享的主内存。如上图所示,比如有两个线程,他们都需要读取data变量,那么就会从主内存中加载data变量的值到自己的工作内存,然后才能使用data。如果线程1修改了data为1,然后将这个修改写入工作内存,那么线程1中的data为1,然而主内存的data还是0,线程2的data也是0,这就是java并发编程中的可见性问题:多个线程并发读写一个共享变量的时候,有可能某个线程修改了变量的值,但是其他线程看不到,也就是对其他线程不可见。

2021-03-03 12:48:24 104

原创 简单工厂模式

定义由一个工厂对象决定创建出哪一种产品类的实例类型创建型,但不属于GOF23种设计模式适用场景工厂类负责创建的对象比较少客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心优点只需要传入一个正确的参数,就可以获取所需要的对象而无需知道其创建细节缺点工厂类的职责相对较重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则Codingpublic interface Video { public void produce();}public clas

2021-02-21 13:58:29 89

原创 软件设计六大原则

一、七大设计原则开闭原则依赖倒置原则单一职责原则接口隔离原则迪米特法则(最少知道原则)里氏替换原则合成/复用原则(组合/复用原则)二、开闭原则定义:一个软件实体如类、模块和函数应该对扩展开放,对修改关闭用抽象构建框架,用实现扩展细节优点:提高软件系统的可复用性和可维护性如上图,接口ICourse定义了id、name、price,JavaCourse实现了它,现在需要获取到折扣价格,不能直接去修改ICourse接口以及JavaCourse基类(对修改关闭),应该新建一个Java

2021-02-20 19:26:44 4684

原创 统一建模语言UML简介

一、UML定义统一建模语言(Unified Modeling Language)非专利的第三代建模和规约语言二、UML特点UML是一种开放的方法用于说明、可视化、构建和编写一个正在开发的面向对象的、软件密集系统的制品的开放方法UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效三、UML类图UML箭头方向:子类指向父类空心三角箭头:实线-继承 | 虚线-实现三角箭头:实线-关联 | 虚线-依赖空心菱形-聚合(

2021-02-20 17:34:05 363

原创 SpringBoot整合RabbitMQ Demo

引入pom <!--rabbitmq--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>修改application.yml生产端配

2021-02-10 23:07:20 304

原创 MQ消费端——幂等性保障

什么是幂等性用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用我们可以借鉴数据库的乐观锁机制比如我们执行一条更新库存的SQL语句UPDATE T_REPS SET COUNT = COUNT -1,VERSION = VERSION +1 WHERE VERSION = 1唯一ID +指纹码 机制唯一ID + 指纹码机制,利用数据库主键去重SELECT COUNT(1) FROM T_ORDER WHERE ID = 唯一ID + 指纹码好处:实现

2021-02-10 22:08:35 199

原创 MQ消息如何保障100%的投递成功?

什么是生产端的可靠性投递?保障消息的成功发出保障MQ节点的成功接收发送端收到MQ节点(Brker)确认应答完善的消息进行补偿机制互联网大厂的解决方案:1.消息落库,对消息状态进行打标第一步,将业务、消息入库,如果第一步失败直接快速失败第二步,将消息发送出去第三步,将收到消息的应答(confirm)返回给生产端第四步,将消息状态从0->更新成1(表示发送成功)第五步,分布式定时任务获取消息状态为0的消息第六步,重新投递回到第二步第七步,如果重试次数大于3,那么将消息状态从

2021-02-09 20:03:33 712

原创 RabbitMQ简介

消息落库,对消息状态进行打标第一步,将消息或业务消息的延迟投递,做二次确认,回调检查

2021-02-09 19:36:53 139 1

原创 分布式消息中间件MQ认知

MQ的应用场景服务解耦削峰填谷(大促、秒杀等)异步化缓冲(最终一致性)MQ应用思考点生产端可靠性投递消费端幂等高可用低延迟可靠性(分片、副本)堆积能力拓展性RabbitMQ四种集群架构主备模式warren(兔子窝),一个主/备方案(主节点如果挂了,从节点提供服务,和ActiveMQ利用Zookeeper做主/备一样)HaProxy配置listen rebbitmq_clusterbind 0.0.0.0:5672 #配置TCP模式mode tcp #

2021-02-09 15:32:13 156 1

原创 打包部署YU教程

一、打开pom,将这些注释打开二、打开YuApplication.java启动类,把下面注释打开三、打开右侧的maven->Lifecycle,双击package稍等片刻,显示BUILD SUCCESS可在左侧target下找到刚生成的war包四、下载解压tomcat官网地址五、将war包部署到tomcat,打开tomcat目录->webapps将webapps下的ROOT文件夹删除,将上面的war包复制过来,重命名为ROOT.war附:解决tomcat控制台

2021-02-07 21:01:48 225

原创 分布式会话拦截器

一、创建拦截器public class UserTokenInterceptor implements HandlerInterceptor { //封装的操作redis的类 @Autowired private RedisOperator redisOperator; /*** * 调用controller之前拦截请求 * @param request * @param response * @param handler * @return

2021-02-05 13:18:04 156

原创 SpringSession实现分布式用户会话

一、导入pom<!-- springsession需要用到安全框架--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency><dependency> <groupId>org.springfram

2021-02-05 11:48:51 114

原创 Redis批量查询pipeline

直接给出示例,以批量查询String为例:public List<Object> batchGet(List<String> keys){ List<Object> res = redisTemplate.executePipelined(new RedisCallback<String>() { @Override public String doInRedis(RedisConnection redisConnectio

2021-02-04 22:51:43 481

原创 redis缓存穿透、缓存雪崩

一、缓存穿透描述是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。解决方案把查询的结果即使也为空也放入缓存,设定一个较短的缓存时间二、缓存雪崩描述缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至宕机。雪崩预防永不过期过期时间错开(增加随机因子)多缓存结合(如MemCache)采购第三

2021-02-04 22:40:41 45

原创 SpringBoot集成Redis集群

application.ymlspring: redis: password: mypassword cluster: nodes: 192.168.1.201:6379,192.168.1.202:6379,192.168.1.203:6379,192.168.1.204:6379,192.168.1.205:6379,192.168.1.206:6379

2021-02-04 21:49:04 69

原创 搭建Redis的三主三从集群模式

一、准备6台服务器,都部署好redis二、配置redis.conf,搜索CLUSTER#开启集群cluseter-enabled yes#结点配置文件cluster-config-file nodes-6379.conf#超时时间cluster-node-timeout 5000#开启AOFappendonly yes三、删除dump.rdb和appendonly.aof如果redis数据库目录有dump.rdb和appendonly.aof文件,则删除它们,否则构建集群会报错四

2021-02-04 21:45:36 151

原创 SpringBoot集成Redis哨兵

application.ymlspring: redis: database: 1 password: mypassword sentinel: master: mymaster nodes: 192.168.1.191:26379,192.168.1.192:26379,192.168.1.193:26379

2021-02-04 19:14:14 71

原创 Redis哨兵机制与实现

一、引子Redis搭建了主从复制后,有一个致命的问题,就是Master结点宕机,如何保证可用性,实现继续读写,因此提出了Redis哨兵机制。二、什么是哨兵Sentinel(哨兵)是用于监控Redis集群中Master状态的工具,是 Redis 高可用解决方案,哨兵可以监视一个或者多个redis master服务,以及这些master服务的所有从服务。某个master服务宕机后,会把这个master下的某个从服务升级为master来替代已宕机的master继续工作三、配置哨兵监控master1.在/

2021-02-04 17:11:15 66

原创 Redis缓存过期处理与内存淘汰机制

一、已过期的key Redis如何处理设置了expire的key缓存过期了,但是服务器的内存还是会被占用,这是因为redis所基于的两种删除策略redis有两种策略(主动)定时删除定时随机的检查过期的key,如果过期则清理删除。(每秒检查次数在redis.conf中的hz配置)(被动)惰性删除当客户端请求一个已经过期的key的时候,那么redis会检查这个key是否过期,如果过期了,则删除,然后返回一个nil。这种策略对cpu比较友好,不会有太多的损耗,但是内存占用会比较高。所以,虽然key

2021-02-04 16:08:00 170

原创 搭建Redis主从复制,实现读写分离

一、准备三台Redis服务器,其中两台作为salve二、首先编辑其中一台slave(192)的redis.conf,搜索replication配置主节点的IP及端口号replicaof 192.168.1.191 6379设置master的密码masterauth mypassword三、重启redis,另一个从服务器相同配置即可可以连接redis客户端后输入命令,查看节点信息redis-cliauth mypassword>>info replication查看

2021-02-04 15:40:46 108

原创 Redis的持久化方式RDB和AOF

一、Redis的持久化机制-RDB(Redis DataBase)1. 什么是RDB每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的,所以重启Redis后,则会恢复。2. 备份与恢复内存备份 --> 磁盘临时文件临时文件 --> 恢复到内存3. RDB优劣势优势每隔一段时间备份,全量备份灾备简单,可以远程传输子进程备份的时候,主进程不会有任何io操作(不会有写入修改或删除),保证备份数据

2021-02-04 15:10:18 54

原创 SpringBoot整合Redis

一、添加pom依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId></dependency>二、yml里配置redisspring: redis: database: 1 host: 192.168.1.191 port: 6379

2021-02-02 19:33:35 58

空空如也

空空如也

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

TA关注的人

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