自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(36)
  • 收藏
  • 关注

原创 批量生成连续的n个满足000000~ZZZZZZ(不包含4)的号

/** * SN号生成器 */public class RescueSnUtil { /** 救助牌号正则 */ private final static String SN_REGEX = "^[012356789A-Z]{6}$"; /** 救助牌号组成 */ private final static String[] SN_ARR = new String[]{"0","1","2","3","5","6","7","8","9","A","B","C","D".

2020-12-31 10:10:19 865

原创 单例模式手写

双重校验public class Singleton { //私有构造 private Singleton(){ } //私有属性 private static Singleton instance; //双重校验 public Singleton getInstance(){ if(instance == null){ synchronized (Singleton.class){

2020-12-28 19:55:48 100

原创 Seata底层的undo log和MySQL底层的undo log有异曲同工之妙

Seata底层的undo log和MySQL底层的undo log有异曲同工之妙:都是保存的逆向SQL

2020-12-27 17:59:01 699

原创 Netty知识点

目录Netty 是什么?为什么要用 Netty?Netty 应用场景了解么?Netty 核心组件有哪些?分别有什么作用?EventloopGroup 了解么?和 EventLoop 啥关系?Bootstrap 和 ServerBootstrap 了解么?NioEventLoopGroup 默认的构造函数会起多少线程?Netty 线程模型了解么?Netty 服务端和客户端的启动过程了解么?Netty 长连接、心跳机制了解么?Netty 的零拷贝了解么?Netty

2020-12-25 22:33:57 536 1

原创 生产环境中的 redis 是怎么部署的

redis cluster,10 台机器,5 台机器部署了 redis 主实例,另外 5 台机器部署了 redis 的从实例,每个主实例挂了一个从实例,5 个节点对外提供读写服务,每个节点的读写高峰qps可能可以达到每秒 5 万,5 台机器最多是 25 万读写请求/s。机器是什么配置?32G 内存+ 8 核 CPU + 1T 磁盘,但是分配给 redis 进程的是10g内存,一般线上生产环境,redis 的内存尽量不要超过 10g,超过 10g 可能会有问题。5 台机器对外提供读写,一共有 50g

2020-12-24 22:43:08 130

原创 redis cluster

端口6379,1637916379 端口号是用来进行节点间通信的,cluster bus 的通信,用来进行故障检测、配置更新、故障转移授权。cluster bus 用了另外一种二进制的协议,gossip 协议,用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。节点间的内部通信机制redis cluster 节点间采用 gossip 协议进行通信 集群元数据的维护有两种方式:集中式、Gossip 协议。前者是将集群元数据存储在某个节点上,后者是每个节点都持有一份。 交换的信

2020-12-24 22:16:11 186

原创 Redis(数据类型、线程模型、过期策略、持久化)

Redis数据类型string set key val hash hset person name bingo hset person age 20 hset person id 1 hget person name person = { "name": "bingo", "age": 20, "id": 1 } list list 是有序列表,这个可以玩儿出很多花样。 比如可以通过 list 存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的东西。

2020-12-24 17:17:24 131 3

原创 ES生产集群部署

es 生产集群我们部署了 5 台机器,每台机器是 6 核 64G 的,集群总内存是 320G。 我们 es 集群的日增量数据大概是 2000 万条,每天日增量数据大概是 500MB,每月增量数据大概是 6 亿,15G。目前系统已经运行了几个月,现在 es 集群里数据总量大概是 100G 左右。 目前线上有 5 个索引(这个结合你们自己业务来,看看自己有哪些数据可以放 es 的),每个索引的数据量大概是 20G,所以这个数据量之内,我们每个索引分配的是 8 个 shard,比默认的 5...

2020-12-24 16:44:49 345 1

原创 ES性能优化

查第一条很慢,后面就快了 缓存预热给ES设置的内存太小 给ES分配的内存一般要大于数据量的一半 写入ES的数据最好小于等于或者是略大于ES的filesystem cache的内存容量复杂查询性能低 尽量不要做复杂查询深度分页和跳页查询很慢 根据ES搜索原理可知,深度分页和跳页查询执行的操作太多,故而很慢 scroll api,一页一页的往下翻 search_after,一页一页的往下翻...

2020-12-24 16:43:59 377 1

原创 ES分布式架构原理

目录数据结构分片机构写过程(协调节点,主数据节点,从数据节点,协调节点返回)读过程(协调节点,负载均衡数据节点,协调节点返回)搜索数据过程写、读、搜索总结写数据底层原理删除/更新数据底层原理倒排索引数据结构index -> type -> mapping -> document -> field index 一张订单表document 一条订单记录filed 一个字段分片机构.

2020-12-24 16:20:41 568 3

原创 分布式事务

XA 方案两阶段提交TCC 方案TryConfirmCancel本地消息表可靠消息最终一致性方案A系统先发送一个prepared消息到mq,如果这个prepared消息发送失败那么就直接取消操作别执行了;如果这个消息发送成功过了,那么接着执行本地事务,如果成功就告诉mq发送确认消息,如果失败就告诉mq回滚消息;如果发送了确认消息,那么此时B系统会接收到确认消息,然后执行本地的事务;mq会自动定时轮询所有prepared 消息回调你的接口,问你,这个消息是不是本地事务处理

2020-12-24 14:18:31 90

原创 SpringCloud使用

Eureka//application.ymlserver: port: 8761eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://localhost:8761/eureka/ server: enableSelfPreservat.

2020-12-24 09:51:23 175

原创 设计一个消息中间件

生产者消息中间件 分片 每个分片有副本冗余 ack机制(保证消息不丢失)消费者

2020-12-23 17:24:31 95

原创 设计一个高并发系统

系统拆分 一个系统拆成多个子系统,用dubbo。每个系统连一个库。缓存 读多写少的场景用缓存MQ 削峰读写分离分库分表ES

2020-12-23 16:48:03 94 1

原创 如何自己设计一个类似Dubbo的RPC框架

上来你的服务就得去注册中心注册吧,你是不是得有个注册中心,保留各个服务的信息,可以用 zookeeper 来做,对吧。 然后你的消费者需要去注册中心拿对应的服务信息吧,对吧,而且每个服务可能会存在于多台机器上。 接着你就该发起一次请求了,咋发起?当然是基于动态代理了,你面向接口获取到一个动态代理,这个动态代理就是接口在本地的一个代理,然后这个代理会找到服务对应的机器地址。 然后找哪个机器发送请求?那肯定得有个负载均衡算法了,比如最简单的可以随机轮询是不是。...

2020-12-23 16:46:35 156

原创 Hystrix

Hystrix基于线程池技术实现资源隔离基于Hystrix信号量机制实现资源隔离Hystrix资源隔离策略细粒度控制 HystrixCommandProperties.Setter() //资源隔离策略 -> 线程池 .withExecutionIsolationStrategy(ExecutionIsolationStrategy.THREAD) //commandGroupKey .withGroupKey(Hystri...

2020-12-23 16:32:26 162 1

原创 zk分布式锁

zk 分布式锁,其实可以做的比较简单,就是某个节点尝试创建临时 znode,此时创建成功了就获取了这个锁;这个时候别的客户端来创建锁会失败,只能注册个监听器监听这个锁。释放锁就是删除这个 znode,一旦释放掉就会通知客户端,然后有一个等待着的客户端就可以再次重新加锁。/** * ZooKeeperSession * * @author bingo * @since 2018/11/29 * */public class ZooKeeperSession { private

2020-12-23 14:27:46 225

原创 Dubbo微服务治理

服务降级 <dubbo:reference id="fooService" interface="com.test.service.FooService" timeout="10000" check="false" mock="return null"> mock 的值也可以修改为 true,然后再跟接口同一个路径下实现一个 Mock 类,命名规则是 “接口名称+Mock” 后缀。然后在 Mock 类里实现自己的降级逻辑。 public class HelloSer...

2020-12-23 13:58:22 145

原创 分布式锁(db,redis,zk)

基于数据库实现分布式锁悲观锁利用select … where … for update排他锁注意: 其他附加功能与实现一基本一致,这里需要注意的是“where name=lock”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。乐观锁所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有update version失败后才能觉察到。我们的抢购、秒杀就是...

2020-12-23 13:38:36 289

原创 Redis分布式锁

//Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.5.0</version></dependency> //获取锁RLock lock = redission.getLo.

2020-12-23 10:19:06 96

原创 MySQL索引

MySQL索引MySQL高效获取数据的数据结构 MySQL索引分类主键索引 唯一、不能为null唯一索引 唯一普通索引 全文索引 解决CHAR,VARCHAR,TEXT类型字段太长时模糊查询性能低的问题前缀索引 解决CHAR,VARCHAR,TEXT类型字段太长时前缀模糊查询性能低的问题,可指定索引列长度空间索引 5.7新特性单列索引联合索引 最左匹配原则MySQL索引数据结构Hash表 ...

2020-12-22 23:47:14 169

原创 Nacos使用

目录资源0.nacos集成spring_启动nacos-server1.nacos集成spring_切换nacos-server数据源为mysql2.nacos集成spring_pom依赖3.nacos集成spring_spring配置文件引入nacos配置文件4.nacos集成spring_nacos配置文件5.nacos集成spring_实际项目里配置数据库连接参数资源Nacos安装包和源码(提取码: u934) 0.nacos集成spring_启动n...

2020-12-22 16:42:15 154

原创 SQL执行计划详解

SQL执行计划详解

2020-12-22 14:44:24 247

原创 ShardingSphere分库分表中间件

官方文档

2020-12-22 14:34:08 167

原创 Websocket推送实时工单报警

/** * @ClassName WebsocketDemo * @Description 给所用户所有终端推送消息 * @Author xx * @Date 2019/8/6 15:47 * @Version 1.0 *///websocket连接URL地址和可被调用配置@ServerEndpoint(value = "/websocketDemo/{userId}", configurator = SpringConfigurator.class)public class Webso.

2020-12-22 14:02:18 245

原创 RabbitMQ

消息的持久化//queue持久化channel.queueDeclare( "warehouse_schedule_delivery", true, false, false, null);//message持久化channel.basicPublish( "", "warehouse_schedule_delivery", Messa

2020-12-22 10:31:53 245 1

原创 策略模式之枚举

//枚举(String -> Interface.method)public enum NotifyType { EMAIL("邮件", NotifyMechanismInterface.byEmail()), SMS("短信", NotifyMechanismInterface.bySms()), WECHAT("微信", NotifyMechanismInterface.byWeChat()); private String desc; privat.

2020-12-21 14:57:56 157

原创 缓存穿透 缓存击穿 缓存雪崩

目录缓存雪崩缓存穿透缓存雪崩雪崩是指当大量缓存失效时,导致大量的请求访问数据库,导致数据库服务器,无法抗住请求或挂掉的情况。 (1)合理规划缓存的失效时间; (2)合理评估数据库的负载压力; (3)对数据库进行过载保护或应用层限流; (4)多级缓存设计,缓存高可用;缓存穿透缓存一般是Key,value方式存在,当某一个Key不存在时会查询数据库,假如这个Key,一直不存在,则会频繁的请求数据库,对数据库造成访问压力...

2020-12-21 12:01:19 78

原创 10亿级订单系统分库分表设计思路!

10亿级订单系统分库分表设计思路!一、背景随着公司业务增长,如果每天1000多万笔订单的话,3个月将有约10亿的订单量,之前数据库采用单库单表的形式已经不满足于业务需求,数据库改造迫在眉睫。二、订单数据如何划分我们可以将订单数据划分成两大类型:分别是热数据和冷数据。 热数据:3个月内的订单数据,查询实时性较高; 冷数据A:3个月 ~ 12个月前的订单数据,查询频率不高; 冷数据B:1年前的订单数据,几乎不会查询,只有偶尔的查询需求; 可能这里有个疑惑为什么要将冷

2020-12-15 11:05:04 740 1

原创 位运算 &|^和多选字段

假设,我们现在有一个有一个业务需求:在任务中添加一个通知方式,可选项包括 IM 消息、系统提醒、邮箱、短信。选择 IM 消息后,支持 IM 即时发送;选择系统提醒后,支持站内信推送;选择选择邮箱后,该任务后续相关提醒内容,可通过发送邮件至相关人邮箱中进行通知;选择短信后,该任务后续相关提醒内容,可通过发送短信至相关人进行通知。我们在设计数据库库表时,通常情况下,将多个标识字段合并成一个字段,并把这个字段改成字符串型方式保存,例如,存在 1 时表示支持 IM,2 时表示支持系统消息,...

2020-12-15 10:54:35 405

转载 防重设计

如何做一个防重设计前言在业务设计中防重设计是一个关键点,以接口设计为例,防重就是防止接口被多次调用而产生脏数据,比如支付订单出现重复支付,所以说防重至关重要,在如何防重之前我们首先看一下是如何出现重复请求的。何时出现多次调用多次调用接口的出现有主观原因比如:人为的重复请求攻击,用户的误操作等;也有客观原因比如:为了健壮性进行超时重试;重复请求攻击对于这种恶意攻击,其实已经属于安全范畴了,我们可以通过黑名单+限流来处理,下一步再考虑防重处理;用户的误操作比如用户在界面点击提交按钮,

2020-12-10 17:59:43 509 1

转载 Java8_Optional

Optional类入门Optional<T> 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在Optional可以更好的表达这个概念。并且可以避免空指针异常。你可以把Optional对象看成一种特殊的集合数据,它至多包含一个元素。常用方法:Optional.of(T t) : 将指定值用 Optional 封装之后返回,如果该值为 null,则抛出一个 NullPointerException 异常。 Opt

2020-12-10 17:51:13 1106

原创 首页聚合接口之异步执行

import com.boot.lea.mybot.dto.UserBehaviorDataDTO;import com.boot.lea.mybot.service.UserService;import com.google.common.util.concurrent.ThreadFactoryBuilder;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import jav.

2020-12-10 17:40:06 185

转载 前后端参数加解密方案

前后端参数加解密方案简介HTTP信息传输总会遇到参数被劫持进行二次传输的尴尬境地,为了避免这种情况,建议在前端请求的时候对上行参数进行加密传输,后端再进行解密,防止信息被盗取知识点前端: 框架采用VUE.JS,加密可以选用方案较为完善的CryptoJS本文采用CryptoJS其中的aes加密方案为例 后端: 也采用对应的aes加密进行参数解析准备前端用npm进行安装npm install crypto-js这时项目的package.json中就会引入crypto-js.

2020-12-10 17:05:26 2524 1

原创 异步编程 CompletableFuture(JDK1.8)

基础篇:异步编程不会?我教你啊!CompletableFuture(JDK1.8)前言以前需要异步执行一个任务时,一般是用Thread或者线程池Executor去创建。如果需要返回值,则是调用Executor.submit获取Future。但是多个线程存在依赖组合,我们又能怎么办?可使用同步组件CountDownLatch、CyclicBarrier等;其实有简单的方法,就是用CompeletableFuture线程任务的创建 线程任务的串行执行 线程任务的并行执行 处理任务结果和异常

2020-12-09 11:37:16 1043

转载 写代码有这16个好习惯,可以减少80%非业务的bug

前言每一个好习惯都是一笔财富,本文整理了写代码的16个好习惯,每个都很经典,养成这些习惯,可以规避多数非业务的bug!希望对大家有帮助哈,谢谢阅读,加油哦~1. 修改完代码,记得自测一下「改完代码,自测一下」是每位程序员必备的基本素养。尤其不要抱有这种侥幸「心理:我只是改了一个变量或者我只改了一行配置代码,不用自测了」。改完代码,尽量要求自己都去测试一下哈,可以规避很多不必要bug的。2. 方法入参尽量都检验入参校验也是每个程序员必备的基本素养。你的方法处理,「必须先校验参数」。比.

2020-12-01 14:17:34 291

空空如也

空空如也

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

TA关注的人

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