- 博客(18)
- 收藏
- 关注
原创 redis并发写数据时解决方案
问题场景:多个线程同时写key本来需求 1,2,3,4,5 最后结果为5可能最后结果 2,1,3,5,4 最后结果为4产生异常,与预期不同。方案一 分布式锁+时间戳setp1 分布式锁setnx aaa;返回结果为1才可以进行操作,操作完 del aaa;(同时需考虑set ex uuid lua)可以阻塞其他线程的操作,抢到锁的线程才可以进行操作setp2 加时间戳在进行设定值的时候,加上时间戳或版本号每次设置时比对这个时间戳或版本号,如果为旧版本则丢弃,最终值为5
2022-03-03 15:19:45
2042
原创 MQ知识总结
RabbitMQ架构死信队列消息成为死信后会进入DLX死信交换器① 信息被拒绝② 信息超时③ 超过了队列的最大长度可以在队列或者消息本身设置超时时间,若两者都设置,以较小的为准延迟队列通过死信队列来实现rabbitMQ如何确保消息发送和消息接受?消息发送确认1 ConfirmCallback确认消息是否正确到达Exchange中2 ReturnCallback通过实现ReturnCallback接口启动消息失败返回。此接口是在交换机路由找不到队列时触发回调消息接受确认ACK
2022-03-02 14:09:25
466
原创 多线程知识回顾总结
多线程知识点任务 线程 进程线程创建继承Thread类(重点)实现Runnable接口(重点)实现Callable接口新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入任务 线程 进程本质上我们的大脑同一时间依旧只做了一件
2022-03-02 14:08:09
316
原创 项目实战及调优
项目架构commonmanagerauthauditdbeurekagateway项目难点与攻关上海银联 4万用户,内网部署。难点一:mq队列生产速度远远大于消费速度解决方案:① 增加消费者,分组,组内消费者分担消息消费。(同时需要考虑mysql是否达到瓶颈),要搞清楚瓶颈出在那个地方。② 增加PercatchCount数值,即消息发送的速度。计算公式 消息发送确认时间/消息处理时间。③ 批量ack,消息确认,同时可以处理多条消息。④ 消费者端多线程处理:优势可以减少rab
2022-03-02 14:07:25
1095
原创 rabbitMQ消息丢失、重复消费解决方案
消息丢失生产者端丢失① RabbitMQ 事务机制(同步)② 开启 confirm 模式(异步效率高)设置开启 confirm 模式之后,你每次写的消息都会分配一个唯一的 id,然后如果写入了 RabbitMQ 中,RabbitMQ 会给你回传一个 ack 消息,告诉你说这个消息 ok 了。如果 RabbitMQ 没能处理这个消息,会回调你的一个 nack 接口,告诉你这个消息接收失败,你可以重试。而且你可以结合这个机制自己在内存里维护每个消息 id 的状态,如果超过一定时间还没接收到这个消息的回
2022-03-02 14:04:54
1077
原创 java线程池参数详解
java线程池参数详解核心线程数 corePoolSize最大线程数 maximumPoolSize空闲线程存活时间及单位 keepAliveTime、unit工作队列新任务被提交后,会先进入到此工作队列中,任务调度时再从队列中取出任务。jdk中提供了四种工作队列:①ArrayBlockingQueue基于数组的有限阻塞队列,按照FIFO排序。新任务进来后,会放到该队列队尾线程工厂创建一个新线程时使用的工厂,可以用来设定线程名,是否为daemon守护线程等等。拒绝策略...
2022-03-02 11:19:33
441
原创 JVM相关知识总结
JVM内存模型GC如何判断对象可以被回收① 引用计数法(淘汰)存在循环依赖不能被回收问题② 可达性分析算法(根引用)GCroot有哪些?虚拟机栈中的引用 对象方法区中静态属性引用对象方法区中常量引用对象本地方法栈中的引用对象不同类型的引用类型强引用弱引用软引用虚引用...
2022-03-01 11:14:27
196
原创 经典懒汉式双重检查 单例模式 加锁+volatile
package com.wangyue.springcloud.singleton;/** * 懒汉式单例(线程不安全) * 步骤: * ① 构造器私有化 * ② 定义一个静态变量存储对象, * ③ 定义一个获取单例的方法 双重检查,第二层检查加锁,同时需要volatile * */public class Singleton05 { /** * 为什么要使用volatile * * 因为创建对象有三步操作
2022-02-28 23:15:54
373
原创 spring事务失效的12种场景
① 开启事务的方法必须是public的,spring在开启事务时,会判断方法是否是public,如果不是则返回null,没有事务② 方法被final或static修饰,因为事务是被AOP代理,生成代理类,final修饰的方法无法被重写,因此无法开启事务③ 方法内部调用,因为调用的是this,并不是代理类,没有AOP。可以自己注入自己,解决这个问题。④ 未被spring管理,比如少了注解⑤ 多线程调用,不同的ThreadLocal,不同的conn⑥ 数据库不支持事务,比如myisam,要改成inn
2022-02-26 09:48:41
514
原创 Spring知识整理总结 IOC AOP Bean
spring什么?优势是?spring是轻量级的开源javaEE框架,可以解决企业级应用开发的复杂性优势① 方便解耦、简化开发② aop支持,切面编程,代理对象③ junit4支持方便单元测试④ 方便和其他框架进行集成也可以单独使用⑤ 降低javaApi的使用难度,对很多api进行封装⑥ 声明式事务操作,方便事务管理IOC底层原理xml解析、反射、工厂模式工厂模式解耦合IOC结合工厂IOC思想基于IOC容器完成,底层就是对象工厂Spring提供IOC容器实现的两种方式(两个
2022-02-25 15:58:30
294
原创 JAVA中的代理代码示例
静态代理与动态代理JDK/CGLIBimport org.springframework.cglib.proxy.Enhancer;import org.springframework.cglib.proxy.MethodInterceptor;import org.springframework.cglib.proxy.MethodProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;
2022-02-13 10:58:48
321
原创 elasticsearch 相关知识
es集群部署windows修改elasticsearch.yml配置文件集群名称cluster.name: wangyue-elasticsearch节点名称,不能重复node.name: node-1001节点类型node.master: truenode.data: true主机名称network.host: localhost端口号http.port: 1001通信端口transport.tcp.port: 9301根据通信端口查找(类似相互注册相互守望)discov
2022-02-11 15:53:04
1736
原创 mysql索引B+树选型 索引 事务 MVCC
哈希索引哈希索引查找快,但是无序,不能做范围查找同时存在哈希碰撞的问题,如果值都在某一个哈希,也会导致检索很慢平衡二叉树 Balance树越高查找速度越慢对范围查找也很慢,需要解决回旋查找的问题平衡二叉树,会动态平衡树结构,当一侧的层级高度高于另外一侧大于1时,则自动去平衡左右关系,来达到平衡。当左右高度相差大时,查询速度时快时慢,不稳定,当左右平衡后,查询速度就会比较稳定。如下图所示:B树B树的高度比平衡二叉树高度变矮,一个节点可以存多个数据。数据大小由磁盘最小单位扇区决定。每个硬盘
2022-01-27 09:37:08
1552
原创 docker相关知识
docker官网:https://www.docker.com/文档: https://docs.docker.com/仓库地址:https://hub.docker.com/docker容器使用宿主机的内核,而不用像虚拟机那样安装整套内核环境DevOps(开发即运维)应用更快的交付和部署Docker:打包镜像发布测试,一键运行更快捷的升级和扩容使用了docker之后,我们部署应用就和搭积木一样!更简单的系统运维,开发测试高度一致更高效的资源利用镜像(image):docker镜像
2022-01-26 18:15:11
946
原创 redis相关知识
数据类型string 字符串list 字符组链表 ziplist -> quicklistset 去重的字符串集合hash 存储对象 类似mapzset 有序的字符串集合,底层跳跃表扩展类型Bitmaps 位存储HyperLogLog count基数类型Geospatial 坐标类型事务-打包命令一起执行multi 开始打包命令exec 开始执行命令discard 取消打包命令在组队时有任何命令错误,最终都不会执行在组队完成之后有错误的命令不被执行,正确的
2022-01-24 16:13:20
506
原创 分布式全局唯一ID解决方案
分布式事务全局唯一ID方案分布式事务全局唯一ID方案UUIDJAVA自带UUID的算法优点:本地生成(快)、基本能保证不重复、信息安全缺点:无序,不适合做索引会导致mysql B+树重排,插入效率极低mysql自增单机mysql自增可以实现分布式需要使用 insert + replace into 设置不同的步长优点:有序,能够实现递增缺点:性能有问题,不能满足高并发redis集群 incr incrby例: 5台redis,初始值 1,2,3,4,5 步长为5,可取到全局唯一i
2022-01-20 17:32:11
664
原创 spring 编程中aop切面包含及排除表达式
aop切面编程中进入切面方法 切面中一般做日志记录及参数校验工作。 execution表达式execution表示需要嵌入的包类和方法,精度是到方法。其中表示通配。例: com.trusfort…sdk.controller..(…)!execution表示需要排除的方法,表达式之间用&&或 || 符号连接,需要注意此处逻辑关系。例:* com.trusfort…s...
2020-04-22 17:36:17
1163
原创 FTP被动模式及超时问题解决,FTPClient.listFiles或者FTPClient.retrieveFile方法假死
低版本commons-net-1.6.jar存在的问题注意:java中commons-net-1.6.jar版本过低存在bug,被动模式无法连接,使用commons-net-3.6.jar后程序正常。问题:1、FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就停止在那里,什么反应都没有,出现假死状态。2、连接FTP服务器,长时间进行数据...
2020-04-22 11:19:12
8511
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人