自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Guava、Redis实现二级缓存

最近在重构老服务,在公共配置服务当中,博主自己设计了一个二级缓存的简易框架,支持一级缓存及二级缓存的技术替换,例如将Guava换成Caffeine,或者将Redis换成Memcached。缓存是服务端提高接口访问速度和减轻数据库压力的利器,对于热点数据的缓存是很有必要的。缓存也有分类:本地缓存:Guava,Caffeine,Ehcache或者自己简单的使用HashMap实现; 分布式缓存:Redis,Memcached等。虽然分布式缓存(redis等)单节点QPS已经到达10W级别,但是相对

2020-10-08 23:33:55 261 3

原创 Redis数据结构String及Hash存储大小及读取性能对比

最近把公司的公共配置服务工程做了重构,并且在新的工程中加入了二级缓存,默认使用Guava和Redis实现。Guava作为本地一级缓存,Redis作为二级分布式缓存,并支持一二级缓存技术的替换。待工程完善之后,会再写一篇博客分享我在重构过程中的一些想法。在使用Redis作为二级缓存的过程中,冒出了这么一个想法,我是不是可以将Hash的结构也通过String进行存储。因为Hash其实也可以转换成为String,如下图所示。其实这样也可以通过String的数据类型达到Hash的效果,但是还是决定先从存

2020-09-25 00:46:10 565

原创 SpringCloud中Feign的基本使用

在使用SpringCloud生态的时候,微服务之间会进行调用,一般我们有两个选择。一是选择使用RestTemplate,二是使用Feign。在RestTemplate上加上@LoadBalanced注解,即可生成Ribbon的代理对象,直接实现负载均衡。Feign直接使用声明式调用,更加符合大家平时写接口的习惯,下面主要针对Feign做下介绍。1、依赖引入<dependency><!-- consul 服务发现 --> <groupId>org.sp

2020-09-15 22:37:40 606

原创 Spring源码(三)——循环依赖及Bean的初始化

上一篇博客(https://blog.csdn.net/yangchenhui666/article/details/107496324)已经讲到了XML文件是如何一步步变为BeanDefinition的。这篇主要讲解refresh()中另外一个非常重要的方法finishBeanFactoryInitialization(beanFactory),该方法中会初始化所有的非惰性的Bean。ps:(今天先将完整的图发出来,太困了,明天再写)...

2020-08-02 23:15:51 71

原创 Spring源码(二)——从配置文件到BeanDefinition

上一篇博客(https://blog.csdn.net/yangchenhui666/article/details/107476319)中说到Spring上下文初始化中最重要的方法refresh(),这一篇来大概介绍下refresh()当中一个很重要的方法obtainFreshBeanFactory(),在这个方法中,会将配置文件中的配置信息或者配置类中的信息转化为BeanDefinition。在学习Spring的时候,我们往往写过这样的代码:ClassPathXmlApplicationCon

2020-07-22 00:20:15 57

原创 Spring源码(一)——Spring上下文ClassPathXmlApplicationContext

众所周知,Spring的两大基础特性是IOC(Inversion of control)和AOP(Aspect-oriented programming),IOC通常有两种实现方式,依赖查找和依赖注入。依赖查找:需要容器提供查找方法,例如:BeanFactory#getBean(String name) 依赖注入:不需要使用API,可以直接在配置文件中定义好通过名称或者类型进行自动注入Spring中两种都有实现,同时依赖注入的时候,又可以分为构造器注入或者Setter方法注入。在企业环境中,我们

2020-07-20 23:10:46 80

原创 三种观察者设计模式实现

观察者设计模式又被称作发布订阅模式,是定义对象之间一对多关系的一种设计模式。当一个对象A发生改变的时候,关注A的其他对象也会得到通知并发生改变。观察者设计模式在项目中的使用是比较多的,例如一个经典的场景:用户注册成功之后,会发生赠送相应的积分(A),赠送优惠券(B),发送注册成功邮件(C)等动作。如果我们使用传统的调用,那么注册的这个接口,就要调用A,B,C三个接口。但是其实对于用户中心来说,是不关注积分赠送,优惠券赠送这类问题的。并且,如果以后产品又提了一个需求,用户注册成功之后,还得发送短信,生成一

2020-06-04 22:42:08 132

原创 Springboot项目集成Shedlock、Redis

在一个系统开发的初期,通常都是一个单体的架构,后面随着业务的发展,单体架构已经扛不住业务的压力。慢慢的会向微服务的方向去发展,在多节点的情况下,就会出现多个节点的定时任务可能会重复执行的情况。1、Shedlock基本介绍相对于xxl-job,Shedlock的集成更加的轻量,同时也不需要对服务进行过多的改造,我们当时在技术选型的时候就是使用Shedlock。Shedlock从严格意义上来说,并不是一个分布式任务调度框架,设计的初衷也不是作为一个调度框架,而是一种分布式锁。所谓的分布式锁,解决的核

2020-05-12 19:54:39 831 1

原创 RocketMq相同topic不同tag踩坑

RocketMq在我们项目中一般用于系统间的解耦,有时候会使用不同的Consumer消费不同的tag,但是博主昨天踩了个坑。情景如下:两个consumer接收相同的topic,不同tag的消息,但是当处方系统发送tagA的消息的时候,consumer2消费了,本来consumer2应该是要丢弃掉的,但是却消费了,主要问题就是配置了相同的Group。RocketMq消费者如果针对同一...

2020-03-01 09:54:04 5284 5

原创 mysql执行计划及sql优化

sql优化主要就是针对表的索引进行优化,同时我们需要使用explain来看数据库到底是如何执行我们写的sql的。为什么索引能够帮助我们提高sql的查询速度?如下图所示:在mysql5.5之后,就默认使用InnoDB为存储引擎,InnoDB使用B+树实现,B+树的数据全部存储于叶子节点当中,查询任意数据的此处都为N(树的高度)。如上图所示,使用索引查找只需要3次寻找,通过索引当中的地址,...

2020-02-23 20:57:15 142

原创 Java锁基本使用及AQS

synchronized可以解决Java的并发问题,

2020-02-17 16:27:31 104

原创 Java线程状态及线程通信

目录1、线程状态2、线程终止2.1、interrupt()2.2、使用volatile标志位3、线程通信3.1、等待/通知机制3.2、suspend()/resume()3.3、wait()/notify()3.4、LockSupport.park()/LockSupport.unpark()3.5、Thread.join()线程是系统调度的最小单元,c...

2020-02-10 18:59:17 224 1

原创 Java基本内存模型 & synchronized & volatile

目录1、Java内存模型1.1、方法区1.2、堆内存1.3、虚拟机栈1.4、本地方法栈1.5、程序计数器2、volatile2.1、volatile的特性2.2、volatile的使用3、synchronized3.1、synchronized的特性3.2、锁升级4、volatile与synchronized的区别synchronized在并...

2020-02-09 17:16:10 682 2

原创 Java BIO & Java NIO

Java BIO & Java NIO在JDK1.4之前,Java的所有socket通信都是基于同步阻塞(BIO)模式,BIO模式在性能和可靠性上存在这巨大的瓶颈,所以在JDK1.4推出了NIO类库,支持非阻塞IO。1、BIOJava BIO通信基于socket + io,其中serverScoket.accept()是一个阻塞方法,会一直等到有客户端socket连接进入才会返...

2019-10-28 14:40:01 302 1

原创 Paxos&Zookeeper ZAB协议

Paxos & Zookeeper ZAB协议小灰灰上一篇博客简单介绍了2PC和3PC分布式系统一致性协议(https://blog.csdn.net/yangchenhui666/article/details/98512432) ,但是最重要的分布式一致性协议还是Paxos协议。Zookeeper中使用的ZAB协议就是Paxos的一个变种协议。Paxos在分布式系统当中,比较简...

2019-08-13 16:14:25 194

原创 分布式系统一致性协议:2PC&3PC

分布式系统一致性协议在分布式系统当中,一致性,可用性,分区容错性排列组合,成为CAP理论中的三种情况,如果有不了解的同学可以先参照小灰灰之前写过的一篇博客简单了解一下(https://blog.csdn.net/yangchenhui666/article/details/92014829)。对于一个分布式系统而言,分区容错性是一个最基本的要求。服务必然会被部署到不同的网络节点,否则就不存在所...

2019-08-06 15:54:25 135

原创 Zookeeper基本介绍&Zookeeper分布式锁

Zookeeper基本介绍zookeeper应用场景配置中心命名服务Master选举集群管理分布式队列分布式锁zookeeper数据模型层次命名空间从官网上可以看到zookeeper的数据模型图如下:类似Linux文件系统,以(/)为 根节点既可以存储数据,也可以可以存储子节点,所以可以认为zookeeper节点既是文件夹,其本身也是一个文件节点的路径 总是表示为...

2019-08-04 22:39:26 146 2

原创 数据库事务隔离级别

之前一直说数据库的四个特性ACID,但是一直都不太明白,今天画了一幅图,结合实际代码,操作一遍,感觉清楚多了。大家可以写个简单代码,打个断点调试下就清楚很多了。...

2019-07-13 22:19:11 56

原创 分布式CAP理论简介

CAP基本含义1、一致性(Consistency)对于单个节点,读操作总是能够读取到之前写入的值。2、可用性(Available)读写操作在单台机器发生故障的情况下仍然能够正常执行。返回成功或者失败都表示可用。3、分区容错性(Partition Tolerance)机器故障、网络故障、机房停电等异常情况下仍然能够满足一致性和可用性。问题1、分区容错性和可用性有什么区别?分区...

2019-06-14 22:32:14 123

原创 RocketMQ基本概念及优化

RocketMQ一、RocketMQ基本组成1、基本组成在了解Rocket架构之前,我们先了解下RocketMQ中,各个角色分别是干什么的,起到了一个什么作用。I、NameServer1、主要用于存储topic,broker的关系,功能类似于zookeeper。2、NameServer之间互相不通信,支持集群,一个挂掉之后不会影响其他的节点。3、当Producer和Consumer都...

2019-06-04 20:32:01 929

原创 分布式事务

分布式事务产生场景分布式事务解决方案基于数据库XA/JTA协议需要数据厂商支持异步校对方式异步拉取对账单形式基于可靠消息(MQ)解决方案异步场景;通用性较强;扩展性较高RabbitMQ特性整体设计思路可靠的消息生产–消息发送由事务的发起方(一般为业务首先开始的一方)维护消息表,同时业务操作要和消息表的插入在同一个事务中,确保业务操作和插入消息表记录同时成功。通过...

2019-05-15 20:06:33 113 1

原创 jedis及Redis过期

import org.junit.Test;import redis.clients.jedis.Jedis;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.Timer;import java.util.TimerTa...

2018-07-09 22:34:19 528

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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