自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis实现分布式锁

使用Redis命令完成分布式锁涉及命令Setnx key val : 当且仅当key不存在时,set一个key为val的字符串,返回1;若key存在,则什么都不做,返回0(加锁)expire key timeout:为key设置一个超时时间,单位为second,超过这个时间锁会自动释放,避免死锁。delete key:删除key,释放锁代码Springboot 整合 Redis<dependency> <groupId>org.springframew

2020-09-14 18:07:10 139

原创 ElasticSearch整合Springboot match,排序,分页,高亮 实现(简单版)

看看就好咯!还是比较简单的!后面出一个详解版POM<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://mav.

2020-09-12 23:07:36 635

原创 Redis集群之内置集群模式

“锵”,惊堂木一拍,又到了俺瞎扯时间!看官且看且乐,人生苦短且自娱自乐矣。上回我们说到,Redis Sentinel模式。这种模式对于小公司、小业务量来说是蛮合适的,可以保证服务的高可用。BUT,作为一个互联网新人,我们的终极目标——???干他一个亿???Oh,NO!睡了一觉还以为自己是王健林了呢!工头:“起来了,别睡了别睡了!说啥梦话呢赶紧搬砖了!”我:“。。。。。。。”我恨啊,我要学习,我要进BAT,我不要搬砖!来,Redis进阶!走你。。。。。。。。。Redis内置集群Clu.

2020-09-10 16:46:52 256

原创 Redis集群之哨兵模式

“锵”,上回我们讲到Redis主从模式,可谓是一山还有一山高,我来给大家讲讲Redis哨兵模式。。。哨兵(Sentinel)注意:此哨兵非 Alibaba Sentinel,各位看官莫要搞混!Sentinel(哨兵模式架构图)哨兵原理sentinel(哨兵)是用于监控redis集群中Master状态的工具,其本身也是一个独立运行的进程,是Redis的高可用解决方案,sentinel哨兵模式已经被集成在redis2.4之后的版本中。sentinel可以监视一个或者多个redis mast.

2020-09-10 14:27:10 756

原创 Redis集群之主从模式

为什么要使用Redis集群基于内存大小Redis是一个内存数据库,也就是说存储数据的容量不能超过主机内存大小。普通主机服务器的内存一般几十G,但是我们需要存储大容量的数据(比如上百G的数据)怎么办?基于访问吞吐量Redis是基于内存处理,速度非常快,但是人的欲望是永无止境的,如果因为业务需要更快的处理,怎么办?。。。来,我们一起学集群之哨兵模式主从复制实现架构图:特点:1、Master会将数据同步到slave,而slave不会将数据同步到master。Slave启动时会连接maste

2020-09-09 17:21:21 771

原创 Netty进阶

Netty核心组件及关系1. ChannelIO操作的一种连接,实体与实体之间的连接,实体可以是硬件,文件,网络套接字,或者是程序组件Channel 是 Netty 网络操作抽象类,它除了包括基本的 I/O 操作,如 bind、connect、read、write 之外,还包括了 Netty 框架相关的一些功能,如获取该 Channe l的 EventLoop。(这个 Channel 我们可以理解为 Socket 连接,它负责基本的 IO 操作,例如:bind(),connect(),read(),

2020-09-09 14:49:36 534

原创 IO模型及Netty线程模型

Netty简介1. 简介版本:Netty4.XNetty是基于NIO的异步网络通信框架能快速的搭建高性能易扩展的网络应用程序(服务器/客户端)2. 特征设计适用于各种传输类型的统一API-阻塞和非阻塞套接字基于灵活且可扩展的事件模型,可将关注点明确分离高度可定制的线程模型-单线程,一个或多个线程池真正的无连接数据报套接字支持(从3.1开始)性能更高的吞吐量,更低的延迟减少资源消耗减少不必要的内存复制安全Complete SSL/TLS and Sta

2020-09-08 18:14:17 386

原创 Mycat进阶之主从复制及读写分离解决方案

1 .为什么需要读写分离1.1 读写分离的背景数据量很大时候,我们的数据库面临着很大的压力,这时候我们需要从架构方面来解决这一问题,在一个网站中读的操作很多,写的操作很少,这时候我们需要配置读写分离,把读操作和写操作分离出来,最大程度的利用好数据库服务器。读写分离的实现就是在执行sql的时候,根据读操作还是写操作,根据读写映射到不同的数据库上。1.2 读写分离的原理主节点必须启用二进制日志,记录任何修改了数据库数据的事件。从节点开启一个线程(I/O Thread)把自己扮演成 mysql

2020-09-08 11:12:36 263

原创 分库分表之MyCat应用

分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。

2020-09-07 18:02:58 194

原创 分布式ID之生成策略

分布式系统ID生成的基本要求在分布式的环境下必须全局唯一。一般都需要单调递增,因为一般唯一ID都会存到数据库而Innodb的特性就是将内容存储在主键索引树上的叶子结点,而且是从左往右,递增的,所以考虑到数据库的性能,一般生成的ID也最好是单调递增。为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先它相对较长,另外UUID一般是无序的。分布式ID生成机制数据库自增ID机制适合分布式ID吗?答:大厂大数据量情况下不合适,小厂小并发,可以使用数据库ID自增和replace

2020-09-06 23:04:04 105

原创 分布式事务解决方案——SEATA

什么是SEATASeata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。官网文档:http://seata.io/zh-cn/docs/overview/what-is-seata.htmlSEATA相关术语*SEATA分布式事务执行流程:TM开启分布式事务(TM向TC注册全局事务记录);按业务场景,编排数据库、服务等事务内资源(RM向TC

2020-09-06 13:43:01 198

原创 并发工具类及线程池

同步辅助类CyclicBarrier是一个同步辅助工具类,它允许一组线程互相等待直到所有的线程达到一个公共屏障点。在程序中由固定的线程数量,这些线程有时必须等待彼此。应用场景:分组计算然后统计。理解:人满发车(20)底层设计:ReentrantLock 和 condition final ReentrantLock lock = this.lock; lock.lock();CountDownLatch允许一个或多个线程一直等待,直到其他线程的操作执

2020-09-04 10:30:14 78

原创 Spring事务传播机制与分布式事务解决方案

事务的ACID特性及隔离级别事务的ACID特性原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。事务隔离级别READ-UNCOMMITTED(读取未提交): 最低的隔离级别

2020-09-03 17:31:09 837

原创 Ribbon负载均衡 新手学习 (二)

负载均衡什么负载均衡在分布式集群系统中,通过负载均衡服务器将用户的请求分发给后端服务器,将用户的请求均匀分发到集群中的各个服务器中,分摊系统压力。常见的负载均衡有软件Nginx,LVS,硬件 F5等负载均衡分类集中式负载均衡集中式LB 即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软 件,如nginx),由该设施负责把访问请求通过某种...

2020-08-31 10:45:54 78

原创 JS 实现数据导出为Excel文件

仅供参考,如有Bug,出门百度。先引入js 插件 —— xlsx.full.min.js直接上代码以后修改直接用主要关注JS 部分<%@page import="java.util.LinkedHashMap"%><%@page import="java.util.ArrayList"%><%@page import="net.sf.json.JSONArray"%><%@page import="java.util.Map"%>&l.

2020-08-21 15:43:00 731

原创 Rabbitmq 学习

消息中间件 RabbitMQ 技术精讲基础篇 - RabbitMQ核心概念及基础API应用高级篇 - RabbitMQ高级特性实战篇 - Spring家族整合(SpringAMQP、Spring Boot、Spring Cloud Stream)集群篇 - RabbitMQ集群架构扩展篇 - SET化架构设计与大厂MQ组件设计及实现思路主流中间件介绍衡量消息中间件的指标:服务性能,数据存储,集群架构ActiveMQKafkaRocketMQRabbitMQ第一天:Rab

2020-08-14 15:56:52 218

原创 HttpsClientUtils

需要引用两个jar包:okhttp-3.6.0.jarokio-1.11.0.jarpackage com.utils;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import j

2020-08-14 12:00:36 879 1

原创 Redis 进阶

Redis 发布、订阅Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息并且可以订阅任意数量的频道。发布订阅(Pub/Sub):目前广泛使用的通信模型,它采用事件作为基本的通信机制,提供大规模系统所要求的松散耦合的交互模式:订阅者(如客户端)以事件订阅的方式表达出它有兴趣接收的一个事件或一类事件;发布者(如服务器)可将订阅者感兴趣的事件随时通知相关订阅者------是不是与设计模式里面的观察者模式一个妈妈生的?最经典的应用场景就是微博

2020-08-13 10:32:11 117

原创 并发容器(2)

什么是同步容器同步容器通过synchronized关键字修饰容器,保证同一时间内只有一个线程在使用容器,从而使得容器线程安全。什么是并发容器允许多线程同时使用容器,并且保证线程安全。核心:锁,cas,cow,分段锁。同步容器vector:stack: Stack实现的是先进后出的栈,入栈出栈都使用synchronizedhashTable:实现Map接口,实现的功能和HashMap基本一致(HashTable 不可出现null,HashMap键值可以使用null);hashTab

2020-07-07 23:06:20 78

原创 java 锁及并发容器

JAVA内存模型(JMM)为了保证共享内存的正确性(可见性、有序性、原子性)内存模型中定义了共享内存系统中多线程程序读写操作的行为规范JMM :一种符合内存模型结构,屏蔽了各种硬件和操作系统的访问差异,保证了java程序在各种平台下对内存的访问都能保证效果一致的机制规范限制处理器优化(重排序)使用内存屏障原子性:(处理器优化)指一个操作中CPU不可以在中途暂停在调度,不被中断操作,要不执行完成,要不就不执行。可见性: (缓存一致性问题)多个线程访问同一个变量时,一个线程如果修改了这.

2020-07-06 21:44:18 347

原创 Spring BeanPostProcessor 实现 Bean 方法增强示例

通过bean 后置处理器实现AOP功能(方法增强)通过实现 BeanPostProcessor 创建自定义后置处理器。获取到对象的实例。内部通过JDK动态代理或者 CGLIB完成对象代理实现方法的增强。package com.yling.postProcessor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import

2020-06-24 15:24:18 655

原创 Spring 源码系列——IOC及DI

灌水spring 用了很长时间了,譬如 IOC、DI、AOP之类高端大气上档次的专业名词是如雷贯耳,真是可远观而不可亵玩。如今工作一年了,是时候解开她神秘的面纱,开始攻城略地!先写段入口代码 /** * ApplicationContext的作用 : * 1.用于访问应用程序组件的Bean工厂方法 * 2.以通用方式加载文件资源的能力。 * 3.能够向注册的监听器发布事件。 * 4.解决消息的能力,支持国际化。 */ @Test public void test() {

2020-06-19 16:18:13 142

原创 rabbitmq 的消息确认机制(事物+confim)

在rabbitmq 中我们可以通过持久化数据,解决rabbitmq 服务器异常的数据丢失问题。问题:生产者将消息发送出去之后,消息到底有没有到达 rabbitmq 服务器?两种方式:AMQP 实现了事物机制。confirm模式事务机制txselect txCommit txRollbacktxselect:用户将当前channel设置成transation模式。txcommit:提交事务。txRollback:事务回滚。Channel channel = conne

2020-05-24 22:22:20 255

原创 rabbit mq publish_subscribe 订阅模式

rabbit mq 订阅模式模型:解读:1.一个生产者,多个消费者2.每个消费者都有自己的队列3.生产者没有直接把消息发送道队列,而是发送到了交换机、转发器 exchange4.每个队列都要绑定在交换机上。5.生产者发送的消息经过交换机到大队列就你呢个实现一个消息被多个消费者消费。场景:注册——> 邮件——>短信 … Channel chanel = connection.createdChannel(); //声明交换机 chanel.exchangeDecla

2020-05-24 21:32:38 112

原创 Rabbit mq——消息应答与消息持久化

Rabbit mq 消息应答与消息持久化消息应答boolean autoAck = false;channel.basicConsume( QUEU_NAME,autoAck, consumer );boolean antoAck = true;(自动确认模式) 一旦rabbit mq 将消息分发给消费者,就会从内存中将消息删除。boolean autoAck = false;(手动模式),如果有一个消费者挂掉就会交付给其他的消费者, rabbitmq 支持消息应答,消费者发送一个消息应

2020-05-24 20:00:16 107

原创 Redis 你了解吗?

前言redis 是一个开源,C语言编写的、支持网络交互的、可基于内存也可持久化的Key-value数据库。Redis数据结构字符串(Strings)字符串列表(lists)字符串集合(sets)有序字符串集合(sorted sets)哈希(hash)下面对各种数据类型做一个简单的介绍:字符串 (Strings)Redis 字符串数据类型的相关命令用于管理 redis 字符串值,基本语法如下:redis 127.0.0.1:6379> COMMAND K

2020-05-23 09:58:56 292

原创 java多线程锁四种状态

前言在java中面试最长问到的多线程并发问题,本文做了最简单的自我学习记录,将java多线程中锁的转变状态过程做以记录 ,后面还会对多线程及并发方面做更详细的总结。对象锁四种状态无锁在对象刚开始实例化的时候,锁的状态是无锁的,是可偏向的。偏向锁情况一当只有一个Thread#1线程开始进入临界区时,JVM会将lockObject的对象头Mark Word的锁标志位设为“01”,同时会用CAS操作把Thread#1的线程ID记录到Mark Word中,此时进入偏向模式。所谓“偏向”,

2020-05-20 11:17:04 493

原创 springcloud 微服务新手学习

微服务 强调服务的大小,它关注的是一个点,是解决某一个问题/提供落地对应服务的一个服务应用。 springboot 开发的一个小模块,专业的事情交给专业的模块来做。 强调的是一个一个的个体,每一个个体完成一个具体的任务或者功能。微服务优缺点微服务优点每个服务足够内聚,足够小。代码容易理解,这样能聚焦一个指定的业务功能或业务需求。开发简单,开发效率高,一个服务可能就是专一的只干一件事...

2019-12-13 10:39:33 110

原创 Openlayers 踩坑日记

Openlayers 踩坑日记创建瓦片地图、、使用的是全能电子地图下载器扒的高德地图瓦片。 //创建地图 var map = new ol.Map({ view: new ol.View({ center: center, zoom: 12 }), target: 'map' })...

2019-06-15 20:09:44 752 3

原创 js中日期转换

//获得年月日 得到日期oTime function getMyDate(str){ var oDate = new Date(str), oYear = oDate.getFullYear(), oMonth = oDate.getMonth()+1, ...

2019-06-15 20:08:09 279

空空如也

空空如也

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

TA关注的人

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