- 博客(167)
- 资源 (3)
- 收藏
- 关注
原创 部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?
部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?
2022-11-16 21:51:51
5903
3
原创 内存交换导致k8s启动失败问题 code=exited, status=1/FAILURE
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS (code=exited, status=1/FAILURE)
2022-11-16 20:58:40
2192
1
原创 如何从request中获取域名
//获取是http 还是 https,如果有通过nginx就行转发,记得配置带上sceme信息String scheme = request.getScheme();System.out.println("scheme = " + scheme);//获取域名 String serverName = request.getServerName();System.out.println("serverName = " + serverName);//组装成基础urlString basePat.
2021-09-26 11:34:17
7652
转载 mysql 查询账号创建
一. 创建用户命令:CREATE USER '用户名'@'允许的主机' IDENTIFIED BY '密码';说明:username:你将创建的用户名 host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符% password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器例子:CREATE USER 'mysqluser'@'localhost' IDENTIFIED
2021-04-09 16:27:52
1796
转载 2021-04-02
在用复制账号对mysql salve管理过程中,使用哪些权限合适?首先看一下mysql官方提供的权限表: 权限 列 上下文 CREATE Create_priv 数据库、表或索引 DROP Drop_priv 数据库或表 GRANT OPTION Grant_priv .
2021-04-02 15:36:33
1132
原创 java中如何查看一个实例对象的大小
绕开所有的介绍,直接上代码(1)引入相关的工具依赖 <dependency> <groupId>com.carrotsearch</groupId> <artifactId>java-sizeof</artifactId> <version>0.0.5</version> </dependency>(2)关键的类/** * Estimates the size (m
2021-03-15 14:05:34
1737
原创 Curator 源码初探(四)读写锁
InterProcessReadWriteLock lock = new InterProcessReadWriteLock( client, "/locks/lock_01"); lock.writeLock().acquire(); lock.readLock().acquire(); lock.readLock().release(); lock.writeLock().release(); 创建读写锁,底层是基于InternalInterProcessMutex,创.
2021-02-28 19:36:28
477
原创 Curator 源码初探(三) 非重入锁
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient( "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", retryPolicy); client.start(); InterProcessSemaphoreMutex lock = n.
2021-02-28 18:29:02
306
原创 Curator 源码初探(二) Semaphore
RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient( "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", retryPolicy); client.start(); InterProcessSemaphoreV2 semaphore = n.
2021-02-28 18:11:50
448
原创 Curator 源码初探(一) 公平锁
Curator 是一个基于ZK实现的分布式锁框架RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3); CuratorFramework client = CuratorFrameworkFactory.newClient( "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", retryPolicy); client.start(); InterP.
2021-02-28 12:37:05
476
1
原创 Redisson 源码初探(十一) CountDownLatch
我们都知道JDK 并发包里面有CountDownLatch 类,这个类是干嘛用的?简单的理解就是,我们主线程设置一个条件,然后阻塞,等其他线程去将条件达成,就可以让主线程继续执行下去当然这里的条件就是数字那么Redisson 是如何实现的? public static void main(String[] args) throws Exception { //构建一个配置信息对象 Config config = new Config(); .
2021-02-27 21:38:31
859
原创 Redisson 源码初探(十) Semaphore 模式
redisson 内部实现的还有一种semaphore 信号量的模式,这个是个什么模式?大白话说就是资源池中存在一部分共享的资源,多个线程可以从资源池里面去获取资源,如果资源被获取完,那么其他向获取资源的线程就需要等待,别人释放资源。其实逻辑很清晰(1)设置资源池的数量 也就是设置对应的semaphore key的 value值(2)尝试获取资源,如果足够 对资源池key 对应的value - 数量,如果不足够,进入死循环,不停的尝试获取(3)释放资源,其实就是将对应的key的value.
2021-02-27 16:00:47
1591
原创 Redisson 源码初探(九)ReadWriteLock 读写锁
读写锁得概念我们就不再赘述了public static void main(String[] args) throws Exception { //构建一个配置信息对象 Config config = new Config(); config.useClusterServers() //定时扫描连接信息 默认1000ms .setScanInterval(2000)
2021-02-27 15:12:12
1377
原创 Redisson 源码初探(八) RedLock
本篇主要讲解Redisson中得RedLock实现,但是很多知识因为和前面一样,就直接省略了RedLock 原理理一下:(1)获取当前时间戳,单位是毫秒(2)和RedissonMultiLock一样,一次轮询尝试去每个机器上创建锁,需要加一个超时时间,如果超过一定时间就表示获取锁失败(3)尝试在大多数节点上建立一个锁,如果3个节点就要求创建 n/2 + 1 = 2个节点上创建锁(4)客户端计算建立锁的时间,如果在规定时间内,建立锁成功,就代表加锁成功(5)如果建立锁失败,那么就会依次
2021-02-27 10:03:57
422
1
原创 Redisson源码初探(七) MutiLock
MutiLock 说明东西?就是可以将多个锁合并成一个大锁,对一个大锁进行统一的申请和释放。其实就是一次性的去锁定多个资源,然后处理业务,最后统一释放我们看源码之前先思考一下,这个如果基于之前的一些思想,如何去实现这个功能????难道是就是对多个所RedissonLock 依次去加锁?所有的锁加锁成功就代表MultiLock加锁成功?我们还是先看看Redisson如何使用,也就是我们看源码的入口对把public static void main(String[] args) throws E.
2021-02-27 09:08:37
807
原创 Redisson 源码初探 (六)公平锁
因为Redisson 默认是非公平锁,client 端互相一起争抢,现在我们继续研究公平锁,为什么要研究?研究分布式锁 不仅仅要研究最基础的锁对吧,我们要把一系列的非公平锁 公平锁 读写锁 RedLock锁,Semaphore CountDownLatch 一系列的研究完,才算真正的研究了分布式锁,对吧那么公平锁呢,我们知道公平锁需要维持一个有序的获取锁的顺序,可以使用队列也可以使用一些其他的机制,那么我们慢慢来看Redisson的公平锁是如何实现的?先找到入口 public static .
2021-02-26 21:22:18
1017
原创 Redisson 源码初探(五)获取锁超时 以及 锁超时自动释放
获取锁超自动发现,方法有所改变,不再是使用lock.lock(),而是使用lock.tryLock()public static void main(String[] args) throws Exception { //构建一个配置信息对象 Config config = new Config(); config.useClusterServers() //定时扫描连接信息 默认1000ms .
2021-02-24 19:44:59
4929
原创 Redisson 源码初探(四)释放锁
@Override public void unlock() { try { //unlockAsync 是异步化的释放锁 //这里的get 包裹是将异步变为同步 get(unlockAsync(Thread.currentThread().getId())); } catch (RedisException e) { if (e.getCause() instance..
2021-02-23 10:45:42
979
原创 Redisson 源码初探(三)可重入锁 以及 互斥阻塞
Redisson 的代码质量相当的不错,从抽象设计 代码的思路 和 顺序 读别人源码都非常的清晰,不想Spring Cloud 的eureka 和 hystrix 读起来 相当的混乱。可重入锁对吧,就是一个线程加锁两次,那么redisson 又是如何实现的呢,其实这里还是要去看lua脚本lock()加锁的逻辑是一样的,最本质的区别再与lua脚本<T> RFuture<T> tryLockInnerAsync(long leaseTime, TimeUnit unit,
2021-02-23 10:45:19
1004
原创 Redisson 分布式锁(二)lock 续约操作以及对应的lua脚本
private <T> RFuture<Long> tryAcquireAsync(long leaseTime, TimeUnit unit, final long threadId) { if (leaseTime != -1) { return tryLockInnerAsync(leaseTime, unit, threadId, RedisCommands.EVAL_LONG); } //这里是什么?.
2021-02-23 09:29:00
1276
原创 Redisson 源码初探 (如何上锁 lua脚本的使用)
Redisson的基本使用pom 依赖<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.1</version> </dependency> public static void main(String[] args) throws.
2021-02-22 11:49:53
1298
原创 git warning:not all local changes may be shown due to an error:
下午敲完代码,准备提交,突然一行提示,warning:not all local changes may be shown due to an error:心头一紧,我的代码怎么没有提示修改呢?不会吧但是确实我本地代码是已经修改过了,那么肯定估计是idea 又抽风了 ,咋办呢。我先自己先备份一份代码在本地,以防万一我查了下网上的操作解决方案:选择File --> settings --> Version Control --> Subversion取消选中 .
2021-01-26 15:18:06
5168
5
原创 mycat 配置文件元素类型为“mycat:schema“ 的内容必须匹配 “(schema*,dataNode*,dataHost*)“。
记录一下mycat 配置文件注意事项。什么意思?注意这意思是你配置文件的时候一定要按照 schema dataNode dataHost 的顺序来配置节点信息。出现这种问题是因为有些伙伴喜欢按不同的数据库节点关联关系放置,不按照dom节点顺序放置就会产生这样的效果 <!--先放置schame dom节点信息--> <schema name="campus_test_2020online" checkSQLschema="false" sqlMaxLimi..
2021-01-19 12:33:08
1490
原创 hadoop 源码分析(二)HDFS nameNode 之 FSNamesystem初始化源码分析之加载fsImage 和 edits log
上一篇 讲解了nameNode启动的时候,NameNodeHttpServer的启动流程,其实简单来说就是基于hadoop自己实现的HttpServer2服务绑定一个InetSokcetAddress地址,也就是端口号,端口号哪来的?默认配置文件获取呗,最后在将HttpServer2中绑定一些servlet来处理url请求就完成了我们50070端口的请求处理。那么本篇分析nameNode进程第二个比较核心的,应该说是最核心的组件FSNamesystem,为什么说是最核心组件呢,因为元数据管理和bloc.
2021-01-16 13:39:55
905
原创 hadoop 源码分析(一)HDFS nameNode 之 httpServer启动源码分析
一、HDFS概述基于hadoop2.6HDFS被设计能够运行在通用硬件上、提供流式数据操作、能够处理超大文件的分布式文件系统。特点:高容错和高吞吐量、易扩展、高可靠性HDFS的四个核心模块:namenode节点、datanode节点、客户端、HDFS协议(RPC协议、流式接口协议:HTTP和TCP)这里一些基本的概念我们就不重复叙述了,毕竟都是看源码的人了,连基本操作都不会我肯定是不信的所以我们直接进入正题二、nameNode 之 httpServer启动源码分析源码分析是一个缓慢的过
2021-01-07 19:02:07
581
1
原创 mycat 可视化监控 mycat-web 安装使用
下载地址:http://dl.mycat.org.cn/里面就有zk包,jdk包,以及mycat-web包,注意:地址有可能会发生变化,如果失效了,直接去mycat官网找到下载就行1.下载安装zookeeper服务下载zk包wget http://dl.mycat.org.cn/zookeeper-3.4.6.tar.gz解压tar xvf zookeeper-3.4.6.tar.gz -C /usr/local/cd /usr/local/zookeeper-3.4..
2020-12-30 15:58:32
922
原创 Centos7 Mysql5.7 Xtrabackup的安装与使用
Xtrabackup的安装与使用1. XtraBackup 简介物理备份:开源最佳工具Xtrabackup XtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且全部开源,真可谓是业界良心。阿里的 RDS MySQL 物理备份就是基于这个工具做的。由于是采取物理拷贝的方式来做的备份,所以速度非常快,几十G数据几分钟就搞定了,而它巧
2020-12-25 12:27:47
3006
5
原创 微信公众号开发(一)环境搭建
本文环境搭建包括(1)微信公众平台测试账号注册管理(2)内网穿透,让自己的电脑能连入到公网中(3)完成测试公众号与服务器通信一般来说我们都是直接使用公司提供的公众号或者是自己注册一个公众号进行开发,但是有的时候因为很多人使用,使得管理使用很麻烦。1.1、注册测试公众号 微信公众号分为服务号、订阅号、企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以。这里就不详细的去介绍了,大致就是去微信公众平台申请一个订阅号或者是服务号 关于订阅号和服务器的区别,官方是这样解释
2020-12-17 09:36:27
1035
1
原创 centos7 Mysql 5.7安装
很久没用直接使用mysql源码包在linux安装了,今天刚好因为项目环境需要在物理机上搭建一个mysql环境,刚好记录下MySQL 5.7.32详细下载安装配置教程前言在安装MySQL的时候会遇到很多问题,博客上有很多解决问题的办法,在这里我附上一些链接,遇到问题的朋友们可以阅读参考哈~本文主要针对于刚接触数据库的小白,来安装MySQL数据库。目前官网上的MySQL版本有5.5,5.6,5.7和8,在开发的时候我们一般要选择比最新版低1到2个版本的,因此我选择了5.7作为要安装的数据库1..
2020-12-02 14:36:39
385
1
原创 Linux 如何查看CPU核心内存等资源配置信息
首先是来查看下CPU 核心数以及 CPU(中央处理器)型号首先这里可以使用cat /proc/cpuinfo 打印出全部的信息,但是过于繁杂,信息也不好找,其实我们关心的也就那么几个关键的信息CPU核心数,CPU型号命令:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c可以看到 显示 (看到有8个逻辑CPU, 也知道了CPU型号) 注意这是逻辑核心,现代CPU一般一个物理CPU 包含多个核心那么如何查看具体有多少个...
2020-12-02 09:51:05
1711
原创 微信下载交易账单API工具类
本文是基于微信支付V2版本的工具类,如果使用V3的版本请参考官网:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/api.shtml因为图方便,所以引入了两个公共的工具包 来处理https 请求 以及 加密,里面也封装了快速替换下面两个依赖的方式 <dependency> <groupId>cn.hutool</groupId> <a
2020-11-27 17:26:54
2924
3
原创 @Import importSelector ImportBeanDefinitionRegistrar 注册Bean 以及自定义扫描器
@Import 究竟是干什么的?如何去使用?从名字上我们可以直到import 是导入的意思,那么导入什么东西?spring中与导入最相关的就是bean,所以没错,我们大概猜测就是与Bean的注册有关。那么具体如何使用呢?我们以前编码的时候XML比较流行,但是现在一般都是使用注解,那么现在spring 是如何辨别哪些类需要被spring加载为Bean?@Component 这个注解是最关键的,@Service,@Configuration,@SpringBootApplication等等都是
2020-11-19 15:23:10
535
原创 APP调用微信三方登陆 授权码模式 工具代码
官方文档介绍:https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html代码:WXTokenEntity 对应 通过code 获取 access tokenpublic class WXTokenEntity { //请求访问token private String accessToken; //刷新token private
2020-11-18 16:02:25
662
原创 git 命令查看远程分支以及拉取并切换
这篇博客是记录一下命令,有时候突然要用,老忘记命令所以写一篇记录一下查看远程分支查看本地所有分支git branch查看远程所有分支git branch -r查看本地和远程所有分支git branch -a➢ 拉取分支name为远程分支的名称git fetch orgin name➢ 切换分支git checkout name➢ 切换分支二git checkout -b 本地自己命名 origin/远程分支名...
2020-11-16 15:10:15
5269
原创 Spring Security Oauth2 如何增加自定义授权模式
在 oauth2 中已经默认有的授权模式中有4种:授权码模式 隐式授权模式 密码模式 客户端模式但是实际使用过程中万一我们要基于短信授权,或者基于token 直接授权该怎么办?这里我们可以先看下源码...
2020-11-06 18:11:21
5790
4
原创 git 仓库回滚代码到某个commit版本(本地和仓库都会回滚)
git维护代码版本信息是根据commit快照版本来维持的,每一次提交都会生成一个新的commit 对象,下面我们直接看下怎么回归。Git回滚代码到某个commit回退命令:$ git reset --hard HEAD^ 回退到上个版本$ git reset --hard HEAD~3 回退到前3次提交之前,以此类推,回退到n次提交之前$ git reset --hard commit_id 退到/进到 指定commit的sha码强推到远程:$ git push origin HE
2020-11-05 15:25:28
3594
原创 OAuth2 oauth_client_details表字段的详细说明
官方SQL表语句:查看SQL表结构,请点这里。官方有sql语句,但是没有详细的对每个字段做出详细的解释,让我们在使用OAuth2.0 的时候也有一些迷茫,这里主要针对主要的表以及字段进行说明。其他表都比较简单也容易理解,重点主要时对于oauth_client_details,以及对应字段的意义,因为在实际使用的时候,该表中的字段是影响业务运行的关键。先大致看一下流程上图可以看到大致分为用户,认证服务Authorization Server,以及资源服务resource server,三方
2020-11-04 16:31:22
22300
7
原创 Maven 生命周期详解
思考:我们常使用的maven命令,比如 mvn clean install,mvn clean package 这些命令到底最后是如何工作的?在这里我们还是先一步步来,其实它们运行的是生命周期中对应的phase阶段。Maven 拥有三套独立的生命周期,它们分别是clean、default 和 site。clean 生命周期的目的是清理项目;default 生命周期的目的是构建项目;site 生命周期的目的是建立项目站点。生命周期相互独立每个生命周期又包含了多个阶段。这些阶段在执行的时候是有.
2020-10-31 20:52:43
3928
原创 ScheduledExecutorService 使用
ScheduledExecutorService,我平时没有用过,他的最大优点除了线程池的特性以外,可以实现循环或延迟任务。ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。先来个简单的延迟任务调...
2020-10-28 14:15:40
29806
6
原创 ZAB 协议 与 Raft协议 比较
我们不仅要在平时工作和学习中,认真、全面的学习理论,掌握概念的内涵,还要能“包容”和“发展”着理解技术。Raft协议是ZAB 是通过“一切以领导者为准”的强领导者模型和严格按照顺序处理、提交提案,来实现操作的顺序性的。主节点是基于 TCP 协议来广播消息的,并保证了消息接收的顺序性。Raft 算法(主备、强领导者模型)与 ZAB 协议非常类似,它是作为共识算法和 Multi-Paxos 算法提出的。当它被广泛接受和认可后,共识算法的内涵也就丰富和发展了,不仅能实现一系列值的共识,还能保证值的顺序
2020-10-24 22:34:37
10577
3
azkaban-3.59.zip
2019-07-03
ssm-redis-哨兵模式
2017-09-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人