自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1_rabbitmq消息中间件概述

一、RabbitMQ 概述MQ 为Message Queue,消息队列是应用程序和应用程序之间的通信方法。RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统支持主流的操作系统:linux、windows、macOX等多种开发语言支持,java、pytyhon、Ruby、.Net、 php、c/c++、node.js等开发语言:Erlang – 面向并发的编...

2019-09-30 16:20:59 133

转载 MQ消息可达性+幂等性+延时性架构设计

前篇《无限容量数据库架构设计》收到网友好评: 系统性,全局性看问题体会更深刻 简单易懂 本文再做总结,体系化介绍MQ的一些架构技术。一、总起文章:《究竟什么时候使用MQ》内容: 什么典型场景不应该使用MQ 什么典型场景应该使用MQ 二、消息可达性文章:《MQ,如何做到消息必达》内容: MQ系统架构 MQ消...

2019-09-30 08:55:46 158

原创 RabbitMQ之消息确认机制

11_RabbitMQ之消息确认机制更多干货分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战(干货)构建中小型互联网企业架构(干货)python 学习持续更新例子代码地址https://github.com/csy512889371/learndemo/tree/master/ctoed...

2019-09-30 08:51:04 125

原创 RabbitMQ confirm 模式之异步确认

channel 的 confirm 模式是 RabbitMQ 为保障消息的可靠性投递,所实现的一种机制。关于channel 的 confirm 模式以及 RabbitMQ 如何保障消息的可靠性投递,请参考 RabbitMQ 之消息的可靠性投递这里只介绍 confirm 模式中的异步确认异步确认异步确认是 confirm 模式的一种使用方式,由于它是异步、非阻塞的,因此性能比较好...

2019-09-29 17:50:21 4307 3

原创 rabbitmq消息发送的可靠性机制

1.消息发送时确认送达exchange, 可以使用事物机制,或者是消息确认机制2.消息送达exchange后, 设置mandatory为true,确保消息从exchange送达queue3.exchange, queue, 消息都要做持久化4.确保消息被消费者成功处理, 消费者需要设置autoAck为false(如果为true,只要消费端不抛出异常则被ack, 如果消费端接受消息后宕掉...

2019-09-29 16:25:02 357

原创 HashMap 在 JDK 1.8 后新增的红黑树结构

点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树中添加元素 putTreeValHashMap 在 JDK 18 中新增...

2019-09-28 10:17:22 206

原创 inux系统中的Page cache和Buffer cache

Free命令显示内存首先,我们来了解下内存的使用情况Mem:表示物理内存统计。 total:表示物理内存总量(total = used + free)。 used:表示总计分配给缓存(包含buffers 与cache )使用的数量,但其中可能部分缓存并未实际使用。 free:未被分配的内存。 shared:共享内存。 buffers:系统分配但未被使用的buffers数量。...

2019-09-26 17:33:13 117

原创 ab cookie 压力测试接口

ab是apache自带的压力测试工具,近期需要压测一个接口,涉及使用post请求,并在其中带cookie。方法总结如下:1. 发送cookie方法1-C key1=value1;key2=value2...1例:ab -n 1 -C "name=ball;age=99;sex=male" "http://wc.sogou.com/worldcup2018/test.php"1服...

2019-09-26 16:13:02 1744

原创 ab命令 - 网站性能压力测试

Apache 的httpd 工具包中提供了apachebench,可以简单的做网站性能压力测试。ab的选项主要有如下:-A auth-username:password:指定连接服务器的基本的认证凭据;-c:并发请求数,默认的并发数是1个;-C cookie-name=value:添加cookie,参数通常是一个名称 = 值对的形式,此字段可重复。-g gnuplot-file:...

2019-09-26 16:10:25 218

原创 mysql join该不该使用,怎样高效使用

在实际生产中,关于join语句使用的问题,一般会集中在以下两类: 我们DBA不让使用join,使用join有什么问题呢? 如果有两个大小不同的表做join,应该用哪个表做驱动表呢? 今天这篇文章,我就先跟你说说join语句到底是怎么执行的,然后再来回答这两个问题。为了便于量化分析,我还是创建两个表t1和t2来和你说明。CREATE TABLE `t2` ( `id...

2019-09-23 17:14:38 1163 1

原创 spring 默认模板 teamleaf 标签使用

别强调:启动类和所有的controller service mapper等包必须位于同一个主包下(同一个包中),而且启动类在最外面,否则这些层都扫不到,不报错,但是无法实现我们的功能,要非常注意我们以前通常习惯用webapp来放置jsp页面,但是到了Springboot中,官方建议用Static文件夹来存放及静态的资源,用templates来存放可供访问的Html资源页面,具体的操作如下....

2019-09-23 15:51:52 672

原创 linux 环境下查询复杂订单日志

日志模式 输出这个关联订单的 transaction_idgrep -B2 "下帐金额与实际应付金额不等" logs/all-2019-09-21.0.log | grep requestId | awk -F":" '{print $5 }' | xargs -I {} grep {} logs/all-2019-09-21.0.log | grep -E "tra...

2019-09-21 15:08:49 431

原创 mysql mvcc 原理

MVCC(Multi Version Concurrency Control的简称),代表多版本并发控制。与MVCC相对的,是基于锁的并发控制,Lock-Based Concurrency Control)。MVCC最大的优势:读不加锁,读写不冲突。在读多写少的OLTP应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能了解MVCC前,我们先学习下Mysql架构和数据库事务隔离级别...

2019-09-20 17:48:22 128

原创 浅析MySQL事务中的redo与undo

我们都知道事务有4种特性:原子性、一致性、隔离性和持久性,在事务中的操作,要么全部执行,要么全部不做,这就是事务的目的。事务的隔离性由锁机制实现,原子性、一致性和持久性由事务的redo 日志和undo 日志来保证。所以本篇文章将讨论关于事务中的redo和undo的几个问题:redo 日志与undo日志分别是什么? redo 如何保证事务的持久性? undo log 是否是redo log的...

2019-09-20 17:03:45 307

原创 redo undo 和 binlog 有什么作用

MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要...

2019-09-20 15:35:54 481

原创 idea 自动代码补全指令

IDEA 有个很牛逼的功能,那就是后缀补全(不是自动补全),很多人竟然不知道这个操作,还在手动敲代码。这个功能可以使用代码补全来模板式地补全语句,如遍历循环语句(for、foreach)、使用 String.format() 包裹一个字符串、使用类型转化包裹一个表达式、根据判(非)空或者其它判别语句生成 if 语句、用 instanceOf 生成分支判断语句等。使用的方式也很简...

2019-09-18 16:41:09 7206 1

原创 springAOP 和 aspectJ 有什么区别

介绍如今有多个可用的AOP库,这些组件需要回答一系列的问题:是否与我现有的应用兼容? 我在哪实现AOP? 集成到我的应用是否很快? 性能开销是多少?本文中,我们将会着重回答这些问题,并介绍两款Java最流行的AOP框架:Spring AOP 和 AspectJ。AOP概念在我们开始之前,让我们对术语和核心概念做一个快速,高水平的回顾:Aspect切面:一个分布在应用程序...

2019-09-18 14:17:26 1373

原创 spring ioc容器的原理

1. IoC理论的背景我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。图1:软件系统中耦合的对象如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协...

2019-09-18 13:49:43 186

原创 Java8中的Stream,让集合操作酸爽起来

简介java8也出来好久了,接口默认方法,lambda表达式,函数式接口,Date API等特性还是有必要去了解一下。比如在项目中经常用到集合,遍历集合可以试下lambda表达式,经常还要对集合进行过滤和排序,Stream就派上用场了。用习惯了,不得不说真的很好用。Stream作为java8的新特性,基于lambda表达式,是对集合对象功能的增强,它专注于对集合对象进行各种高效、便利的聚合...

2019-09-18 09:28:42 99

原创 MySQL InnoDB四个事务级别 与 脏读、不重复读、幻读

MySQL InnoDB事务隔离级别脏读、可重复读、幻读希望通过本文,可以加深读者对ySQL InnoDB的四个事务隔离级别,以及脏读、不重复读、幻读的理解。MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)。·未提交读(READUNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这...

2019-09-17 19:36:16 451

原创 rabbitmq实现向各服务广播消息

广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...

2019-09-17 16:37:37 684

原创 rabbitmq实现向各服务广播消息

广播fanout主要是将一个消息,分发到绑定了它的队列上,而这些队列如消费者自己去建立和绑定!对生产者是解耦的生产者不需要关心消费者有多少,消费者如果需要这种消息,只需要把队列绑定到exchange上即可流程打开rabbitmq的ui 建立两个队列fanout1,fanout2 打开exchange里的amqp.fanout类型 绑定上面的两个队列 向exchange里...

2019-09-17 16:37:04 548

原创 如何实现延时触发/定时器

问题微信公众平台后台有一个功能即定时群发消息,如明晚的20:00群发一条图文消息。那么这种延时触发的逻辑如何实现呢?方案一每隔一定的时间扫描所有超时的事件这是最容易想到的一种方案。此方案最关键的两点是轮训的频率以及如何高效地获取超时任务。如果可以允许一秒左右的误差,每隔一秒轮训一次即可。 采用红黑树或者最小堆存储触发任务,按照触发时间戳排序。如此,每次扫描能够很快地获取超时的...

2019-09-17 12:09:34 3069

原创 环形定时任务 原理

业务背景在稍微复杂点业务系统中,不可避免会碰到做定时任务的需求,比如淘宝的交易超时自动关闭订单、超时自动确认收货等等。对于一些定时作业比较多的系统,通常都会搭建专门的调度平台来管理,通过创建定时器来周期性执行任务。如刚才所说的场景,我们可以给订单创建一个专门的任务来处理交易状态,每秒轮询一次订单表,找出那些符合超时条件的订单然后标记状态。这是最简单粗暴的做法,但明显也很low,自己都下不去手写...

2019-09-16 16:16:58 562

原创 消息队列mq总结

一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ二、消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。2.1异步处理 ...

2019-09-12 16:25:24 239

原创 Spring 创建定时任务

我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。创建定时任务在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下当前时间。在Spring Boot的主类中加入@EnableScheduling注解,启用定...

2019-09-12 11:27:43 625

原创 误删数据后除了跑路,还能怎么办

31讲误删数据后除了跑路,还能怎么办今天我要和你讨论的是一个沉重的话题:误删数据。在前面几篇文章中,我们介绍了MySQL的高可用架构。当然,传统的高可用架构是不能预防误删数据的,因为主库的一个drop table命令,会通过binlog传给所有从库和级联从库,进而导致整个集群的实例都会执行这个命令。虽然我们之前遇到的大多数的数据被删,都是运维同学或者DBA背锅的。但实际上,只要有数...

2019-09-11 16:56:28 207

原创 MySQL缓存之Qcache与buffer pool对比

Q:innodb buffer pool和Qcache的缓存区别?A:  1、Qcacche缓存的是SQL语句及对应的结果集,缓存在内存,最简单的情况是SQL一直不重复,那Qcache的命令率肯定是0;  2、buffer pool中缓存的是整张表中的数据,缓存在内存,SQL再变只要数据都在内存,那么命中率就是100%。一、查询缓存(QueryCache)1、关于查询缓存...

2019-09-11 11:32:54 222

原创 定时任务的原理

在jdk自带的库中,有两种技术可以实现定时任务。一种是使用Timer,另外一个则是ScheduledThreadPoolExecutor。下面为大家分析一下这两个技术的底层实现原理以及各自的优缺点。一、Timer1. Timer的使用class MyTask extends TimerTask{ @Override public void run() { S...

2019-09-10 19:53:53 1255

原创 Mybatis注解用法

MyBatis(八) mybatis注解 一、mybatis简单注解 1、@Select、@Results、@Result 2、@Delete、@Param、@ResultMap 3、@Insert、@SelectKey 4、@Delete、@Param 5、@Update 二、动态SQL 1、简单处理,直接使用``脚本 2、使用Provider注...

2019-09-10 11:21:02 56080 2

原创 Spring数据库事务的实现机制

事务控制的核心——Connection在开始之前,先让我们回忆一下数据库较原始的JDBC是怎么管理事务的: //仅做演示,代码不完整,不完全规范 try { con.setAutoCommit(false); statement1 = con.prepareStatement(sql); statement1.execute...

2019-09-10 10:55:13 722

原创 什么是Java动态代理,如何实现一个动态代理例子

Java动态代理一、概述1. 什么是代理我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”。我们把微商代理和厂家进一步抽象,前者可抽象为代理类,后者可抽象为委...

2019-09-04 11:07:03 4125

原创 redis 单线程高性能原因 博客-2

一、前言近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你《为什么说Re...

2019-09-04 10:34:02 182

原创 redis 单线程高性能 博客-1

Redis 简介Redis 是一个开源的内存中的数据存储系统, 可以用作 : 数据库、 缓存和消息中间件。常见的数据类型: String (字符串), Hash(散列),List(列表),Set(集合),有序集合(Sorted Set或者ZSet)与范围查询, Bitmaps, Hyperloglogs 和地理空间(Geospatial)索引半径查询。数据库的工作模式按存储方式可以分为...

2019-09-04 09:48:51 121

原创 zookeeper 的工作原理

» 领导者(leader),负责进行投票的发起和决议,更新系统状态  » 学习者(learner),包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票  » Observer可以接受客户端连接,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩...

2019-09-03 14:21:05 142

原创 Java CountDownLatch使用

一、CountDownLatch 部分API1.CountDownLatch(intcount).用给定的count值构造一个CountDownLatch().2.countDown()方法. 每调用一次该方法,count的计数就会减少1。3.await()方法。阻塞等待,直到count至0。二、CountDownLatch的使用场景1.模拟多个线程同时开始调用某个方...

2019-09-03 12:02:38 224

原创 Hystrix完整配置列表

http://throwable.coding.me/2019/05/29/framework-hystrix-full-configuration/#%E9%9A%94%E7%A6%BB%E7%AD%96%E7%95%A5

2019-09-02 17:29:37 182

原创 Zookeeper 客户端之 Curator

之前写的一个在 Linux 上安装部署 Zookeeper 的笔记,其他操作系统请自行谷歌教程吧。本文案例工程已经同步到了 github,传送门。PS : 目前还没有看过Curator的具体源码,所以不会涉及到任何源码解析、实现原理的东西;本篇主要是实际使用时的一些记录,以备后用。如果文中错误之处,希望各位指出。Curator 客户端的初始化和初始化时机在实际的工程中,Z...

2019-09-02 16:42:29 477

原创 Zookeeper 实现分布式锁

ZooKeeper 实现分布式锁利用Watcher机制和ZooKeeper EPHEMERAL_SEQUENTIAL节点的特点,实现分布式锁。实现原理:EPHEMERAL_SEQUENTIAL该类节点具有顺序递增特点,不会持久化到磁盘,在线程执行完毕后,会自动删除。Watcher机制使得在节点被删除时,能够获得通知,并且能接收到被push过来的消息。分布式锁:在多进...

2019-09-02 14:52:12 277

原创 zookeeper 漫画

————— 第二天 —————————————————Zookeepe...

2019-09-02 13:55:25 229

空空如也

空空如也

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

TA关注的人

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