- 博客(11)
- 收藏
- 关注
原创 Docker的常用指令
attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像commit Create a new image from a container changes # 提交当前容器为新的镜像。
2023-04-27 15:23:23
109
原创 Docker基础
Docker的存在意义:开发和运维环境不一致,利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。Docker的出现使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。
2023-04-26 17:11:07
109
原创 Redis五种基本数据类型
优点:跳表是一个最典型的空间换时间解决方案,而且只有在数据量较大的情况下才能体现出来优势。而且应该是读多写少的情况下才能使用,所以它的适用范围应该还是比较有限的缺点:维护成本相对要高,在单链表中,一旦定位好要插入的位置,插入结点的时间复杂度是很低的,就是O(1)新增或者删除时需要把所有索引都更新一遍,为了保证原始链表中数据的有序性,我们需要先找到要动作的位置,这个查找操作就会比较耗时最后在新增和删除的过程中的更新,时间复杂度也是O(log n)
2023-04-13 16:07:29
215
原创 手写Redis的分布式锁
当执行monitorenter时,如果目标锁对象的计数器为零,那么说明它没有被其他线程所持有,Java虚拟机会将该锁对象的持有线程设置为当前线程,并且将其计数器加1。问题:解决了容易栈溢出的问题,然而部署了微服务的JAVA程序机器挂了之后,代码走不到finnally,因此锁无法删除,key将一直存在,影响程序的运行,在目标锁对象的计数器不为零的情况下,如果锁对象的持有线程是当前线程,那么 Java 虚拟机可以将其计数器加1,否则需要等待,直至持有线程释放该锁。高并发请求下,依旧性能OK好使。
2023-04-11 16:47:48
318
原创 Redis的BigKey
key 这个指令有致命的弊端,在实际环境中最好不要使用这个指令没有 offset、limit 参数,是要一次性吐出所有满足条件的 key,由于 redis 是单线程的,其所有操作都是原子的,而 keys 算法是遍历算法,复杂度是 O(n),如果实例中有千万级以上的 key,这个指令就会导致 Redis 服务卡顿,所有读写 Redis 的其它的指令都会被延后甚至会超时报错,可能会引起缓存雪甚至数据库宕机。
2023-04-10 11:49:18
225
原创 Redis的单线程OR多线程?
从Redis6开始,就新增了多线程的功能来提高 I/O 的读写性能,他的主要实现思路是将主线程的 IO 读写任务拆分给一组独立的线程去执行,这样就可以使多个 socket 的读写可以并行化了,采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),将最耗时的Socket的读取、请求解析、写入单独外包出去,剩下的命令执行仍然由主线程串行执行并和内存的数据交互。版本3.X ,最早版本,也就是大家口口相传的redis是单线程,阳哥2016年讲解的redis就是3.X的版本。
2023-04-10 10:43:02
127
原创 Spring、SpringMVC和SpringBoot的关系
Spring Boot 是由Pivotal 团队提供的全新框架,其设计目的是用来简化新Spring 应用的初始搭建以及开发过程。Springboot是一个微服务框架,延续了spring框架的核心思想IOC和AOP,Spring Boot简化了Spring应用的创建、运行、调试、部署等,使用开发者可以专注于Spring应用的开发,而无需过多关注XML的配置。Spring是一个开源容器框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean之间的关系。
2023-04-06 10:44:14
493
原创 Nginx的反向代理和负载均衡
fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。请求数量按照一定的规则进行分发到不同的服务器处理的规则,就是一种均衡规则。
2023-04-06 09:45:21
77
原创 JVM垃圾回收详解
每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因是它目前主流的商用语言JAVA、C#等都是采用可达性分析来判断对象是否存活,如果某对象到GCroot之间没有任何引用则证明该对象是不可能再被使用的。
2023-04-05 16:59:26
256
1
原创 Java的内存区域
TLAB(本地线程分配缓冲): 为每一个线程预先在 Eden 区分配一块儿内存,JVM 在给线程中的对象分配内存时,首先在 TLAB 分配,当对象大于 TLAB 中的剩余内存或 TLAB 的内存已用尽时,再采用上述的 CAS 进行内存分配,是否采用TLAB通过-XX:+/-UseTLAB参数设定。虚拟机采用 CAS 配上失败重试的方式保证更新操作的原子性。直接内存是一种特殊的内存缓冲区,并不在 Java 堆或方法区中分配的,而是通过 JNI 的方式在本地内存上分配的,内存不足报OutofMemory异常。
2023-04-05 10:10:53
156
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人