自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Felix

Better And Better

  • 博客(31)
  • 资源 (7)
  • 收藏
  • 关注

原创 SpringBoot集成kafka全面实战

本文是SpringBoot+Kafka的实战讲解,如果对kafka的架构原理还不了解的读者,建议先看一下《大白话kafka架构原理》、《秒懂kafka HA(高可用)》两篇文章。一、生产者实践 普通生产者 带回调的生产者 自定义分区器 kafka事务提交 二、消费者实践 简单消费 指定topic、partition、offset消费 ...

2020-03-28 14:13:29 199399 111

原创 如何保证Redis缓存和数据库的双写一致性?

在数据库+缓存模式下,当数据库中的数据需要更新时,缓存里的数据怎么处理?如何保证缓存和数据库中数据的一致性?常用的解决方案有两种(其他渣渣的方案这里不讨论):1、先删除缓存,再更新数据库;2、先更新数据库,再删除缓存;下面我们就来看一下这两种方案,看看它们是怎么保证数据一致性的?一、先删除缓存,再更新数据库理想的流程是这样的:先删除缓存,再更新数据库,更新完数据库后,当有请求进...

2020-02-22 15:19:58 2240

原创 Redis的过期策略以及内存淘汰机制

我们知道,redis中缓存的数据是有过期时间的,当缓存数据失效时,redis会删除过期数据以节省内存,那redis是怎样删除过期数据的?删除过期数据的策略是什么?这就是我们今天要讨论的第一个问题:Redis过期策略。redis为什么这么快,原因之一就是Redis操作都是基于内存的,既然是基于内存的,而内存的大小是有限的,当内存不足或占用过高时,怎么办?这就是我们今天要讨论的第二个问题:Redi...

2020-02-21 00:06:49 8052 5

原创 Redis缓存穿透、缓存击穿和雪崩

一、缓存穿透在讨论缓存穿透之前,我们先来看下从缓存中读取数据时的流程,如图:缓存穿透是什么?如果每次都去查一个“缓存和数据库中都必不存在的数据(如id=-1的数据)”,因为缓存中不存在,那么每次请求都会打到DB上,从而导致缓存失去意义,在高并发的情况下就可能导致数据库崩溃,这就是缓存穿透。缓存穿透的解决方案1、规范key过滤规范key的命名,并且统一缓存查询的入...

2020-02-18 22:09:20 5558 2

原创 Redis分布式锁的Java实现(基于Lua脚本)

※ Redis分布式锁的实现,主要就是基于“加锁、释放锁、防止出现并发”三点来展开的。网上也有很多例子,但都没有实现守护线程,我在这里将守护线程的实现整合进去,供大家参考。在《Redis实现分布式锁的思路》中我们讲了Redis分布式锁实现的思路,没看过的童鞋可以先去看一下,因为这里的实现就是基于设计思路展开的。实现Redis分布式锁,我们需要考虑 加锁,使用Redis 2.6.12以...

2020-02-17 22:35:44 1205 2

原创 Redis实现分布式锁

锁我们都不陌生,在多线程并发的情况下,如何保证某代码块在同一时刻只能被一个线程访问呢,这时候我们就需要用到“锁”,提到锁的实现,我们可能想到了java的synchronized或ReentrantLock,但需要注意的是,synchronized或ReentrantLock只能保证在同一个JVM内的多个线程同步执行,如下图,那么,在集群分布式环境中,如何保证不同节点的线程同步执行呢...

2020-02-17 22:27:55 591

原创 超详细的Redis入门教程

​目录: redis简介 Linux环境安装redis redis的数据类型和常用命令 redis多数据库 redis数据的持久化 redis的事务 Redis主从复制(读写分离)、主从切换(一主二从三哨兵) redis发布订阅 redis单线程模型 redis批量执行命令 redis禁用或重...

2020-02-16 20:03:04 1823

原创 数据库的锁机制

数据库的锁机制前言在上一篇文章《数据库的事务&事务的ACID特性&四种隔离级别》中说过,根据所使用的存储引擎的不同,对应表具有不同的存储机制、索引技巧以及锁机制等。所以,我们要知道,不同存储引擎的锁机制是不一样的,讨论数据库的锁机制之前,我们首先要明确讨论的是哪种存储引擎的锁机制。如果对数据库事务的存储引擎还不清楚的读者,可以先看下上篇文章《数据库的事务&事务的ACID特性...

2018-03-07 18:20:38 376

原创 数据库的事务&事务的ACID特性&四种隔离级别

数据库的事务&事务的ACID特性&四种隔离级别1、概念事务是指"作为单个逻辑工作单元"所执行的一系列操作。要么全部执行,要么全部不执行。(也可以简单的理解为事务就是要做或所做的事情)但并不是所有的操作集合都能称为事务,事务需要满足4个特性(也称为事务的ACID特性)。2、事务的ACID特性(1).原子性:事务包含的所有操作要么全部执行成功提交,要么全部执行失败回滚;(2).一致性:...

2018-03-05 16:02:06 476

原创 MyBatis逆向工程

MyBatis逆向工程我们在使用MyBatis时候,需要程序员手动编写pojo类、xxxMapper.xml文件以及接口文件。如:数据库中有张单表Users表,我们在使用MyBatis面向mapper接口编程时,需要手动编写Users.java(实体类)、UsersMapper.xml(sql)、UserMapper.java(接口文件)。而MyBatis的逆向工程可以

2017-03-27 14:59:24 503

原创 MyBatis框架入门

MyBatis框架原理一、MyBatis介绍MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。(摘自百度百科)关于MyBatis框架的介绍,网上有很多,此处不再赘述。简单的说,MyBatis

2017-03-08 22:47:11 401

原创 SpringMVC拦截器

SpringMVC拦截器Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,用户自定义的拦截器必须实现HandlerInterceptor接口。1、拦截器的定义自定义拦截器(自定义类)必须实现HandlerInterceptor接口,重写接口的3个方法。

2017-03-02 14:39:25 314

原创 SpringMVC文件上传

SpringNVC的文件(含图片)上传功能!

2017-03-01 13:26:15 346

原创 SpringMVC全局异常处理器

Spring MVC提供3种统一处理解决异常的机制: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver(2)实现Spring的异常处理接口HandlerExceptionResolver(3)使用@ExceptionHandler注解实现异常处理

2017-02-28 14:03:05 650

原创 SpringMVC的数据回显

数据回显指的是当页面提交的数据格式出错时,validation机制就会捕捉到报错信息,将报错信息渲染到页面给用户看。若不用数据回显,当报错信息渲染展示给用户的时候,提交之前我们在页面表单中填入的一堆信息就会被清空。数据回显就是要求哪怕我上次填入的数据是不合法的,但是你给我提示报错信息的时候不要将我之前填入的一大堆信息清空,而是我之前填入什么,继续给我们回显到页面上来。

2017-02-27 13:26:15 1207

原创 JVM类加载机制

一、什么是类加载开发人员写的.java文件经过编译后会生成.calss文件,而JVM把.class字节码文件加载到内存中,并对数据进行校验、准备、解析、初始化,最终形成可以被JVM直接使用的java类型,这就是虚拟机的类加载过程。类加载过程就是读取.class文件到内存中,将其放在方法区内,然后在Java堆区创建一个java.lang.Class对象,通过Class对象来访问方法区中类的数据结构。类加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java

2021-01-24 14:14:21 693

原创 秒懂 kafka HA(高可用)

​我们知道,kafka中每个topic被划分为多个partition,每个partition又有多个副本,那么这些分区副本是怎么均匀的分布在整个kafka集群的broker节点上的?partition副本的leader是通过什么算法选举出来的?partition副本的follower是怎么复制备份leader的数据的?本文我们就来说一说和 kafka 高可用相关的一些策略。一、名词解释要想...

2020-03-28 15:49:17 2202

原创 Linux搭建 zookeeper+kafka 集群

因为kafka是依赖于zookeeper来协调管理的,安装kafka之前我们需要先安装zookeeper,而zookeeper的运行又需要jdk来编译,所以安装zookeeper之前应该先安装jkd。所以,我们需要依次安装:jdk——>zookeeper——>kafka。一、安装jdk1、检查系统是否安装了openJDK有的CentOS系统默认安装了openJDK,检查当前...

2020-03-13 10:37:29 1954 1

原创 大白话 kafka 架构原理

大数据时代来临,如果你还不知道Kafka那就真的out了!据统计,有三分之一的世界财富500强企业正在使用Kafka,包括所有TOP10旅游公司,7家TOP10银行,8家TOP10保险公司,9家TOP10电信公司等等。LinkedIn、Microsoft和Netflix每天都用Kafka处理万亿级的信息。本文就让我们一起来大白话kafka的架构原理。kafka官网:http://ka...

2020-03-12 19:38:07 2260 14

原创 去除IDEA代码中的duplicated波浪线(警告线)

如果IDEA中代码下面出现下图所示的黄色警告线,提示Finds duplicated code,表示在项目中有重复代码,可考虑重构。那如果我们想要关闭这个功能,该怎么做呢?首先选中File,点击setting,出现setting窗口,然后选中Editor下的Inspections,再将右侧的General下的Duplicated Code 的勾选框去掉,再点击Apply,最后点击OK就...

2020-03-06 13:24:23 5149

原创 RabbitMQ如何保证幂等性?

有个兄弟去年参加阿里面试的时候,就被问到了幂等性的问题。幂等性是分布式系统设计中的一个重要概念,是在做系统或者接口设计时要着重考虑的问题,尤其像支付宝、银行、互联网金融等涉及钱的系统,既要高效,数据也要准确,绝对不能出现多扣款,多打款等问题,幂等性的设计就显得更为重要了。本文我们就先来解释一下什么是幂等性?然后再看一下在MQ中怎么保证幂等性?一、什么是幂等?幂等性的实质是:对于一个...

2020-03-01 17:57:02 6160 7

原创 RabbitMQ如何保证消息的可靠传输?

一、消息的可靠传输消息的可靠传输是指消息从Producer发送到Broker,再到Consumer被消费的整个过程中,要确保消息不丢失,如果出现消息丢失的情况,系统也要能发现,并执行一些补偿措施,而不是消息丢了都不知道,石沉大海。如图,消息从Producer发送到Broker再到Consumer被消费的整个传输过程中,因为网络中断等原因,可能会造成消息的丢失,出现消息丢失的情况有...

2020-03-01 17:52:10 1285 1

原创 SpringBoot + RabbitMQ 实现"主题模式"

RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式、发布者确认模式。本文在SpringBoot+RabbitMQ环境实现"主题模式"。一、主题模式特点:1、X代表交换机,生产者没有将消息直接发送到队列,而是先发送到了交换机。2、主题模式的交换机类型为topic。3、一个队列可以有多个消费者,但发送到队列的消息...

2020-03-01 17:45:22 1190

原创 SpringBoot + RabbitMQ 实现"路由模式"

RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式、发布者确认模式。本文在SpringBoot+RabbitMQ环境实现"路由模式"。一、路由模式特点:1、X代表交换机,生产者没有将消息直接发送到队列,而是先发送到了交换机。2、路由模式的交换机类型为direct。3、一个队列可以有多个消费者,但发送到队列的消...

2020-03-01 17:39:29 2103

原创 SpringBoot + RabbitMQ 实现"订阅模式"

RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式、发布者确认模式。本文在SpringBoot+RabbitMQ环境实现"订阅模式"。一、订阅模式特点:1、X代表交换机,生产者没有将消息直接发送到队列,而是先发送到了交换机。2、订阅模式的交换机类型为fanout。3、一个队列可以有多个消费者,但发送到队...

2020-03-01 17:28:05 3005

原创 SpringBoot+RabbitMQ 实现"工作队列"

RabbitMQ官网提供了七种队列模型,分别是:简单队列、工作队列、发布订阅、路由模式、主题模式、RPC模式、发布者确认模式。本文在springboot中实现"工作队列"。一、工作队列特点:一个生产者,多个消费者;注意:一条消息只能被一个消费者消费,不能被多个消费者重复消费;二、在SpringBoot中的实现还是新建2个springboot项目,一个 rabbit...

2020-03-01 17:19:31 1185

原创 SpringBoot + RabbitMQ 实现"简单队列"

一、简单队列特点:一个生产者,一个消费者。二、在SpringBoot中的实现首先我们新建2个springboot项目,一个 rabbitmq-provider (生产者),一个rabbitmq-consumer(消费者),springboot已经集成了RabbitMQ,直接引入spring-boot-starter-amqp。> pom依赖<dependenc...

2020-02-26 23:26:58 819 2

原创 Linux环境安装配置RabbitMQ服务

Linux发行版本:CentOS 7.7RabbitMQ版本:3.6.81、安装依赖环境# yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixODBC-devel2、安装erlang# yum install erlang检测erLang是否安装成功#...

2020-02-26 22:12:30 1867 2

原创 RabbitMQ 的核心组件&工作原理【很重要】

RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都表现不俗,也是目前社区活跃度较高的消息中间件之一。本文我们就来看看RabbitMQ很重要的核心的组件。一、RabbitMQ简介RabbitMQ是一个用Erlang语言开发的、实现了AMQP协议的消息中间件。AMQP :Advanced Message Queue,高级消息队列协议。它...

2020-02-24 23:56:25 3894

原创 消息队列MQ

一、MQ是什么?MQ全称Message Queue,中文名称消息队列。顾名思义,它就是一个队列,简单来说就是一个应用程序A将数据丢到一个队列中,由另一个应用程序B从队列中拿到这个数据,再去做一些其他的业务操作。我们把应用程序A叫做生产者,应用程序B叫做消费者,它们之间传输的数据称作消息。那相比"程序A通过调用接口的方式直接将数据传给B",引入一个队列有什么好处呢?接着往下看MQ的使用场...

2020-02-24 23:50:11 663

原创 布隆过滤器

我们在《Redis缓存穿透、缓存击穿和雪崩》中说过,解决缓存穿透的有效办法之一就是使用布隆过滤器。实际上,布隆过滤器不仅仅可以解决缓存穿透的问题,还被广泛应用于网页黑名单系统、垃圾邮件过滤系统、爬虫网址判重等系统,那到底什么是布隆过滤器,今天我们就来揭开它的神秘面纱。一、布隆过滤器的应用场景我们先来看下布隆过滤器的应用场景,看看它到底能做什么。1、解决(缓解)缓存穿透我们经常会把一...

2020-02-19 23:02:50 4721

MyBatis逆向工程所需文件

mybatis逆向工程

2017-03-27

junit单元测试jar包

junit

2017-03-09

MyBatis_jar_ALL

MyBatis 所需jar包

2017-03-08

MyBatis_jar

MyBatis相关jar包

2017-03-08

SpringMVC文件上传Demo代码

SpringMVC文件上传Demo代码

2017-03-01

SpringMVC文件上传相关jar包

SpringMVC文件上传jar包

2017-03-01

迷你计算器

基于C++的迷你计算器程序,包括文档,实现了图形界面,能实现基本的运算

2015-05-27

空空如也

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

TA关注的人

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