自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker安装redis

docker 安装 redis1、下载镜像文件docker pull redis 2、创建实例并启动mkdir -p /mydata/redis/conf touch /mydata/redis/conf/redis.conf docker run -p 6379:6379 --name redis -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-

2021-04-19 14:56:23 9

原创 sharding-jdbc执行原理

当Sharding-JDBC接受到一条SQL语句时,会陆续执行SQL解析 ->查询优化 -> SQL路由 -> SQL改写 -> SQL执行 ->结果归并,最终返回执行结果。SQL解析SQL解析过程分为词法解析和语法解析。 词法解析器用于将SQL拆解为不可再分的原子符号,称为Token。并根据不同数据库方言所提供的字典,将其归类为关键字,表达式,字面量和操作符。 再使用语法解析器将SQL转换为抽象语法树。例如,以下SQL:SELECT id, na...

2021-04-07 14:14:00 34

原创 Sharding JDBC 基本使用

创建数据库:t_order1,t_order2 订单表水平分表,订单表含有字段字段:order_id 订单id price 价格 user_id 用户id status 订单状态引入maven:springboot + mybatis 框架引入 sharding jdbc 依赖包 sharding-jdbc-spring-boot-starter分片规则配置:...

2021-04-07 10:34:01 19

原创 sharding-jdbc核心概念记录

sharding-jdbc常用的分片场景策略:取余/取模分片:优点-均匀存放数据,缺点-扩容非常困难按照范围分片:比较好扩容,数据分布不均匀,可能造成资源浪费按照时间分片:比较容易将热点数据区分出来按照枚举值分片:例如按照地区分片按照目标字段前缀指定进行分区:自定义规则sharding-jdbc核心概念:sql:逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为 10 张表,分别是t_order_0到t_order_9,他们...

2021-04-02 15:39:30 13

原创 Sharding Sphere基本概念理解

什么是 Sharding SphereApache ShardingSphere(Incubator) 是一套开源的分布式数据库中间件解决方案组成的生态圈。组成: 1.Sharding-JDBC 2.Sharding-Proxy 3.Sharding-Sidecar功能:提供标准化的数据分片、分布式事务和数据库治理功能目的:充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。它通过关注不变,进而抓住事物本质...

2021-01-12 21:54:45 214

原创 ES的Search流程过程理解

GET操作只能对单个文档进行处理,由_index、_type和_id三元组来确定唯一文档。但搜索需要一种更复杂的模型,因为不知道查询会命中哪些文档。找到匹配文档仅仅完成了搜索流程的一半,因为多分片中的结果必须组合成单个排序列表。集群的任意节点都可以接收搜索请求,接收客户端请求的节点称为协调节点。在协调节点,搜索任务被执行成一个两阶段过程,即query then fetch。真正执行搜索任务的节点称为数据节点。需要两个阶段才能完成搜索的原因是,在查询的时候不知道文档位于哪个分片,因此索引的所有分片(某

2021-01-12 15:47:23 121

转载 ES的GET流程理解以及思考

GET流程ES的读取分为GET和Search两种操作,这两种读取操作有较大的差异,GET/MGET必须指定三元组:_index、_type、_id。也就是说,根据文档id从正排索引中获取内容。而Search不指定_id,根据关键词从倒排索引中获取内容。一个GET请求的简单例子,如下:curl -XGET http://127.0.0.1:9200/secisland/_doc/1?pretty响应:{ "_index": "secisland", "_type": "_doc",

2020-12-18 16:28:52 306

原创 理解Elasticsearch写入过程原理

1. lucene的写操作及其问题Elasticsearch底层使用Lucene来实现doc的读写操作,Lucene通过public long addDocument(...);public long deleteDocuments(...);public long updateDocument(...);三个方法来实现文档的写入,更新和删除操作。但是存在如下问题没有并发设计 lucene只是一个搜索引擎库,并没有涉及到分布式相关的设计,因此要想使用Lucene来处理海量数据,并利用

2020-12-14 20:44:41 295

原创 ES的滚动搜索

游标查询Scroll滚动搜索API,即Search Scroll API,可通过搜索请求,获取大量搜索结果。滚动搜索有点类似于数据库中的分页查询。ES对于from+size的个数是有限制的,二者之和不能超过1w。当所请求的数据总量大于1w时,可用scroll来代替from+size。如果一次性要查出来比如10万条数据,那么性能会很差,此时一般会采取用scoll滚动查询,一批一批的查,直到所有数据都查询完处理完。scroll查询 可以用来对 Elasticsearch 有效地执行大批量..

2020-12-11 16:49:05 118

原创 索引分词器

了解Elasticsearch分词的原理、过程,以及如何添加新的分词器等,同时插件相关知识,及其功能与安装等。分词器的概念在Elasticsearch中,索引分析模块是可以通过注册分词器(analyzer)来进行配置。分词器的作用是当一个文档被索引的时候,分词器从文档中提取出若干词元(token)来支持索引的存储和搜索。分词器(omalyzer)是由一个分解器(tokenizer)、零个或多个词元过滤器(token filters)组成。分解器处理前可能要做一些预处理,比如去掉里面的HTML

2020-12-09 15:37:54 49

原创 ES搜索和DSL

前面主要介绍了Elasticsearch的索引和映射,但这两个内容只解决存储的问题,在使用Elasticsearch的时候,大部分是和搜索相关的内容。现在开始介绍Elasticsearch的搜索功能,通过学习详细了解搜索的语法和查询专用语言(DSL)的相关知识。深入搜索搜索方式1.URL参数搜索请求:GET http://127.0.0.1:9200/secislan/_search?参数,多个参数用&分开。2.POST请求参数搜索请求:POST http://127

2020-12-02 16:08:17 99

原创 ES映射的使用

映射是定义存储和索引的文档类型以及字段的过程。索引中的每一个文档都有一个类型,每种类型都有它自己的映射。一个映射定义了文档结构内每个字段的数据类型。映射通过配置来定义字段类型与该类型相关联的元数据的关系。例如,可以通过映射来定义日期类型的格式、数字类型的格式或者文档中所有字段的值是否应该被_all字段索引等。本章将介绍映射的概念、参数,以及动态映射的使用等。概念1.映射类型每个索引拥有一个或多个映射类型,用来在索引中将文档划分为不同的逻辑组。每个映射类型拥有:□元字段:用来定义如何处理

2020-12-01 23:41:14 111

原创 ES索引理解

索引创建索引创建索引的时候可以通过修改number_of_shards和number_of_replicas参数的数量来修改分片和副本的数量。在默认的情况下分片的数量是5个,副本的数量是1个。例如,创建三个主分片,两个副本分片的索引。请求:PUT http://127.0.0.1:9200/secisland/参数:后面可以通过update-index-settings API完成对副本数量的修改。例如请求:PUT http://127.0.0.1:9200/secis

2020-12-01 22:37:59 172

原创 ES高级客户端文档操作实战

在Elasticsearch中,高级客户端支持以下文档相关的API:(1)Single document APIs——单文档操作API。(2)Index API——文档索引API。(3)Get API——文档获取API。(4)Exists API——文档存在性判断API。(5)Delete API——文档删除API。(6)Update API——文档更新API。(7)Term Vectors API——词向量API。(8)Bulk API——批量处理API。(9)Multi-Get API——多文档获取

2020-12-01 15:04:16 122

原创 ElasticSearch入门,高级客户端了解

上一篇我们对elasticsearch的基本概念有了一些了解,然后我们需要懂一些基本操作。对外接口1 创建索引库在请求URL中输入:http://127.0.0.1:9200/secisland?pretty。在请求的方法中选择PUT,创建索引库示意图点击Request按钮后可以在右边看到返回的内容如下,表示建库成功:执行完建库后查询一下库的状态,有两种方式查看,如果用命令查看,可以在浏览器中执行http://127.0.0.1:9200/_cat/indices?v.

2020-11-30 16:34:42 184

原创 Elasticsearch术语及概念熟悉

想要学好、用好Elasticsearch,首先要了解其核心概念、名词和属性。这就好比想要看懂地图,首先要知道地图里常用的标记符号一样。Elasticsearch的核心概念有索引词(term)、节点(Node)、集群(Cluster)、Shards、Replicas、Index、Type、Document、Settings、Mapping和Analyzer,其含义分别如下所示。1.索引词(term)在Elasticsearch中索引词(term)是一个能够被索引的精确值。foo、Foo、FOO几个

2020-11-30 10:05:42 126

转载 ES在linux上安装操作

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。 实时分析的分布式搜索引擎。 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据Elasticsearch具备以下特点:分布式,无需人工搭建集群(solr就需要人为配

2020-11-26 11:32:27 131

原创 说起java的线程同步,还算优秀的我总是忘的明明白白

实现多线程同步,java提供了多种方式,比如Synchronized、Lock、Volatile关键字等。但是他们的区别是什么呢,至今对这些东西我还是很懵懂的,所以是时候要对这些东西做一些了结了,不然每次看过就忘Volatile关键字volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。volatile关键字的作用:保证了变量的.

2020-05-13 18:14:20 100 2

原创 面试官每次问我关于线程间通信方法,我都回答的很糟糕

线程的生命周期废话不多写。首先我们先回顾回顾,理解下线程的生命周期,以及不同的阶段的区别:新建状态(NEW)当程序使用new关键字创建了一个线程之后,该线程就处于新建状态,此时仅由JVM为其分配内存,并初始化其成员变量的值就绪状态(RUNNABLE)当线程对象调用了 start()方法之后,该线程处于就绪状态。Java虚拟机会为其创建方法调用栈和程序计数器,等待调度运行。运行状态(RUNNING)如果处于就绪状态的线程获得了 CPU,开始执行run()方法的线程执行体,

2020-05-12 16:59:01 290

原创 对redis相关知识的总结

之前对redis的知识已经做过一些了解了,今天主要做一个总结,梳理下相关的知识。redis的基本数据类型:string、是redis中最基本的数据类型,一个key对应一个value。String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。hash、包含键值对的无序散列表。value 只能是字符串,不能嵌套其他类型。list、List 说白了就是链表(redis 使用双端链表实现的 List),是有序的,value可以

2020-05-11 18:00:13 92

原创 作为合格的程序猿,当面试官问我线程池我怎么也得扯上两分钟

作为一个面试经验不算丰富的程序员,在这行业摸爬滚打几年。我立志要征服个大公司的面试官。原则就是小厂我随便虐,大厂随便虐我。所以在去面试之前,java基础还是要恶补一番的。java线程池作为一个面试官常常问的东西,我是必须得熟悉的。四种线程池Java通过Executors提供四种线程池,分别为:1、newSingleThreadExecutorExecutors.newSingleThreadExecutor()返回一个线程池(这个线程池只有一个线程),保证所有任务按照指定顺序(FIFO, L

2020-05-11 17:51:36 165

原创 理解redis的分布式高可用

还是老话,直入主题。今天就是再次熟悉和理解下redis的高可用,啥是高可用呢,不废话了大家应该都知道。所以再说直白点,前两篇我们了解了redis的基础数据结构和一些高级特性,所以今天,就是来理解redis的主从复制、哨兵模式已经redis cluster这三种模式的。好了,让我们开始主从复制主从复制配置在salve配置文件redis.conf中配置 slaveof 192.16...

2020-04-21 11:01:12 122

原创 对redis基础知识记录

首先直入主题,理解下非关系型数据库的特点:1、存储非结构化的数据,比如文本、图片、音频、视频。 2、表与表之间没有关联,可扩展性强。 3、保证数据的最终一致性。遵循 BASE理论。 Basically Available(基本 可用); Soft-state(软状态); Eventually Consistent(最终一致性)。 4、支持海量数据的存储和高并发的高效读写。 5、支持...

2020-04-15 17:30:36 110

原创 论多数据源(读写分离)的实现方案

好的,作为一个合格的bug生产者,我们直接进入主题,多数据源和读写分离实现方案。首先多数据源和读写分离什么时候我们才需要呢?多数据源:一个单体项目过于复杂,需要操作多个业务库的时候,就需要多数据源操作不同的数据读写分离:数据库压力较大时,我们考虑读写分离,主库写,从库读,减少数据库的压力。多个库数据是一样的。理解完使用场景后,再入主题,怎么实现呢?这里说三种实现方式...

2020-04-14 23:12:28 234

原创 Druid连接池的使用以及注意事项

Druid连接池其实在网上一找一大堆文章,讲实话这里也只是作为自己记录下使用如何使用这个连接池。好的,废话不多说。什么是Druid连接池?Druid首先是一个数据库连接池。Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。内置了StatFilter功能,能采集非常完备的连接池执行信息,Druid连接池内置了一个监控页面,提...

2020-04-14 23:08:31 320

原创 论内存溢出的排查过程

作为一个没有感情的代码杀手,写代码的时候难免写出一个死循环啥的,或者动不动造成内存泄漏直到内存溢出,那也是难免并且情有可原的。但是我们不能只是做一个简单的代码复制工具人,我们写的bug,我们当然也要直到怎么去解决它咯。好的,今天就来记录下,如果解决内存溢出的问题。制造一起内存溢出事故机智的我当然不可能故意拿着实际项目来弄一个内存溢出的事故咯,这样做了怕是见不到明天的太阳了。所以这里写一...

2020-04-13 17:14:00 183

原创 论线上如何排查一次CPU100%的情况

记录如何排查CPU100%问题。当我们把服务发布到服务器器,可能会因为一些问题造成我们的服务器CPU被打满甚至超过100%,那如果我们想知道到底上在做什么操作导致CPU持续过高呢?因为在线上,我们只能通过日志看问题,或者排查到哪个进程或者哪个线程持续占用CPU。然后才能找到具体问题在哪里才能进行解决。所以这里我们模拟一个死循环导致CPU过高的情况,然后如何快速的找到问题在哪。问题代码案...

2020-04-13 14:46:49 129

原创 我的JVM总结

目前总结是jvm相关的一些知识体系,虽然不是很深,但是也让自己对jvm有了一个比较总体的认知。1.jvm的内存结构,主要对堆、栈的理解和使用2. 垃圾回收机制,对垃圾回收器和垃圾回收算法的理解。如何判断垃圾。分代思想和分区思想3. 类的加载机制,类的加载过程是怎样?分别做了什么事情。还有类加载器的了解。以及什么是双亲委派模式4.内存的分配策略,内存分配到堆是遵循什么策略5...

2020-04-11 17:58:58 41

原创 GC优化和JVM优化指南

GC优化内存被使用了之后,难免会有不够用或者达到设定值的时候,就需要对内存空间进行垃圾回收。并且垃圾回收有不同的回收器,所以针对哪个回收器更好,其实我们可以分别试一下做一次比较。分别去分析不同的回收器的吞吐量和回收时间。选择最优的一个垃圾回收器。垃圾收集发生的时机一般以下几种情况会发生垃圾回收当Eden区或者S区不够用了老年代空间不够用了方法区空间不够用了System....

2020-04-11 16:41:16 159

原创 JVM参数以及工具分析使用

首先,我们对于jvm的一些知识已经都有了一些了解。从内存结构到内存分配的策略,再到类的加载机制,然后就是对于垃圾回收机制的理解,虽然还有很多细节的地方我们不是很了解,但是细节不是一天两天就能完全记住了,要靠我们后面再实践中不断的总结和发现问题。所以我们现在就开始了解下jvm的一些工具的使用,方便我们对jvm进行优化。JVM参数首先还是先来看看jvm提供的一些参数,我们有对堆、栈的一些命令有...

2020-04-10 15:52:03 76

原创 理解JVM 垃圾回收机制

对于jvm的内存结构,其实就是对堆,栈的了解。然后也了解了jvm的内存分配的规则:优先分配Eden区域、大对象直接进入老年代、到达一定年龄(长期存活对象)进入老年代、动态对象年龄判断、空间分配担保。对于这些有了了解之后,我们也了解了类加载机制:加载、校验、准备、解析、初始化等等,重要是在准备和初始化阶段,经常笔试会做到一些关于类加载的问题。接下来我们了解下垃圾回收机制。什么是垃圾?在jav...

2020-04-08 14:01:42 51

原创 理解JVM 类加载机制

什么是类的加载机制虚拟机把类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这既是虚拟机的类加载机制类加载的过程(生命周期)类从被加载到虚拟机内存开始,到卸载为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Init...

2020-04-07 16:32:33 66 1

原创 理解JVM内存分配策略

对于JVM的内存结构已经有了一些了解,接下来我们了解下在我们创建对象的过程中,JVM在内存分配方面的一些规则。对象优先在Eden分配大多情况,对象在新生代Eden区分配。当Eden区没有足够空间进行分配时,虚拟机将进行一次Minor GC。虚拟机提供了参数 -XX:+PrintGCDetails ,在虚拟机发生垃圾收集行为时打印内存回收日志。新生代Minor GC 事例定义了4个字...

2020-04-07 11:23:10 76

原创 dubbo设计架构理解

首先让我们来看一张图,这张图思从dubbo官网拿过来的。基于RPC调用架构设计,我们可以看一下他们之间调用的关系。图中一共有5个重要模块:注册中心registry:服务注册与发现服务提供者provider:暴露服务服务消费者consumer:调用远程服务监控中心monitor:统计服务的调用次数和调用时间容器container:服务允许容器我们已...

2020-03-31 17:04:39 83

原创 基于Redis实现消息队列典型方案

概述消息队列,Message Queue,常用于解决并发系统中的资源一致性问题,提升峰值的处理能力,同时保证消息的顺序性、可恢复性、必送达性,对应用进行解耦,或者实现异步通讯等。市面上的 MQ应用有很多(例如:Kafka,RabbitMQ,Disque),同时也可以基于 Redis 来实现,比较典型的方案有:基于List的 LPUSH+BRPOP 的实现 PUB/SUB,订阅/发布模式...

2020-01-08 15:08:26 949

原创 redis的五种常用数据结构、Pub/Sub数据结构、Stream数据结构

目录Redis五种数据结构如下:1.String 字符串类型Redis 字符串命令实战场景:2.Hash (哈希)Redis hash 命令实战场景:3.链表 listRedis 列表命令实战场景:4.Set 集合Redis 集合命令实战场景;5.zset 有序集合Redis 有序集合命令实战场景:6-Redis 发布订阅...

2019-12-02 10:04:39 594

原创 Redis事务深入解析和WATCH使用

目录1.前言2.事务基本使用1)开启事务2)命令入列3)执行事务/放弃事务3.事务错误&回滚1)执行时错误2)入列错误不会导致事务结束3)入列错误会导致事务结束4)为什么不支持事务回滚?4.监控watch5.事务在程序中使用6.小结作为关系型数据库中一项非常重要的基础功能——事务,在 Redis 中是如何处理并使用的?1.前言...

2019-11-28 00:35:00 253 2

原创 Redis实现库存扣减操作

具体关于lua脚本的内容使用请移步至redis命令参考–Script脚本 : http://doc.redisfans.com/script/index.html在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。解决方案使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。 还是使用数据库,但是将库存分层多份存到多条...

2019-11-05 16:55:22 6511 4

原创 Redis实现分布式锁方式

在Java中,关于锁我想大家都很熟悉。在并发编程中,我们通过锁,来避免由于竞争而造成的数据不一致问题。通常,我们以synchronized 、Lock来使用它。但是Java中的锁,只能保证在同一个JVM进程内中执行。如果在分布式集群环境下呢?一、分布式锁分布式锁,是一种思想,它的实现方式有很多。比如,我们将沙滩当做分布式锁的组件,那么它看起来应该是这样的:加锁在沙滩上踩一脚,留下...

2019-10-10 16:35:59 155

转载 Spring Boot + Spring Cloud 实现:集成 Swagger API

Spring Boot + Spring Cloud 实现:集成 Swagger APIspring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口。这些接口不但会服务于传统的web端(b/s),也会服务于移动端。在实际开发过程中,这些接口还要提供给开发测试进行相关的白盒测试,那么势必存在如何在多人协作中共享和及时更新AP...

2019-10-09 16:11:57 232

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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