- 博客(80)
- 收藏
- 关注
原创 【redis】数据类型
redis作为一个key-value类型的存储中间件,其key都是二进制类型,空字符串也可以作为ke。value包括5种核心类型以及后面版本不断添加的其他类型。
2024-08-26 10:34:29
332
原创 【redis】主从的高可用
Redis副本是如何保证高可用的在redis副本的基础上,redis提供了简单易用的主从模式。从节点会精确的从主节点复制数据,并且在连接中断的时候自动重连,无论主节点发生什么都会尝试复制数据。实现机制主要如下3种:当主从节点连接良好时,如果主节点数据集发生改变(包括客户端写入,key过期或删除,或其他影响数据集的操作),主节点会向从节点发送一系列命令来保证从节点更新数据。当主从之间的连接断开时,不论是网络问题还是主或从发生超时,从节点都会试图重连主节点并进行部分数据的重新同步,也就是在断开期间丢失
2024-08-26 10:34:19
974
原创 【redis】哨兵模式
在这个示例中,S2和S3所在的网络与S1不能通信,于是选举了新的master M2,但是客户端C1可能和M1在同一个分区中,所以仍然会将数据写入M1。因此,这个示例也是一种有效的配置,但之前的配置中的具有一些优点,例如Redis的高可用系统与Redis本身运行在同一个box中,这可能更易于管理,并且能够限制少数分区中的主机可以接收写操作的时间。在使用这种配置时,上面的M1会在10秒之后变得不可用。当分区通信恢复后,,哨兵配置将收敛到新的配置,客户端C1将能够获取有效的配置,并将继续使用新的主机。
2024-08-26 10:33:58
1067
原创 线程模型。
1:1模型,即每个用户线程都对应一个内核线程。例如java中的多线程,实际上是对内核线程的一层封装,真正的线程创建、销毁、调度等功能都由操作系统实现。多个用户线程对应一个内核线程(N:1)。这种模型下所有的用户线程都对应一个内核线程,用户线程的创建、调度等由语言自己实现。用户级线程和内核线程之间是N:M,整个进程中可以有多个内核线程,多个用户线程也可能对应同一个内核线程。
2024-08-26 10:27:10
349
原创 计算机网络
互联网五层协议中少了上面的表示层和会话层。一个请求的网络传输过程就是自定向下的各层之间的数据封装:比如接受数据的流程大致就是上面的逆向,一层层接受数据然后丢弃掉各层封装的数据,最后到应用层就可以接收到发送方的数据流。
2024-08-26 10:17:12
756
原创 深入MySQL
MySQL逻辑架构MySQL逻辑架构整体分为三层,顶层客户端并非MySQL独有,如:连接处理、授权认证、安全等功能都在客户端层。核心服务层,MySQL大多数核心服务都在这一层,包括查询解析、分析、优化、缓存、内置函数等。所有跨存储引擎的功能也在这一层实现:如存储过程、触发器、视图。最下层为存储引擎,负责MySQL中的数据存储和提取。类似于Linux的文件系统,每种存储引擎都有优劣。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异。MySQL查询过程...
2024-08-26 09:37:43
1694
3
原创 Mysql锁
Shared and Exclusive Locks 共享锁和排他锁Intention Locks 意向锁Record Locks 行锁Gap Locks 间隙锁Next-Key LocksInsert Intention LocksAUTO-INC LocksPredicate Locks for Spatial Indexes共享 (S) 锁允许持有锁的事务读取一行。排他 (X) 锁允许持有锁的事务更新或删除行。意向共享锁 (IS) 表示事务打算在表中的各个行上设置共享锁。意向排他
2024-08-26 09:37:22
154
原创 【Mysql】
redo-log对一组文件进行循环写入,write-pos记录当前写入点,check-point记录当前检查点,每次写入log时write-pos向后移动,每次刷盘后check-point向后移动,check-point和write-pos之间的数据就是尚未持久化的数据。可以理解为A在获取记录r的S时,同时也获取了这个表的IS锁,B要获取另一行r1的X锁时,要获取该表的IX锁,而IS锁和IX锁是共存的,所以不会冲突。如果在B点崩溃,检查binlog和redo-log完整,提交事务。
2024-08-26 09:35:19
997
原创 golang实现pdf中自动换行的表格
由于CellFormat方法不支持\n换行,会被变成乱码,MultiCell方法会自动将坐标定位到下一行。所以需要自己实现坐标的计算变换。通过Rect方法画出单元格,MultiCell方法在格内自动换行写字,在计算坐标重复写单元格,最终组成一行。加载字体时,会将前面New方法指定的目录和AddUTF8Font方法指定的目录文件拼在一起。
2024-01-30 15:45:34
1296
2
原创 gin实现event stream
是属于http的一种通信方式,可以实现服务器主动推送。原理于客户端请求服务器之后一直保持链接,服务端持续返回结果给客户端。
2023-10-09 13:04:38
1667
原创 golang协程模型——可扩展的go调度设计
译自:Scalable Go Scheduler Design Doc在GMP模型出现之前,golang的协程调度只有M(工作线程)和G(goroutine)。协程切换全部依赖于全局的runq,会产生一些问题:单一的全局锁和集中的状态:全局锁空值全部的协程相关操作,如协程的创建,结束和重新调度等。这会导致高并发场景下加锁解锁的消耗过高。协程的切换问题:M之间经常会切换可执行的G,这会导致额外的开销以及延迟的增加。每个M的内存缓存:当前的内存缓存和其他缓存(堆栈等)和所有的M都相关联。实际上只有正在
2022-04-24 16:33:22
438
原创 sync.Once——golang单例模式
之前写的一个java的单例模式在golang中我们期望一个方法只执行一次的时候,通常会使用实例化一个sync.Once结构体,然后使用once.Do方法来包装我们需要执行的方法f。在初始化各种连接的时候非常常用。代码示例import ( "sync")// 单例对象的结构体type Singleton struct { Age int Name string Addr string}var once sync.Once// 全局变量instancevar instan
2022-04-21 15:17:59
886
原创 golang sort.SearchInts查找算法
源码// SearchInts 在排序的整数切片中搜索 x 并返回 Search 指定的索引。 // 如果 x 不存在,则返回值是插入 x 的索引(它可能是 len(a))。 切片必须按升序排序。func SearchInts(a []int, x int) int { return Search(len(a), func(i int) bool { return a[i] >= x })}func Search(n int, f func(int) bool) int { // 定义
2022-03-29 17:42:58
3695
原创 windows平台使用docker安装es踩坑
1 wsl占用内存过高按下Windows + R 键,输入 %UserProfile% 并运行进入用户文件夹新建文件 .wslconfig设置资源限制[wsl2]memory=2GBswap=0localhostForwarding=true2 启动es报错内存不足[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]进入docker-deskto
2022-01-11 15:54:18
1508
1
原创 跟着官网学k8s-05运行应用程序的多个实例
一般情况下pod的数量不会是一个,多个pod可以让服务更加的可靠并且可以承受更大的流量。service的type类型可以为LoadBalancer即负载均衡。使用该类型service需要指定外部负载均衡器的ip以及nodeport和clusterip查看deployment和ReplicaSet,ReplicaSet的命名格式为【deployment】-【随机字符串】$ kubectl get deploymentsNAME READY UP-TO-DATE
2021-11-11 20:22:21
651
原创 跟着官网学k8s-04使用Service暴露您的应用
本节主要介绍sk8s中的serviceKubernetes 的 Service 是一个抽象层,它定义了一组 Pod 的逻辑集,并为这些 Pod 支持外部流量暴露、负载平衡和服务发现简单说,service就是负责为pod提供网络访问入口,也算是k8s实现微服务的核心机制。没有service的时候,请求可以通过pod的ip+port直接访问pod运行的服务。但是如果有pod有多个副本呢?pod的ip不是固定的呢?pod的副本数量动态变化呢?使用get services命令查看$ kubectl ge
2021-11-10 23:11:25
976
原创 跟着官网学k8s-03查看pod和工作节点
本章涉及到一些概念1.首先是Pod,Pod 是一组一个或多个应用程序容器(例如 Docker),包括共享存储(卷), IP 地址和有关如何运行它们的信息。我们在创建deployment的时候。k8s就为我们添加了一个Pod来托管我们的应用。Pod 中的容器共享 IP 地址和端口,始终位于同一位置并且共同调度,并在同一工作节点上的共享上下文中运行2.工作节点Node,一个 pod 总是运行在 工作节点。工作节点是 Kubernetes 中的参与计算的机器,可以是虚拟机或物理计算机,具体取决于集群。每个工
2021-11-09 23:15:28
3654
原创 跟着官网学k8s-02使用kubectl创建Deployment
先看说明一旦运行了 Kubernetes 集群,就可以在其上部署容器化应用程序。 为此,您需要创建 Kubernetes Deployment 配置。Deployment 指挥 Kubernetes 如何创建和更新应用程序的实例。创建 Deployment 后,Kubernetes master 将应用程序实例调度到集群中的各个节点上。创建应用程序实例后,Kubernetes Deployment 控制器会持续监视这些实例。 如果托管实例的节点关闭或被删除,则 Deployment 控制器会将该实例替
2021-11-09 13:49:44
2595
原创 跟着官网学K8S-01部署本地kubernetes
k8s交互式教程提供了预先安装好的minikube查看minikube版本minikube version启动minikube,下面的命令会启动minikube,minikube会启动一个虚拟机,并且在该虚拟机上运行一个k8s clusterminikube start查看kubectl版本,客户端版本就是kubectl版本,服务器版本就是kubernetes版本kubectl version查看cluster信息kubectl cluster-info查看cluster内
2021-11-08 23:49:07
191
原创 Go语言学习笔记(2)-------数据类型
go语言中的数据类型大体上分为基本数据类型和派生数据类型,其中基本数据类型主要有以下几种:布尔类型:true/false,与java一样数字类型:包括了整型的int(其中又包括有符号的int8,int16,int32,int64以及无符号的unit8,unit16,unit32,unit64)。还有浮点型的float和complex字符串类型:没错字符串在go中属于基本数据类型而派生类型主要包括了下面几种:指针类型数组类型结构化类型Channal类型函数类型切片类型接口类型Ma
2020-09-10 00:40:42
681
原创 Go语言学习笔记(1)-------Go环境安装以及Go的语法
首先安装与环境配置我就不贴了,与其他语言没有差别。下面是一个最简单的go程序,仅仅是输出了hello world两个单词package mainimport "fmt"func main() { fmt.Print("hello world")}输出结果虽然go语言是支持面向对象编程的,但是他并不是一个完全的面向对象语言,比如我们上面的程序就没有声明任何类相关的代码,仅仅是一个package包声明,一个impor,一个func就可以运行了。我们跑的这个文件是package main
2020-09-06 21:13:17
197
原创 500错误—No serializer found for class***/No converter found for return value of type ***
结论一般都是用于接收或者返回的javabean没有写getter、setter方法,导致无法完成json和javabean的互相转换。错误重现学习开源项目:mall的时候忘了写bean的getter和setter,同时由于自身ip未设置固定ip,访问阿里云上的redis时候导致入口规则与本机ip对不上,程序一直在警告redis连接不成功,没注意转换失败的警告。controller层。@RestController@RequestMapping("/home")@Api(tags = "Home
2020-08-13 21:01:54
674
原创 springboot项目打包成docker镜像
参考mall在Linux环境下的部署(基于Docker容器)首先我们的服务器要有docker私有仓库docker registry搭建下载镜像docker pull registry:2启动容器(随docker自启)docker run -d -p 5000:5000 --name registry2-noauth --restart=always -v /usr/local/docker/registry/auth/:/auth/ -v /usr/local/docker/regist
2020-07-30 20:48:15
425
原创 记录阿里云被挖矿程序入侵
起因今早阿里云提示我ECS服务器上有挖矿程序(c_sh),CPU使用率维持在99%。系统为centos8阿里云告警提示(我手动处理了的告警,初始界面没保留)处理top命令查看到31911端口的c_sh进程占用90%多的CPU使用率先是让阿里云自己处理(杀掉挖矿程序),但是top命令查看这个挖矿程序又换了32366端口启动原本挖矿程序的路径是/proc/31911/root/root/c_sh,杀掉c_sh进程之后再找/proc/31911/root/root/c_sh发现文件不存在。top命
2020-07-30 15:38:49
670
原创 docker启动elasticsearch时内存不足问题
问题docker安装并启动elasticsearch时内存不足系统centos8(阿里云ecs服务器)[root@iZ2zeczvvb79boy368xppwZ ~]# cat /etc/redhat-releaseCentOS Linux release 8.1.1911 (Core)安装过程docker pull elasticsearch:6.4.0修改虚拟机内存(貌似没有效果)sysctl -w vm.max_map_count=262144使用docker run命令跑容器
2020-07-29 10:34:35
1144
原创 设计模式之————代理模式(静态代理/动态代理)
Proxy:为其他对象提供一个代理以控制对这个对象的访问代理模式静态代理动态代理基于JDK实现基于cglib实现静态代理想象一下我们在演《无间道》。阿仁是一个卧底警察(Undercover),他是真正能够搜集情报(getInfo)的人,他的上司黄Sir(Sir)负责直接与阿仁交接情报,他们都是一线警察(FrontlinePolice)。我们的警局老大梁警官(BOSS)想要知道罪犯的情报,但是他不能联系阿仁,只能通过黄Sir拿到情报。同时梁警官想要拿到的情报可以直接作为证据来起诉犯罪集团,整理情报这.
2020-07-27 20:21:15
150
原创 深入理解Java虚拟机笔记(7)-------类加载器
类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性。即使这两个类来源于同一个Class文件,被同一个Java虚拟机加载,只要加载它们的类加载器不同,那这两个类就必定不相等文章目录启动类加载器(Bootstrap Class Loader)扩展类加载器(Extension Class Loader)应用程序类加载器/系统类加载器(Application Class Loader)双亲委派模型启动类加载器(Bootstrap Class Loader)这个类加载器负责加载存放在<JAV.
2020-07-24 21:10:38
146
原创 深入理解Java虚拟机笔记(6)-------类加载时机与类加载过程
类加载时机类从加载到卸载共有7个阶段,如下图加载、验证、准备、初始化和卸载这五个阶段的开始顺序是确定的,并不意味着完成的阶段也是这个顺序,因为某一个阶段可能会调用其他阶段。其中解析阶段有可能在初始化阶段之后执行。类加载阶段开始的时机会根据虚拟机而不同,但初始化阶段在在下面6中情况中必须立即开始:遇到new、getstatic、putstatic或invokestatic这四条字节码指令时:能够生成这4中指令的场景有:使用new关键字实例化对象;读取或者设置一个静态字段(被final修饰、已在编
2020-07-22 21:40:21
349
原创 深入理解Java虚拟机笔记(5)-------经典垃圾收集器
垃圾收集器Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器G1收集器(Garbage First)1.Region2.TAMS指针3.原始快照(SATB)算法回收过程本文主要介绍CMS和G1首先看看HotSpot的各种垃圾收集器关系图图中互相连线的垃圾收集器之间可以组合使用,被JDK9断开连线的是在JDK9中废弃的组合。垃圾收集器所在那个区域代表这个垃圾收集器是作用于该分代的。老年代:CMS,Seria
2020-07-21 21:31:34
1009
原创 深入理解Java虚拟机笔记(4)-------垃圾回收算法
分代收集理论的三条假说弱分代假说:绝大多数对象都是朝生夕灭的(大多数对象(大概98%)第一次垃圾回收时就被回收掉了)强分代假说:熬过越多次垃圾收集过程的对象就越难以消亡(eg:经过几次垃圾回收都没有被回收的对象,下一次回收很可能也不会回收它)跨代引用假说:跨代引用相对于同代引用来说仅占极少数(跨代引用就是新生代和老年代的对象之间有引用关系,有这种跨代引用的对象很少)接下来主要说三种垃圾收集算法: 标记-清除算法,标记-复制算法,标记-整理算法。1. 标记-清除算法:该算法分为标记和清除两.
2020-07-20 21:27:33
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人