- 博客(33)
- 收藏
- 关注
原创 Redis 延时双删
这是为了我们在第二次删除Redis之前能完成数据库的更新操作。假象一下,如果没有第三步操作时,有很大概率,在两次删除Redis操作执行完毕之后,数据库的数据还没有更新,此时若有请求访问数据,便会出现我们一开始提到的那个问题。如果我们没有第二次删除操作,此时有请求访问数据,有可能是访问的之前未做修改的Redis数据,删除操作执行后,Redis为空,有请求进来时,便会去访问数据库,此时数据库中的数据已是更新后的数据,保证了数据的一致性。为何要延时500毫秒?延时双删方案执行步骤。为何要两次删除缓存?
2023-12-07 14:54:02
505
原创 FastDFS基础角色介绍
Tracker主节点Storage从节点主节点只能有一个;从节点可以有多个,从节点可以加入到分组里,(也就是说可以提供多个从节点的副本,来保存一份数据)负责均衡是由主节点来确定的,在选择上传的服务器的时候,可以选择往哪一个storage里上传,默认的Tracker会把数据传进第一台的Storage,第二次上传会传到第二台,刚上传完的时候有一个复制的操作(就是说刚刚上传完到第一个Storage,就会触发复制往另外两个Storage复制数据,异步复制不会影响主线程);
2023-11-10 14:45:27
73
原创 ActiveMQ的理解记录
读的亿级流量,写的时候可能是千级需要一个高性能的客户端,用nginx写lua脚本,把信息从nginx到mq里打,标记接收数据的标识,说明这个数据未被消费,后面启动一些数据慢慢消费,两阶段提交TCC借助了Mq的确认机制来完成分布式事物。队列 queue:只支持一次消费,如果没有消费端去消费就存储在mq中,没有被消费的消息可以实持久化;(设置排他,消息消费不完,不会把消息发给其他的consumer,broker就会堆积消息,堆积到一定程度,produce就不能再提交消息了)数据默认不落地,是无状态的。
2023-01-31 17:32:21
202
原创 RocketMq的理解和记录
ActiveMQ:消费消息的异步操作的代码逻辑图示和讲解临时节点创建两端会话的情况遇到的问题rocketMq 事务消息:rocketMq中使用消息事物的流程RocketMQ角色brokerbroker集群producerconsumernamespace对比JMS中的Topic和Queue发送方式批量发送消息消费消息模式集群消息广播消息RocketMq源码一级高级ApiOffsetminOffsetmaxOffsetconsumerOffsetdiffTotal
2023-01-10 15:28:49
462
转载 nignx和keepalived详细配置与原理
Nginx + keepalived 实现高可用 + 防盗链 + 动静分离;Nginx 的 6 大应用场景
2022-11-14 14:35:27
871
原创 yapi导入接口,通过idea插件导入
文章目录idea下载yapi插件配置idea的yapi参数写代码的备注要求导入yapiidea下载yapi插件1、file->setting->plugins 下载 idea yapi 插件配置idea的yapi参数写代码的备注要求yapi的识别是通过javadoc方式才能识别到参数和controller传入参数 各个属性上需要加备注返回实体的各个属性也要加备注导入yapi...
2022-04-12 15:00:58
1100
原创 分布式事务的理解记录
文章目录传统事务的基本特性原子性一致性隔离性持久性分库分表表垂直拆分表水平拆分分库微服务下的多库存储回想CAP定理和BASE理论海量数据/高并发分布式事务解决方案强一致性二阶段提交协议问题三阶段提交协议TCC模式框架补偿模式传统事务的基本特性mysql中,我们可以使用begin开始事务,rollback回滚事务,commit提交事务redolog记录变更,undolog回滚Spring中,使用@Transaction标记事务原子性要么全部成功,要么全部失败,没有中间状态一致性指的是在执行事务
2022-03-24 13:32:42
1574
原创 Mysql调优总结
文章预览:性能监控了解mysql要分三个层次工具:1、show profile(5.7可用,未来版本会淘汰)2、performance_schema 检测mysql的性能使用情况3、show processlist查看当前服务有多少个连接schema与数据类型优化数据类型的优化合理使用范式和反范式主键的选择字符集的选择存储引擎的选择适当的数据冗余适当拆分执行计划性能监控在公司里发现sql很慢但是不知道怎么解决?需要知道哪一个步骤慢了了解mysql要分三个层次1、客户端client2、mysql提
2022-03-24 13:02:46
174
原创 如何删除Eureka服务中心已经注册的服务
发现一个不可访问的服务在eureka上,一直不掉在web页面上访问总是会定位到不存在的服务上的解决办法:1、打开postman,请求方式改为delete2、按照如下方式填入参数,点击send
2022-02-16 13:47:55
1331
原创 Docker容器日志查看与清理
1.手动清理->切换到日志目录,直接执行命令docker inspect --format=’{{.LogPath}}’ <容器名>echo 日志目录cd 容器目录echo “” > 9e6d1fbde3c1b7b41202dc2937dfdeee72e4574cbc316e502bb8fdd5d6e5d6ff-json.log
2022-02-15 15:14:57
505
原创 Spring的refresh源码解读整理
Spring的控制反转IOC帮我们创建当前的对象,把对象交给spring,工厂模式工厂可以帮我们生产这些对象,工厂的这些类依旧需要手动去定义技术的更新迭代最重要的一个目的就是 偷懒springIOC容器可以放入bean对象,还可以放集合框架,在spring当中选择的是Map,因为当我们创建完成的时候,map是一个k-v键值对的方式,我们可以根据我们的key很方便的获取到value.容器的底层原理是反射spring当中用的最多的一个注解 @Autowire手写一个反射实现@Autowireca
2022-02-08 17:21:42
1028
原创 Java集合List按日期升序或降序四种方法
四种方法快速预览Method 1不管是Date、String、Long类型的日期都可以排序,无需转换orders.sort((t1, t2) -> t2.getPayTime().compareTo(t1.getPayTime()));Method 2利用stream,需要把字符串日期转换为时间戳orders = orders.stream().sorted((t1,t2) -> Long.comp
2022-01-17 18:22:22
6285
原创 Hive返回Array类型,Java应该怎么接收?示例
对应java类型@Datapublic class RowKeysBO { @ApiModelProperty(value = "rowkeys") private Object rowkeys;}转换方法: /** * 将hive当中 返回数组的 变为List<String> * @param object : * @return : java.util.List<java.lang.String> */
2021-12-09 14:35:11
1607
原创 Solr基本用法--java实现
基础的solr工具类import org.apache.solr.client.solrj.SolrClient;import org.apache.solr.client.solrj.SolrQuery;import org.apache.solr.client.solrj.impl.CloudSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.common.So
2021-08-25 10:55:53
678
原创 springcloud的loadbalancer 超时设置
Spring Cloud Loadbalancer does not have a built-in HTTP client so it does not have a timeout.
2021-05-27 11:40:17
1757
转载 linux查看日志三种方式
第一种:查看实时变化的日志(比较吃内存)最常用的:tail -f filename (默认最后10行,相当于增加参数 -n 10)Ctrl+c 是退出tail命令其他情况:tail -n 20 filename (显示filename最后20行)tail -n +5 filename (从第5行开始显示文件)第二种:搜索关键字附近的日志最常用的:cat -n filename |grep “关键字”其他情况:cat filename | grep -C 5
2021-03-30 16:01:14
324
原创 关于redis在分布式架构当中使用的一些理解和总结
redis的特征:1、基于内存的2、key-value键值对的存储结构3、对于工作流是单线程的4、io模型 epoll(多路复用)5、value有类型6、value有类型使具有本地方法->触发计算向数据移动(结合redis工作单线程使redis在计算上能达到最大的性能效果)工作模型:下面展示一个操作模型kernel是内核,redis和很多的客户端并发访问通信的时候,因为可能发数据也有可能没发数据,如何快速知道那个客户端有数据进行读取,没有数据不进行读取减少没必要的操作,就用到了.
2021-03-18 00:58:16
273
1
原创 关于mysql调优的一些理解记录
尽可能多的减少io量;(减少io次数,减少io量)局部性原理:数据和程序都有聚集成群的倾向,之前被查询过的数据可能会被再次查询。磁盘预读:在磁盘根内存进行交互的时候有一个很小的逻辑单元,称为页,datapages,页跟操作系统相关,一般情况下是4k或者8k,每次再进行数据交互的时候,一定读取的是页的整数倍。mysql的innodb在进行数据读取的时候也是和页有关的,datapagesize 默认16kb。索引是存在磁盘中的,但是会预先加载到内存中,而且在进行加载的时候是分页加载->分块读取
2021-03-10 14:15:36
127
原创 关于GC的理解与整理
GC有两种模型:分带模型、分区模型。默认使用分带模型·分带模型 6个分为3对(一般情况下)。分带模型:把整个内存分成两个部分 新生代、 老年代新生老年代找垃圾使用的算法:引用计数 有引用值向他 他就不是垃圾(循环引用,abc循环引用 会导致分不出那三个已经变成垃圾)根可达算法 能找到的根的的定位出来的垃圾的回收算法:标记清除(内存碎片化)拷贝(把空间一分为二,一直使用其中一半,把另一半用于前一班有用拷过来,浪费空间)标记压缩(把有用的往前挪,压缩在最前面;效率最低)垃圾回收
2021-03-04 21:35:37
401
2
原创 代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。介绍**意图:**为其他对象提供一种代理以控制对这个对象的访问。**主要解决:**在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上对此对
2021-02-09 10:19:48
91
原创 Thinking in java--注册工厂
//工厂方法可以被多态地调用,从而为你创建恰当类型的对象。public interface Factory<T> { //泛型参数T使得create(可以在每种Factory实现中返回不同的类型。 T create();}import java.util.ArrayList;import java.util.List;import java.util.Random;public class Part { public String toString(){
2021-02-05 09:48:00
133
原创 无意识的递归
Java中的每个类从根本上都继承自Object,标准容器类自然也不例外。因此容器都有toString()方法,并且覆盖了该方法,使得它生成的String结果能够表达容器自身,以及容器所包含的对象。例如ArrayList.toString(),它会遍历ArrayList中包含的所有对象,调用每个元素上的toString()方法;如果你希望toString()方法打印出对象的内存地址,也许你会考虑使用this关键字: //: strings/InfiniteRecursion.java // ..
2021-01-25 16:49:40
78
转载 设计模式(工厂模式详解)Java实现
转载:https://www.cnblogs.com/yssjun/p/11102162.html工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的
2021-01-07 15:05:39
207
1
原创 设计模式(策略模式详解)Java实现
public class Processor { public String name(){ return getClass().getSimpleName(); } Object process (Object input){ return input; }}
2020-12-24 15:56:13
365
原创 is-a has-a like-a 的区别
Is-a:是a:A Is B:A是B(继承关系,继承)。has-a:有a:A has B:A有B(从属关系,聚合)。like-a:像a:A like B:A像B(组合关系,接口)。看书时看到觉得有点搞不懂,查阅后记录。参考:https://blog.csdn.net/m0_37265215/article/details/82142326...
2020-12-24 13:53:41
159
原创 设计模式(单例模式详解)Java实现
单例模式详解请看下面两个class:Soup1类和Soup2类展示了如何通过将所有的构造器指定为private来阻止直接创建某个类的实例。请一定要牢记,如果没有明确地至少创建一个构造器的话,就会帮你创建一个默认构造器(不带有任何参数的构造器)。如果我们自己编写了默认的构造器,那么就不会自动创建它了。如果把该构造器指定为private,那么就谁也无法创建该类的对象了。但是现在别人该怎样使用这个类呢?上面的例子就给出了两种选择:在Soup1中,创建一个static方法,它创建一个新的Soup1对象并
2020-12-21 09:59:00
80
1
原创 trailhead当中的题目部分(持续更新
salesforce developer题目记录1 What types of elements do you see in the XML markup for Aura components?A Static HTML tagsB JavaScriptC Aura component tagsD Aand C2 What’s one situation where it’s better to use Lightning components instead of Visualforc
2020-08-19 11:04:45
357
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人