自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

通往精英的成长之路

张晗—致力成为优秀架构师

原创 Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库

前言最近在做阅读类的业务,需要记录用户的PV,UV;项目状况:前期尝试业务阶段;特点:快速实现(不需要做太重,满足初期推广运营即可)快速投入市场去运营收集用户的原始数据,三要素:谁在什么时间阅读哪篇文章提到PV,UV脑海中首先浮现特点:需要考虑性能(每个客户每打开一篇文章进行记录)允许数据有较小误差(少部分数据丢失)架构设计架构图:时序图记录基础数据MySQL表结构CREATE TABLE `zh_article_count` ( `id`

2020-08-08 14:14:39 151

原创 根据某个特定字符删除一行

前言最近接了几个新项目的需求,为了快速开发,我们的策略是:基于原来的一套维定项目代码及数据库基础,去开发新的项目,一般步骤如下:在原来的代码git基础上拉出一个新的git项目地址修改代码的项目名称,代码目录结构将原来项目对应的生产库导出表结构形成脚本建立新项目的数据库将原来表结构脚本导入新项目的数据库为了降低风险,我们执行的脚本中不能包含DROP TABLE 语句(防止运维在线上执行时误操作在其他库上执行);如何根据某个特定字符删除一行前置说明MySQL客户端操作工具-Na

2020-07-12 23:58:51 223 2

原创 别让算法和数据结构拖你职业生涯的后腿

IT行业一直流传着一句名言,“程序设计=算法+数据结构”,这是瑞士计算机科学家Niklaus Wirth于1976年出版的一本书的书名,那么数据结构与算法在程序开发中的重要性也就不言而喻了。还记得刚上大学开始学习数据结构的时候,偶然听到一位编程大佬说数据结构其实是计算机专业基础课里最难的一门,我内心是不认可的,然而后来接触更深入时我才发现是我太年轻,并且也没有意识到它的重要性。 如果说你要修一座房子,那么数据结构就是你的地基,地基不稳,如何建造高楼大厦?数据结构的一般定义是...

2020-06-11 17:14:10 1954

原创 Git撤销之世上真有后悔药
原力计划

前言大家在代码提交的时候有时会遇到过如下情况:错误将一些Demo代码误提交分支合并错误提交有冲突代码…这时需要有颗后悔药来拯救;世上真的有后悔药吗?下面我们一起来吃次后悔药撤销之来吃颗后悔药前置说明演示所用的Git服务端:码云目标:在reset分支上撤销之前N次提交撤销步骤把代码clone到本地仓库git clone https://g...

2020-03-03 16:30:17 7978 22

原创 从零学ELK系列(九):Nginx接入ELK(超详细图文教程)

【前言】 在前几篇博文中将ELK+Filebeat收集SpringBoot项目日志搭建完毕,本次我们将展示如何将Nginx接入我们搭建的日志系统,把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将学到什么? Nginx接入ELK+Filebeat收集系统,K...

2020-01-06 15:37:59 1454

原创 SCPPO(十):网站发布中的问题锦集—手动发布网站

【前言】 现在做的项目是个维护性的项目,我们是第三期的末尾,最近正忙着验收。当然在验收前会有些功能需要修改,另外也会有新的需求需要实现;再加之最近有企业核对数据等等,所以网站的发布变成主要的工作之一。当然自己也有幸被组长多安排其中一个网站发布的职责(本项目中共有两个网站);所以有了今天的这次成长经历。 郑重声明:本人主要职责还是开发,只不过开发人员较少(加上组长共四...

2019-12-30 18:04:41 19491 19

原创 从零学ELK系列(二):VMware安装Centos(超详细图文教程)

【前言】 最近在研究ELK日志收集架构,想搭一套环境收集自己项目的日志;需要Linux环境支持,自己在阿里云的服务器由于部署了自己的自有博客系统(https://zhanghan.xin),资源不充足;没有环境创造环境也要研究;于是乎想到自己在五年前玩的在Windows中通过虚拟机运行Linux环境; 今天再次安装了环境把步骤记录下来,一是方便自己以后安装,二是可...

2019-12-29 09:55:34 797 1

原创 从零学ELK系列(三):Centos安装Docker(超详细图文教程)

【前言】 为了更加真实的模拟生产部署环境,不仅需要Linux环境支持,而且ELK需要在不同的机器上部署;再重新装几台虚拟机?本地资源不支持,于是乎想到了Docker;今天在上次的Linux系统(《VMware安装Centos(超详细图文教程)》)中安装了Docker环境把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一...

2019-12-29 09:55:07 788

原创 从零学ELK系列(四):Docker安装Elasticsearch(超详细图文教程)

【前言】 为了更加真实的模拟生产部署环境,在上次的Docker环境中(《Centos安装Docker(超详细图文教程)》)中安装了Elasticsearch把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将学到什么? Docker安装Elasticsearc...

2019-12-29 09:54:47 1081 1

原创 从零学ELK系列(五):Docker安装kibana(超详细图文教程)

【前言】 为了更加真实的模拟生产部署环境,在上次的Docker环境中(《Docker安装Elasticsearch(超详细图文教程)》)中安装了Elasticsearch,本次我们将安装Elasticsearch可视化组件---kibana把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将...

2019-12-29 09:54:23 1496 2

原创 从零学ELK系列(六):Docker安装Logstash(超详细图文教程)

【前言】 为了更加真实的模拟生产部署环境,在上次的Docker环境中(《Docker安装kibana(超详细图文教程)》)中安装了kibana,本次我们将安装日志清洗组件---logstash把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将学到什么? Do...

2019-12-29 09:53:57 2829 3

原创 从零学ELK系列(七):Centos安装Filebeat(超详细图文教程)

【前言】 为了更加真实的模拟生产部署环境,在上次的Docker环境中(《Docker安装Logstash(超详细图文教程)》)中安装了Logstash,本次我们将安装日志收集组件---Filebeat把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将学到什么? ...

2019-12-29 09:53:28 1794 4

原创 从零学ELK系列(一):为什么要跟我学从零学ELK系列

【前言】 网上写ELK日志收集系统,项目集成ELK,Docker,本地安装虚拟机这些孤立技术点文章汗牛充栋;但是很少有文章能即生动又能结合场景的从零一步一步搭建一套生产级日志收集系统并将生产项目集成日志收集系统的方案; 机缘巧合,本人负责研究公司ELK日志收集系统,并成功将其引入到公司生产级项目中;经过多个版本的迭代升级优化目前已处于稳定状态。【从零学EL...

2019-12-29 09:52:48 2536 4

原创 从零学ELK系列(八):SpringBoot项目接入ELK(超详细图文教程)

【前言】 在前几篇博文中将ELK+Filebeat日志收集系统搭建完毕,本次我们将展示如何将SpringBoot接入我们搭建的日志系统,把步骤记录下来,一是方便自己以后安装,二是可以为大家做参考共享。【一句总结一张架构图】 一、一句话总结学完本篇博文,你将学到什么? SpringBoot项目接入ELK+Filebeat收集系统...

2019-12-28 18:42:30 2408

原创 Java线上排错---反编译文件

【前言】 有时候经常会遇到一些诡异的问题:明明在本地运行代码没有问题,服务器代码和本地一样,请求的参数和所连接的数据源都一样为啥服务器上不行那? 如果在测试环境我们可以进行远程调试(参考《idea远程调试》),但是线上应该如何排查? 博主遇到很多次这种情况,最后确定都是由于服务器上代码并没有更新导致的,没有更新原因有很多种比如:运维的部署脚...

2019-11-23 19:00:07 320 3

原创 Redis监控利器---Redis State

【前言】 在之前的博文《Redis百万级别数据迁移》中分享我们系统为降低服务器成本,从亚马逊云迁至阿里云的一次生产迁移过程中Redis部分迁移;去年迁移Redis时数据量500w+;最近在研究如何监控Redis的性能,Redis的Key命中率如何那?皇天不负有心人,找到一款Redis监控神器---Redis State;【Redis监控神神器】 一、本地运行...

2019-11-21 22:19:58 249

原创 SpringBoot实战(十六):集成Skywalking调用链监控系统

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 Skywalking做为生产级的调用链监控工具,不仅提供了丰富的监控系统,而且通过字节码拦截形式集成系统,对系统没有任何侵入性;最近研究一下调用链项目,在此与大家共享;【集成调用链】 一、Skywalking的github项目地址: ...

2019-10-24 10:40:44 8472 1

原创 SpringBoot实战(十五):Spring Boot Admin 集成告警模块

【前言】 Spring Boot Admin做为生产级的监控工具,必然自动化告警必不可少;Spring Boot Admin可以十分简单的集成告警组件;最近研究一下集成邮件告警到项目中,在此与大家共享;【集成告警模块】 一、集成告警模块(在此以邮件告警为...

2019-09-28 10:04:05 1974

原创 SpringBoot实战(十四):Spring Boot Admin 集成安全模块

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 Spring Boot Admin做为生产级的监控工具,必然不能随便让人去操作以免误操作导致线上问题,所以有必要集成Security组件;Spring Boot Admin可以十分简单的集成这安全组件;已集成项目中,在此与大家共享;【集成安全模块】 ...

2019-09-28 09:23:15 583

原创 SpringBoot实战(十三):Spring Boot Admin 动态修改日志级别

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 之前关于线上输出日志一直有个困惑:如何可以动态调整的日志级别,来保证系统在正常运行时性能同时又能在出现问题时打印详细的信息来快速定位问题;最近研究一下Spring Boot Admin中动态日志级别调整,并集成项目中,在此与大家共享;【动态修改日志级别】 ...

2019-09-24 14:53:31 1808 3

原创 SpringBoot实战(十二):集成 Spring Boot Admin 监控

【前言】 程序开发完实现相应的功能只是一个部分,如何让系统在线上运行更好创造更高的价值是另外一个部分;监控是一个生产级项目避不可少重要组成部分;最近研究一下针对SpringBoot的监控项目---Spring Boot Admin,并集成项目中,在此与大家共享;【Sprin...

2019-09-24 13:29:56 1625 1

原创 logback 日志输出格式

【前言】 日志对一个系统的重要性不言而喻;日志通常是在排查问题时给人看,一个友好的输出样式让人看到后赏心悦目,排查效率通常也会随之提高;下面为大家共享一下通过设置logback日志输出格式,打印出令人欣喜的日志样式。【搞一下日志格式】 一、未指定日志格...

2019-09-24 11:17:20 1733 1

原创 Required request body is missing

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 最近对代码进行统一日志处理,通过拦截器,打印请求日志,方便排查问题,通过拦截器取参数后遇到一个问题:Required request body is missing;在进行了相关实验后最终解决此问题。【解决问题】 一、问题复现 ...

2019-08-07 16:07:29 1996 2

原创 BigDecimal 校验格式

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 最近收到一个需求,在管理后台对系统中的金额进行操作时,对操作的金额需要进行相关校验,如果不校验,在进行相关的计算时就可能会出问题。【BigDecimal 校验格式】 一、业务需求 前端接收到金额传给后端时需要对金...

2019-07-29 21:31:32 4797 2

原创 BigDecimal 转 String

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 最近遇到一个需求,是给用户发送带钱的短信,本来自己以为挺简单,很快可以搞定,不过在实现的时候遇到一些小问题,自己辗转查和实验最终解决该问题,在此记录一下。【BigDecimal如何转成String】 一、业务需求 ...

2019-07-28 23:55:05 6011

原创 申请CSDN博客专家认证成功

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 今天成功通过博客专家认证,圆了自己一个梦想;感谢CSDN官方对我的博文认可,感谢老师,亲朋好友的帮助与支持;你们的肯定更是对我的激励与鞭策。【认证过程】 一、记录我的博客专家认证 截止2019年7月23日在CSDN...

2019-07-23 23:01:03 2174 11

原创 灰度实战(六):SpringCloud灰度(2)

【前言】 在上篇博文中《灰度实战(五):SpringCloud灰度(1)》讲解了SpringCloud项目的灰度实战,其中在zuul中拦截到是灰度请求时采用重定向再次请求网关然后分发至灰度服务,在本篇将zuul针对灰度请求分发策略进行优化,由重定向优化为直接转发提高性能。【SpringCloud灰度实战】 一、项目简介 ...

2019-07-06 22:20:26 654

原创 灰度实战(五):SpringCloud灰度(1)

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 在上四篇博文中讲解了Apollo如何动态配置,以及Apollo的对灰度发布支持;在本篇博文中为大家带来我们项目(Spring Cloud)的灰度实战。【SpringCloud灰度实战】 一、项目简介 1、项目目录...

2019-07-06 22:01:38 869

原创 灰度实战(四):Apollo配置中心(4)

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 在上一篇博文《灰度实战(三):Apollo配置中心(3)》中讲解了Apollo如何动态更改程序中连接第三方中间件连接池,在本篇博文中为大家带来如何通过Apollo实现灰度配置。【灰度配置演示】 一、环境准备 1、...

2019-07-05 15:18:16 353 1

原创 灰度实战(三):Apollo配置中心(3)

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 在上一篇博文《灰度实战(二):Apollo配置中心(2)》中讲解了Apollo如何动态更改程序中通过@value配置值,在本篇博文中为大家带来如何通过Apollo动态更新程序和中间件的连接。【实时推送演示】 一、程序和第三方组件连接动态更改(在...

2019-07-04 11:24:26 459 2

原创 灰度实战(二):Apollo配置中心(2)

【前言】 在上一篇博文《灰度实战(一):Apollo配置中心(1)》中讲解了如何搭建Apollo以及创建配置文件,在本篇博文中为大家带来程序如何通过Apollo读取配置文件,以及配置中心一大亮点---配置修改后实时推送到应用端。【实时推送演示】 一、程序连接Apollo配置1、在项目pom中增加Apollo客户端依赖...

2019-07-04 11:04:23 509

原创 灰度实战(一):Apollo配置中心(1)

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 业务由原来一个国家扩展成多个国家,自己维护的消息平台做了些改造来支持多国家的需求;随着接入的国家越来越多,消息平台版本更新时,如果由于线上环境出问题影响的范围也越来越大;降低发布风险,灰度发布显然是个很好的解决方案;在接下来的灰度实战系列将分享一下我们采用的灰度方案。...

2019-07-03 21:38:54 750

原创 SpringBoot实战(十一):MultipartException: Could not parse multipart servlet request

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 有个在线上跑了一段时间的上传文件的程序报错,查了些资料,最终通过设置上传文件的临时路径解决此问题,在此与大家共享。【问题解决之路】 一、报错信息 org.springframework.web.multipart.Multi...

2019-07-01 22:38:22 1652

原创 SpringBoot实战(十):统一异常处理

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 处理好异常对系统有很好的保护作用同时会大大提高用户的体验,对异常统一处理是一个非常实用的技巧,接下来介绍一下如何在系统中对异常进行统一处理;【统一异常处理】 一、未加统一异常处理时 启动程序,并访问http://...

2019-06-21 21:53:19 304

原创 SpringBoot实战(九):标准化json返回值

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 前后端分离是现在系统开发主流模式,上篇博文《SpringBoot集成Swagger》介绍了利器Swagger;这篇接着定义返回Json格式的规范;无规矩,不成方圆;有了好的规范前后端的开发效率将大大提高;【返回Json结果规范化】 一、规范化的...

2019-06-19 21:18:50 879 1

原创 SpringBoot实战(八):集成Swagger

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 前后端分离是现在系统的主流,前端人员更多专注于前端功能,后端人员更加关注后端极大提高开发效率;一般情况下前后端由不同的开发团队进行开发;所以免不了要有一份接口文档,手写接口文档,维护接口文档团队间沟通,调试等也是需要花费一定的时间,Swagger就在一定程度上解决了以...

2019-06-13 22:28:26 373

原创 数据库主从延迟导致查询不准确的解决思路

【前言】 当数据达到一定量的时候,数据库会成为整个系统的瓶颈,一般采取的优化策略为读写分离,数据库通过分主库从库从而实现读写分离(写请求操作主库,读请求操作从库);【解决数据延迟思路】 一、主从同步原理(在此以目前最普及的MySQL为例) 以下是一张经典的MySQL通过binlog实现主从数据同步的原理图: ...

2019-06-12 23:15:54 2556

原创 SpringBoot实战(七):替代if的优雅方案,提高程序扩展性

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 最近业务由一个国家扩展到多个国家,维护的通知平台也要进行相应的扩展;在扩展的时候应用一个技巧使得程序的扩展性大大提高;【if的优雅替代方案】 一、业务需求 在此以通知平台中短信业务中的校验手机号前缀为例;...

2019-06-12 20:19:01 561

原创 SpringBoot实战(六):Redis Pipeline 轻松实现百倍性能提升

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 今天在优化通知平台的路由部分时发现每次当路由初始化到Redis时异常慢,早就听闻Pipeline是redis批量操作的利器,正好这次用Pipeline进行优化;【整合Redis实战】 一、原理分析 1、单个命...

2019-05-28 21:50:12 2716

原创 Windows 设置文件默认打开方式

强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan【前言】 计算机是现在办公必用品,如何熟练使用自己的计算机从而提高自己的效率是每个人都应该去学习去实践;今天在此为大家介绍一招设置文件的默认打开方式。【设置方式】 一、重复操作: 1.每次打开一个计算机未设置默认打开方式的...

2019-04-14 12:08:15 11320 1

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