- 博客(183)
- 资源 (25)
- 收藏
- 关注
原创 Redis高可用之Redis Cluster
已经有了Redis主从+Sentinal(哨兵)为什么还需要Redis Cluster?解释这个问题之前,先看一个简单的Redis主从+Sentinel的架构图。从这个架构图不难看出,哨兵主要解决的问题是在主从架构下,主节点宕机的情况下,选择一个从节点提升为主节点继续对外提供服务。同时对Redis主从集群中的主节点、从节点进行监控。这个架构有如下缺点:主节点的容量大小决定了整个Redis集群的容量大小,即主节点的内存能够存储多少数据,整个集群就只能提供这么多数据的缓存服务;主节点宕机,在Sent
2020-12-02 09:21:18 647
原创 缓存四大问题及解决方案
问题一:缓存穿透,指缓存中没有数据,数据库中也没有数据。在进行数据的访问时,通过数据的key读取数据,但是该key对应数据在数据库中没有,在缓存中也没有,造成每次通过该key读取数据都会进行数据库操作,且每次读取都为null的情况。在大型项目中,这种无效的数据库操作会增加数据库的读压力。示例代码:public Object getData(String key){ if(redisTemplate.hasKey(key)){ return redisTemplate.opsFor
2020-12-01 08:47:51 2706
原创 Redis主从+Sentinal(哨兵)数据丢失问题分析
在使用Redis主从架构作为系统缓存服务,配合上Sentinal(哨兵)组件的监控、故障转移等特性,基本上来说就能够大部分缓存系统的需求。那么在这样一套架构中,在主从切换,数据复制过程中,会不会出现数据丢失?什么情况下数据会丢失?如何尽量减少数据丢失?这是本文需要跟大家一起学习的内容。从哲学的角度看,只要绝对都是伪命题,使用Redis主从架构+Sentinal(哨兵)组件,绝对不能够完全保证数据不丢失,那么在那种情况下会出现数据丢失呢?数据丢失场景分析-异步复制我们都知道,Redis主从架构中,客户端
2020-11-20 21:42:02 1670
原创 Redis主从复制原理剖析
生产环境中,为保证Redis缓存系统的高可用性,对于Redis集群,一般都会采用主从架构来实现读写分离。那么主从架构下,主节点和从节点间,数据是如何进行复制和同步,中间是一个什么样的流程,通过本文,想跟众博友和同行一起讨论。首先看一个图。上图展示了Slave节点第一次连接主节点和短暂断开后再次连接主节点的情况下,数据复制的流程。当从节点启动后,会根据自身配置文件中slave of配置的内容,得到主节点的IP和端口。从节点向主节点发送一个psync命令(如果主节点设置了秘钥等安全信息,则需带上主
2020-11-19 22:36:15 293
原创 深入剖析Redis高可用之Sentinal(哨兵)原理
生产环境中,对于任何的软件系统或者其组件,都需要保证其高可用性。引入Redis做缓存系统,首先通过主从架构,可以解决系统的并发瓶颈。一般情况下,在任何一哥Redis集群中,最最经典的用法都是一主多从的架构,主节点负责接收写请求,从节点接收读请求,即缓存的读写分离架构。但从上图的架构上看,是不能保证其高可用的,因为虽然从节点有多个,但是主节点只有一个,一旦主节点宕机,整个集群基本就丧失了接收新的写请求的能力,进而这个集群就瘫痪了。那么既然是高可用,就需要一种机制,能够在主节点宕机之后,能够从从节点中选
2020-11-17 23:58:32 442
原创 深入剖析Redis持久化机制
Redis持久化的意义Redis持久化的意义,主要体现在灾难恢复方面,即在Redis突然宕机重启后,能够快速恢复数据并对外提供服务。在学习Redis的时候,大家都知道是用来作为缓存,而缓存,普遍思维都是认为,用来存储经常读取但是变化频次比较低的数据,这类数据通常不会很多,比如一些数据字典等,即使Redis服务宕机,大概率情况下不需要从持久化文件恢复。而一般的处理思维是,服务读取数据时,如果未在缓存中命中,那么直接读数据库(如MySQL),读到数据后返回给客户的同时,在Redis重新存储一份。下次读取时就
2020-11-15 00:29:26 257 2
原创 9、Zookeeper分布式锁原理浅析
了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下使用Zookeeper实现分布式锁的简单原理。使用Zookeeper实现分布式锁,主要是基于Zookeeper的临时顺序节点来实现的,因此首先我们先简单了解一下Zookeeper的Znode类型。1、Zookeeper的Znode类型...
2019-10-08 10:16:05 1309 1
原创 8、Zookeeper服务注册与发现原理浅析
了解Zookeeper的我们都知道,Zookeeper是一种分布式协调服务,在分布式应用中,主要用来实现分布式服务的注册与发现以及分布式锁,本文我们简单介绍一下Zookeeper是如何实现服务的注册与发现的。使用Zookeeper实现服务注册与发现,主要应用的是Zookeeper的Znode数据模型和Watcher机制,因此咱们先从Zookeeper的数据模型说起。1、Zookeeper数据模...
2019-10-01 15:48:04 5096 3
原创 Spring Boot整合Redis实现简单的分布式锁
随着微服务等分布式架构的快速发展及应用,在很多情况下,我们都会遇到在并发情况下多个线程竞争资源的情况,比如我们耳熟能详的秒杀活动,多平台多用户对同一个资源进行操作等场景等。分布式锁的实现方式有很多种,比如基于数据库、Zookeeper、Redis等,本文我们主要介绍Spring Boot整合Redis实现分布式锁。
2019-05-31 18:53:50 14863 13
转载 设计模式看了又忘,忘了又看?
设计模式收藏这篇就够了耗时了 5 个月,终于把设计模式一整个系列写完。其实设计模式这一系列文章网上已经有很多非常好、非常优秀的文章,为什么要写呢?一方面是为了学得更扎实,印象中设计模式学习了 2 遍,记得牢的基本就那几个众所周知的,反思前面 2 次学习过程,缺少了思考的过程,没有把知识消化掉转化成自己的,就像动物一样,吃进去的东西没有消化只能排出。另一方面是利用这个学习过程,学会把知识用文字...
2019-05-28 11:32:24 1142
原创 @ComponentScan向Spring IOC容器中注入组件
本文我们就来详细的探索一下在使用注解配置的方式注入Bean时,@ComponentScan注解组件扫描的应用。
2019-04-10 13:00:48 1329
原创 PGP生成秘钥对及应用
PGPDesktop下载链接:https://download.csdn.net/download/hfy19981024/104389821、下载安装PGP安装很简单,根据安装包中的步骤一步一步安装破解之后即可使用。2、生成秘钥点击下一步输入名称和邮箱选择Advanced,可以选择PGP加密时的对称加密算法及非对称加密算法即对应的秘钥长度。继续往下,根据向导完成秘钥生成即可...
2019-04-09 11:23:46 18148 4
原创 context:component-scan向Spring IOC容器中注入组件
本文我们就来详细的探索一下在使用XML配置方式注入Bean时,component-scan组件扫描的应用。
2019-03-28 15:07:41 603
原创 使用@Configuration和@Bean注解向Spring IOC容器中注入组件
在使用Spring框架开发应用的过程中,大家都知道使用Spring开发应用程序,我们应用程序中所有的Bean都是通过Spring的IOC容器来管理。将Bean注入到Spring IOC容器中的方式多种多样,如通过传统的XML方式注入,通过注解的方式注入等。本文我们就通过例子的形式看一看如何通过注解@Configuration和@Bean向容器中注入组件。
2019-03-26 11:12:47 4479 1
原创 XML方式向Spring IOC容器中注入组件
在使用Spring框架开发应用的过程中,大家都知道使用Spring开发应用程序,我们应用程序中所有的Bean都是通过Spring的IOC容器来管理。将Bean注入到Spring IOC容器中的方式多种多样,如通过传统的XML方式注入,通过注解的方式注入等。本文我们就通过例子的形式看一看如何通过XML的方式向Spring IOC容器中注入一个Bean。
2019-03-26 11:01:36 431
原创 Openssl生成RSA证书,Java实现公钥证书加密,私钥证书解密
1、证书生成过程生成RSA私钥:genrsa -out private_key.pem 1024把RSA私钥转换成PKCS8格式pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM –nocrypt生成RSA公钥rsa -in private_key.pem -pubout -out rsa_public_key...
2019-01-02 16:18:56 2226
原创 细说链式存储结构
提起链式存储结构,其与数组是两个非常基础的数据结构,每当提到链式存储结构时,一般情况下我们都会将其与数组放到一块儿来比较。对于数组与链表,从结构上来看,数组是需要一块连续的内存空间来存储数据,对内存的要求非常高,比如说我们申请一个100M大小的数组,而如果我们的内存可用空间大于100M,但是没有连续的100M可用空间,那即便是我们的内存空间充足,在申请空间时也会申请失败。而对于链表来说,他对内...
2018-10-13 13:31:49 20691
原创 Java面试(71-90 Spring)
71、 什么是spring?Spring是一个一站式构建企业级应用的一个轻量级解决方案框架。Spring是模块化的,允许用户根据自己需求使用特定模块。你可以使用IOC容器和一些web框架,也可以只使用Hibernate代码或者JDBC抽象层。Spring框架支持声明式事务管理,支持通过RMI或者Webservice远程访问你的业务逻辑,并且提供非常多的持久化方案持久化数据。Spring提供了一个...
2018-10-08 21:21:16 348
原创 Java面试题(61-70)
61、线程池的常用参数有哪些?在Java中,我们一般通过继承Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动。但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的创建线程和销毁线程会大大的降低系统运行的效率。线程池正是为了解决多线程效率低的问题而产生的,他使得线程可以被复用,就是线程执行结束后不被销毁,而是可以继续执行其他任务。ja...
2018-08-03 09:24:25 323
原创 Java面试题(56-60)
56、List, Set, Map 是否继承自 Collection 接口?List, Set是继承自Collction接口,而Map不是。57、List、Map、Set 三个接口,存取元素时,各有什么特点?首先,List 与 Set 具有相似性,它们都是单列元素的集合,所以,它们有一个共同的父接口叫 Collection。Set里面不允许有重复的元素,所谓重复,即不能有两个相等(...
2018-07-31 09:43:36 350
原创 Java面试题(41-55)
41、Java语言如何进行异常处理,关键字:throws、throw、try、catch、finally分别代表什么意义?在try块中可以抛出异常吗?try块表示程序正常的业务执行代码。如果程序在执行try块的代码时出现了“非预期”情况,JVM将会生成一个异常对象,这个异常对象将会被后面相应的catch块捕获。catch块表示一个异常捕获块。当程序执行try块引发异常时,这个异常对象将会被...
2018-07-31 09:35:46 368
原创 Java面试题(21-40)
21、面向对象的特征有哪些方面?计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象协作的过程。面向对象编程就是按现实业务一样的方式将程序代码按一个个对象进行组织和编写,让计算机系统能够识别和理解用对象方式组织和编写的程序代码,这样就可以把现实生活中的业务对象映射到计算机系统中。面向对象的编程语言有抽象、封装、继承 、多态等 4 个主要的特征。抽象...
2018-07-29 12:47:30 425
原创 Java面试题(1-20)
1、一个”.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?可以包含多个类,但是只能有一个public类,并且public类的类名必须与.java文件名一致2、Java 有没有 goto?Java中的保留字,但是并未在Java 中使用。3、说说&和&&的区别。&和&&都可以用作逻辑与的运算符,表示逻辑与(and),...
2018-07-29 12:21:28 468
原创 Spring MVC的处理流程
本文简单介绍一下Spring MVC的请求流程,因为上次在面试过程中面试官有问到这个问题,希望对大家有用。用户发送请求至前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping处理器映射器。处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。D...
2018-07-09 10:02:10 1619 1
原创 通过实例说设计模式——原型模式(Prototype Pattern)
在我们的现实的生活中,有很多的东西都是大致类似的,只有少许的特征不一样,比如说杯子,可能同一个品牌的杯子,除了深度不一样之外,其他的无论是口径、直径等都是一致的;再比如我们同一个型号、同一个品牌的汽车,高配版、中配版、低配版,他们除了一些少许的特征不一样之外,其他的都是一样的。我们以汽车(Car)为例子,我们来看一下一般情况下我们如何创建汽车的对象;//汽车类public class...
2018-07-05 12:14:00 723
原创 通过实例说设计模式——单例模式
所谓单例模式,也就是说在整个系统中,对于设计成单例模式的类,在创建对象时都只返回一个实例,对于整一个类,系统中只会生成一个对象。比如说在我们的Spring中,创建Bean的实例默认都是单例模式;为了能够说清楚单例模式,我们通过一个例子来向大家描述单例模式如何实现以及单例模式的相关场景。比如说在自然环境中,对于任何物体来讲,我们的地球(Earth)都只有一个,所以无论是任何人,在他需要获取一...
2018-06-21 09:37:27 466
转载 Spring中@Transactional事务回滚
一、使用场景举例在了解@Transactional怎么用之前我们必须要先知道@Transactional有什么用。下面举个栗子:比如一个部门里面有很多成员,这两者分别保存在部门表和成员表里面,在删除某个部门的时候,假设我们默认删除对应的成员。但是在执行的时候可能会出现这种情况,我们先删除部门,再删除成员,但是部门删除成功了,删除成员的时候出异常了。这时候我们希望如果成员删除失败了,之前删除的部...
2018-06-16 10:32:24 933
原创 Java高级系列——异常(Exception)
在解释Java中的异常时,首先我们来看一张图 上图是我们Java中,异常类的一个继承关系图,从图中我们可以看到Java标准库内构建的这些通用的异常,他们都是以Throwable为顶层父类。Throwable又派生出Error类和Exception类。错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该...
2018-06-16 10:00:49 1429
转载 Java高级系列——强引用、软引用、弱引用、虚引用
强引用只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式。软引用非必须引用,内存溢出之前进行回收,可以通过以下...
2018-06-15 21:37:20 599
原创 通过实例说设计模式——抽象工厂模式
工厂方法模式引入工厂等级结构,解决了简单工厂模式中工厂类职责过重的问题,但由于工厂方法模式中每个工厂只创建一类具体类的对象,这将会导致系统当中的工厂类过多,这势必会增加系统的开销。此时,我们可以考虑将一些相关的具体类组成一个“具体类族”,由同一个工厂来统一生产,这就是我们本文要说的“抽象工厂模式”的基本思想。接着来看我们抽象方法模式一文中我们说的例子,我们现在有这么一个场景;现在用户的需求变多...
2018-06-15 16:51:07 37583 2
原创 通过实例说设计模式——工厂方法模式(Factory Method Pattern)
上文我们简单介绍了简单工厂模式,本文我们将会聊一聊工厂方法模式(Factory Method Pattern)。在介绍工厂方法模式之前,我们先来看一下简单工厂模式的样例代码。//具体类的抽象接口public interface Shape { /** * 绘制图形 */ void draw(); /** * 擦除图形 */...
2018-06-14 10:39:20 521
原创 通过实例说设计模式——简单工厂模式
本文我们通过实例的方式来简单描述一下简单工厂模式的由来及其作用,话说我们现在需要开发一个图形界面工具,然后将这个工具提供给一个客户去使用,系统初期我们只需要画一个圆(Circle)和一个三角形(Triangle)即可。那么我们的工具就按照如下的方式设计。public class Shape { public void draw(String type) { if(t...
2018-06-10 22:50:44 2016
原创 Atlas实现MySQL读写分离
Atlas安装mkdir /data/atlascd /data/atlaswget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm安装命令rpm -i Atlas-2.2.1.el6.x86_64.rpm安装位置/usr/local/mys...
2018-06-07 17:30:41 952
原创 MySQL 8.0主从(Master-Slave)配置
MySQL 主从复制的方式有多种,本文主要演示基于基于日志(binlog)的主从复制方式。MySQL 主从复制(也称 A/B 复制) 的原理Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件, 这些记录叫做二进制日志事件(binary log events);Slave 通过 I/O 线程读取 Master 中的 binary l...
2018-06-04 16:43:02 46405 14
原创 Linux上安装MySQL
本文主要演示在Linux系统上如何安装MySQL最新版本MySQL 8.0自带MySQL卸载安装前,我们可以检测系统是否自带安装 MySQL,如果自带安装,那么卸载原来安装的MySQLrpm -qa | grep mysql如果显示安装了MySQL,那么可以卸载 我们系统显示如上,那么我们通过如下命令将已安装的信息卸载(当然这一步视不同情况而定,如果你的机器上尚未...
2018-06-04 16:30:48 1542
原创 持久化存储-MySql拓展
先说一个概念 ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability). 这是可靠数据库所应具备的几个特性.一、MySql拓展1、业务拆分随着网站的业务不断发展单个库访问量越来越大,因此不得不对系统业务进行拆分。...
2018-06-04 16:24:22 4299
原创 系统持续集成-SonarQube+Maven 分析器插件的配置与使用
安装完成SonarQube之后,我们的系统中是没有项目的。 那么接下来我们来使用SonarQube+Maven 分析器插件来使用SonarQube分析我们的代码。1、Maven配置在 Maven 本地库中的 settings.xml 配置文件中的节点中添加如下配置:<profile> <id>sonar</id> &...
2018-05-16 15:57:16 4163 1
原创 系统持续集成-SonarQube安装
SonarQube介绍SonarQube是一个管理代码质量的开放平台,它可以从七个维度检测代码质量(为什么要用SonarQube): - 复杂度分布(complexity): 代码复杂度过高将难以理解、难以维护重复代码(duplications): 程序中包含大量复制粘贴的代码是质量低下的表现单元测试(unit tests): 统计并展示单元测试覆盖率编码规范(coding rul...
2018-05-16 15:51:27 495
gpg4win-3.1.7
2019-04-09
Spring Cloud 中文参考手册
2017-08-21
Spring Cloud 参考手册英文版
2017-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人