自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

·

  • 博客(23)
  • 收藏
  • 关注

原创 缓存种类与缓存更新策略总结

首先只要使用缓存就要做好出现一致性问题的准备,即使是强一致更新策略也无法保证完全一致,之后可以根据自己的需要选择对应的更新策略更新策略选择读写穿透策略配置类信息,对一致性要求不高、读多写少的数据或者在多处修改的数据,使用读写穿透策略可以降低复杂度,简化代码,一致性要求不高的本地缓存也同样适用,可以解决缓存间不一致的问题旁路更新策略常规场景,最常用的缓存更新策略,能很大程度上解决缓存不一致问题,可以覆盖除读写穿透策略的使用情况外的绝大多数场景强一致更新策略。

2022-11-03 11:11:57 1268

原创 K8S应用部署实践

一个Serivce下面包含的Pod集合一般是由Label Selector来决定的。⑧ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。其中标签与上方解释基本相同 ,port 是对外暴露的端口,targetPort是容器端口 一般会设置成一样。③ metadata 是该资源的元数据,name 是必需的元数据项。⑥ template 定义 Pod 的模板,这是配置文件的重要部分。② kind 是要创建的资源类型,这里是 Deployment。

2022-08-24 20:06:43 376

原创 K8S裸机安装实践

K8S裸机安装实践,构建三主机集群

2022-08-10 14:32:15 1418

原创 B-Tree和LSM-Tree 优缺点对比

B-Tree(以及变种如B+Tree)已经存在很长时间,一直是更为主流的索引数据结构,经过更多优化,实现也更加成熟,实际上LSM-tree由于其特点,在某些场景中同样具有高吸引力。通常来说,LSM-Tree对写入更加友好,而B-Tree通常被认为对读取更加友好。LSM-Tree的优势...

2021-09-22 12:03:14 2457

原创 哈希表索引、SStable和LSM-Tree

最简单的数据库从最基本的层面来看,数据库的核心功能应该只有两个:存储数据并在我们查询时返回那些数据在我们本文的讨论过程中我们可以假设一个最简单的数据引擎:我们在磁盘中存储一个db文件,任何写入操作都会在该文件末尾进行追加(也就是写入相同键时不会覆盖之前的值)。至于读取,我们需要返回最后一个键对应的值。db_set(){ echo "$1,$2">>database}db_get(){ grep "^$1," database| sed -e "s/^$1,//"|tail -n

2021-09-21 15:37:39 559

原创 数据库SI和SSI隔离级别

数据隔离级别隔离级别是ANSI(美国国家标准学会:AMERICAN NATIONAL STANDARDS INSTITUTE)在多个事务并发的时候能够正确的处理数据所定义的规范。事务隔离级别越高,数据的正确性和数据库的完整性也就越高,但是数据并发处理的效率就会有所降低。SI和SSI的诞生ANSI SQL-92标准中,规定了4种数据库隔离级别,也就是我们今天熟知的读未提交、读已提交、可重复度和串行化。LeveP1P2P3READ UNCOMMITTEDPossiblePos

2021-08-19 14:52:10 737

原创 JVM栈上分配和标量替换

逃逸分析逃逸分析是编译语言中的一种优化分析,而不是一种优化的手段。通过对象的作用范围的分析,为其他优化手段提供分析数据从而进行优化。逃逸分析包括:全局变量赋值逃逸方法返回值逃逸实例引用发生逃逸线程逃逸:赋值给类变量或可以在其他线程中访问的实例变量栈上分配我们通过JVM内存分配可以知道JAVA中的对象都是在堆上进行分配,当对象没有被引用的时候,需要依靠GC进行回收内存,如果对象数量较多的时候,会给GC带来较大压力,也间接影响了应用的性能。为了减少临时对象在堆内分配的数量,JVM通过逃逸分析确

2021-08-13 22:52:42 561

原创 写入数据库的数据在什么时间落盘

WAL(Write-ahead logging,预写式日志)是数据库系统提供原子性和持久化的一系列技术。在使用WAL的系统中,所有的修改都先被写入到日志中。我们知道在安全性要求高的场景下,我们每次提交事务都会让redolog和binlog落库,但脏页数据可不可以永远留在内存中,如果要落盘,什么时间落盘呢?脏页落盘在数据库中进行读取操作,将从磁盘中读到的页放在缓冲池中,下次再读相同的页时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁 盘上的页。对于数据

2021-08-10 16:48:36 617

原创 思考:Kafka和RocketMQ中的事务消息是事务么

前几天看了公司封装的MQ中间件的一些设计文档,其中提到了实现的事务消息,具体实现原理和RocketMQ很相似,看完之后我有一些困惑,RocketMQ中的事务消息实现是真正的事务么?我先去查查看,等会再写。。...

2021-08-08 21:03:22 276

原创 记一次线上小事故

就在今天,我对项目一个小小的需求进行了实现并自测上线,出现了线上的小事故,好在只发了一半的机器,立即进行了修正

2021-08-02 17:13:37 64

原创 线程池配置

一、ThreadPoolExecutor的重要参数ThreadPoolExecutor带参构造器如下public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, Rejected

2021-07-29 22:35:52 2320

原创 Kafka中涉及的四种选举

Kafka中涉及到选主的地方比较多,所以也比较复杂,这里做一下总结。Kafka中的选举大致可以分为三大类:控制器的选举、分区leader的选举以及消费者相关的选举controller选举集群控制器组件(BrokerController):它是 Kafka 的核心组件。它的主要作用是在 ZooKeeper 的帮助下管理和协调整个 Kafka 集群,集群中的每个 broker 都可以称为 controller,但是在 Kafka 集群启动后,只有一个 broker 会成为 Controller 。Co

2021-07-27 17:35:04 2826 1

原创 EfectiveJava读后总结(一):构造对象

为什么静态工厂方法>构造器初始化静态工厂方法最经典、最简单的初始化一个类的方法是通过new 关键字,或者说叫构造器初始化,在实际的工作中,我们更常看到的是 Fragment fragment = MyFragment.newIntance(); // or Calendar calendar = Calendar.getInstance(); // or Integer number = Integer.valueOf("3");暴露一个静态方法,为调用者返回一个实

2021-07-16 10:23:56 73

原创 了解mysql三大日志:binlog、redolog、undolog

MySQL是目前业界最流行的数据库系统。日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息。 mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志( binlog )和事务日志(包括redo log 和 undo log )。...

2021-07-13 19:36:24 1727 5

原创 操作系统层面的锁

问题线程安全的临界区需要依靠锁,而锁的获取必须也要保证自己是线程安全的,也就是说,不能出现两个线程同时得到锁的情况,那么锁是如何保证自己是线程安全的呢?或者说,在操作系统以及CPU层面,锁是如何实现的?...

2021-07-12 21:31:08 282

原创 MYSQL优化:EXPLAIN命令的使用

EXPLAINMySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.EXPLAIN 命令用法十分简单, 在 SELECT 语句前加上 Explain 就可以了一般,使用explain分析问题主要从以下三个方面分析:当前查询是否走了索引?走的索引是不是期望的?索引还有没有改进的空间,sql还有没有优化的余地?这三点通过explain返回的各种字段来做分析,一般优化后需要反复查看explain来作出最

2021-07-12 19:52:46 436

原创 Spock+groovy单测总结记录

单测是规范的软件开发流程中的必不可少的环节之一。再伟大的程序员也难以避免自己不犯错,不写出有BUG的程序。单测就是用来检测BUG的。Java阵营中,JUnit和TestNG是两个知名的单测框架。不过,用Java写单测实在是很繁琐Spock是基于JUnit的单测框架,提供一些更好的语法,结合Groovy语言,可以写出更为简洁的单测。本文将Groovy+Spock编写单测的方法进行总结和记录。

2021-07-12 13:26:23 469

原创 mySql:探寻一条语句的执行过程

mySql:探寻一条语句的执行过程

2021-07-09 20:54:23 82

原创 mySql主从原理和主从延迟

主从集群Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力进行部署与实施。MySQL 主从集群带来的作用是:提高数据库负载能力,主库执行读写任务(增删改),备库仅做查询。提高系统读写性能、可扩展

2021-07-09 20:51:52 183

原创 mysql索引、慢查询和优化分析

数据库索引原理说到数据库就需要谈到索引,一句话,索引是帮助mysql高效获取数据的排好序的数据结构。计算机存取原理为什么说索引能帮助我们更高效获取数据,先回顾一下计算机是怎么存取数据的,计算机把数据保存在磁盘上,而为了提高性能,每次又可以把部分数据读入内存来计算,因为我们知道访问磁盘的成本大概是访问内存的十万倍左右考虑到磁盘IO是非常高昂的操作,计算机操作系统做了一些优化,当一次IO时,不光把当前磁盘地址的数据,而是把相邻的数据也都读取到内存缓冲区内,因为局部预读性原理告诉我们,当计算机访问一个地址

2021-07-09 20:17:16 190

原创 stream().map()用法记录

有一个集合:List users = getList(); //从数据库查询的用户集合现在想获取User的身份证号码;在后续的逻辑处理中要用;常用的方法我们大家都知道,用for循环,List idcards=new ArrayList();//定义一个集合来装身份证号码for(int i=0;i  idcards.add(users.get(i).getIdcard());}这种方法要写好几行代码,有没有简单点的,有,java8 API能一行搞定:List idcards= user

2021-07-07 14:34:07 867

原创 HashMap和ConcurrentHashMap底层解析(jdk1.7/1.8)

HashMap和ConcurrentHashMap底层实现(jdk1.7/1.8)HashMapjdk1.7中:HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1.7 和 1.8 中具体实现稍有不同jdk1.7中:

2021-07-06 20:38:57 201

原创 Mybatis了解记录

MybatisMybatis是一款常见的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注SQL本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的s..

2021-07-06 17:48:23 63

空空如也

空空如也

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

TA关注的人

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