- 博客(44)
- 收藏
- 关注
原创 Redis和mysql如何保证数据一致性
mysql 和 redis 数据一致性是一个复杂的课题,通常是多种策略同时使用,例如:延迟双删、redis 过期淘汰、通过路由策略串行处理同类型数据、分布式锁等等。原因:如果延迟时间小于写入redis的时间,会导致请求1清除了缓存,但是请求2缓存还未写入的尴尬,一般写入的时间会远小于5秒。延迟,是因为 mysql 和 redis 主从节点数据同步不是实时的,所以需要等待一段时间,去增强它们的数据一致性。延迟双删用比较简洁的方式实现 mysql 和 redis 数据最终一致性,但它不是强一致。
2023-06-13 22:18:54
229
原创 Spring中bean创建的生命周期
4.处理Award回调beanFatoryAware。6.初始化,处理iniyializingBean接口。5.初始化前,处理@postConstruct注解。7.初始化前,进行aop。
2023-06-13 21:55:31
135
原创 Spring 事务的传播机制
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。2)不可重复读取:事务1读取记录时,事务2更新了记录并提交,事务1再次读取时可以看到事务2修改后的记录;PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。3)脏读:事务1更新了记录,但没有提交,事务2读取了更新后的行,然后事务T1回滚,现在T2读取无效。PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
2023-06-13 21:40:00
601
原创 Spring事物失效的八大场景
4.单独的线程方法调用:当mybatis或者jdbcTemplate执行sql时,会从ThreadLocal中获取数据库连接对象,如果开启事物的线程和执行sql的线程是同一个,那么就能拿到数据库连接对象,如果不是同一个线程,那么就拿不到,这样mybatis或者jdbcTemplate就会新建一个数据库连接执行sql。2.方法是private的 Spring事物是基于CGLIB进行aop,而CGLIB会基于父子类,子类是代理类,父类是被代理类,如果父类中的某个方法是private的。8,数据库不支持事务。
2023-06-12 22:31:22
992
原创 分布式下数据一致性的问题
leader本地记一条日志,存到磁盘里去,然后把日志发送给所有的从节点,从从节点收到日志以后也会把它存到磁盘里去,然后再给一个ack给主节点(一阶段)leader节点收到ack以后,会发送提交命令给从节点,并且自己也会更新内存中的数据(两阶段)2.如何保证分布式下数据一致性(最终一致性)
2023-06-12 21:54:55
49
原创 Mysql索引失效的场景
9.范围查询数据量过多会导致索引失效。8.select *会导致全表扫描。5.<>(不等于)会导致索引失效。6.order by导致索引失效。3.对索引列计算或者使用了函数。2.不正确的like查询。1.不符合最左匹配原则。4.索引进行了类型转换。7.or导致索引试下。
2023-06-12 21:46:20
48
原创 Sychronized的锁升级过程(把一个对象当做一把锁)
4.自旋锁:自旋锁就是在线程获取锁的过程中,不会去阻塞线程,也就无所谓唤醒线程,阻塞和唤醒这两个都需要操作系统去进行,比较消耗时间,自旋锁是线程通过cas获取预期的一个标记,如果没有获取到,就继续循环获取,如果获取到了则表示获取到了锁,这个过程线程一直在运行中,相对而言没有使用太多的操作系统的资源,比较轻量。1.偏向锁:在锁对象的对象头中记录下当前获取到该锁的线程id,该线程下次如果又来获取该锁就可以直接获取到了,也就是支持锁重入。
2023-06-12 21:27:44
63
原创 如何优雅的停止一个线程以及如何设置
Runtime.getRuntime().availableProcessors().只不过为了应对线程执行过程中发成缺页中断或者其他异常导致的线程阻塞的请求,我们可以额外在多设置一个线程,这样当某个线程暂时不需要cpu时,可以有替补线程来继续利用cpu,所以对于cpu密集型任务,我们可以设置线程数为:cpu核心数+1。2.IO密集型任务:比如文件IO,线程在执行IO任务时可能大部分时间都阻塞在IO上,所以对于IO型任务,我们通常会设置线程数为2*CPU核心数。2.线程池的核心线程数,最大线程数如何设置。
2023-05-29 22:45:24
60
原创 线程池中提交一个任务的流程
4.如果大于或者等于,则尝试将Runnable加入到workQueue中。5.如果workQueue没满,则将Runnable正常入队,等待执行。6.如果workQueue满了,则会入队失败,那么会尝试继续增加线程。7.判断当前线程池中的线程数是否小于maximumpoolSize。2.会先判断当前线程池中的线程数是否小于corePoolSize。9.如果大于等于,则执行拒绝策略,拒绝此Runnable。3.如果小于则创建新线程并执行runnable.8.如果小于,则创建新线程并执行任务。
2023-04-29 15:51:21
563
原创 SpringMvc的请求流程
4.在执行方法之前就会解析方法参数,比如解析@RequestParam,@RequestHeader,@PathVariable等注解。5.解析这些注解就是从请求中获取对应的数据,比如请求头,请求parameters,8.如果方法上加了@ResponseBody,那么就会把返回值直接返回给浏览器。7.执行方法后就会得到方法的返回值,springmvc会对返回值进行解析。10.如果方法上没有加@ResponseBody,那么就会进行视图解析,然后把解析之后的html数据返回给浏览器。
2023-04-29 15:08:00
99
原创 AutowiredAndResource区别
Autowired是Spring层面再Spring里面绑定的 @Resource是jDK层面的不跟Spring绑定。另外可以利用@resource指定name,如果配置了name,则只会找到叫这个name的bean对象,@Autowired 是先根据属性的类型去spring容器中找bean对象如果找到多个,@Resource会先根据属性名字去spring容器中找bean对象,就根据属性名字去确定是哪一个,如果根据名字没找到就会报错。如果没找到,则会根据属性来找。如果找到多个就会报错,
2023-04-29 14:50:36
77
原创 本地缓存的使用
我的使用场景是为了防止数据泄漏,所以需要每个接口都做了统一的权限查询,但是权限在草稿状态的时候是可以修改的,但是询单一但发布,除了数据库进行修改,是不会有其他的变动的。caffeine:基于java8,高性能、高命中率、低内存占用,性能极高,在spring 2.x中取代guava成为默认的本地缓存组件,只在内存中存储缓存的数据。ehcache:纯java的进程内缓存框架,快速精干,是hibernate默认的缓存管理器,缓存数据的存储有内存、硬盘两级,无需担心容量问题。spring整合caffeine。
2023-03-23 16:15:03
262
原创 docker 下载kafka
Kafka采用的是订阅-发布的模式,消费者主动的去kafka集群拉取消息,与producer相同的是,消费者在拉取消息的时候也是找leader去拉取。kafka存在的意义:去耦合、异步、中间件的消息系统。
2022-11-09 16:25:13
1037
原创 docker安装fastdfs
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。
2022-10-11 19:51:26
578
原创 防止重复提交NoRepeatSubmit
相信很多人都被短时间内接口的重复请求搞的很苦恼,那这份简单的方重复提交的方式一定可以解决你的苦恼,首先定义一个自定义的注解,然后利用aop,在需要防止重复提交的接口方法上加上注解就可以啦
2022-09-21 20:30:16
992
原创 练手Demo(一)
配置文件spring: redis: host: localhost username: root password: port: 6379 datasource: url: jdbc:mysql://localhost:3306/base-admin?Unicode=true&&allowPublicKeyRetrieval=true&characterEncoding=UTF-8&allowMultiQueries=
2022-04-04 21:15:48
1444
原创 Spring注解驱动开发(六)
AOP. 配置类package com.example.paymentdemo.config;import com.example.paymentdemo.aop.LogAspects;import com.example.paymentdemo.main.MathCalculator;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configu
2022-03-22 21:08:28
484
原创 spring注解驱动开发(五)
package com.example.paymentdemo.config;import com.example.paymentdemo.Dao.BookDao;import org.springframework.context.annotation.*;/** * @author xushuai * @date 2022年03月19日 20:50 *//** * * @author xushuai * @date 2022/3/19 20:52 * @param null.
2022-03-21 21:11:59
394
原创 Spring注解驱动开发(四)
自动装配。配置类package com.example.paymentdemo.config;import com.example.paymentdemo.Dao.BookDao;import org.springframework.context.annotation.*;/** * @author xushuai * @date 2022年03月19日 20:50 *//** * * @author xushuai * @date 2022/3/19 20:52 * @p
2022-03-19 22:17:18
280
原创 Spring注解驱动开发(三)
FactoryBean返回为单例时多例时想返回beanFactory本身时,加前缀Bean的生命周期主要代码 /** * * @author xushuai * @date 2022/3/15 8:39 下午 * @param null * @return null * 给容器中注册组件 * 1.包扫描+组件标...
2022-03-16 22:45:47
305
原创 SPRING注解驱动开发(二)
@Conditional的使用 /** * conditional 按照一定的条件判断,满足条件给容器中注册bean * @author xushuai * @date 2022/3/15 8:07 下午 * @param null * @return null * * 如果是windows系统给容器中注册person1,如果是linux系统,给容器中注册person2 * 可以注解在类上也可以...
2022-03-15 21:22:35
607
原创 Git常用命令
1.git config用法:git config -global user.name "name"用法:git config –global user.email “[email address]”该命令将分别设置提交代码的用户名和电子邮件地址。2.git init用法:git init [repository name]该命令可用于创建一个新的代码库。3.git clone用法:git clone [url]该命令可用于通过指定的URL获取一个代码库。.
2021-12-01 23:04:40
56
原创 java自定义注解
1.java文件叫Annotation ,用@interface表示2.原注解,@interface上面按需要注解上一些东西,包括@Retention,@Target,@Document,@Inherited四种3.注解的保留策略:@Retention(RetenttionPolicy.Source) //注解仅存在于源码中,在class字节码中不包含@Retention(RetentionPolicy.CLASS) //默认的保留策略,注解会在class字节码文件中存在,但运行时无法...
2021-12-01 21:26:54
183
原创 MAC下安装RabbitMQ
1.安装homebrew/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"输入序列号常见错误说明1.Mac 10.11系统版本以下的(包括10.11),brew官方已经停止对这类老系统的支持。2.如果遇到报错中含有errno 54 / 443 / 的问题:这种一般切换源以后没有问题,因为都是公益服务器,不稳定性很大。3.检测到你不是最新系统,需要自动升
2021-11-29 23:05:42
208
原创 springboot对接支付宝实战
开发 主要分为四步:1.生成公钥私钥2.建立应用3.沙箱环境4.接口开发一.生成私钥公钥官方文档:https://opendocs.alipay.com/open/291/105971/二.建立应用平台地址:https://opendocs.alipay.com/open三.沙箱环境实际上和开发真实际的生产环境差不多,开发的时候用沙箱进行测试,到了后面更换appId和支付宝网关就可以了四.接口开发1.引入依赖<dependency>
2021-11-29 21:59:19
364
原创 Vue环境搭建
步骤一:安装node.js在搭建vue的开发环境之前,需要先下载node.js,vue的运行是要依赖于node的npm的管理工具来实现,node可以在官网或者中文网里面下载,根据自己的电脑选择是32还是64 ,网址1:下载 | Node.js 中文网网址2:https://nodejs.org/dist/步骤二:安装镜像由于 npm install安装速度慢,所以本文使用阿里淘宝镜像及其命令 cnpm进行安装,cmd黑窗口输入命令:npm install -g cnpm --r
2021-11-26 10:42:02
313
原创 IDEA注释模版
一:类注释打开 IDEA 的Settings,点击Editor-->File and Code Templates,点击右边File选项卡下面的Class,在其中添加图中红框内的内容二、方法注释 根据形参数目自动生成@param注解 根据方法是否有返回值智能生成@Return注解 相较于类模板,为方法添加注释模板就较为复杂,首先在Settings中点击Editor-->Live Templates。点击最右边的+,首先选择2. ...
2021-11-26 10:27:29
72
原创 SQL小知识(二)
设计数据库表的原则:三少一多数据库表越少越好,数据库表的字段个数越少越好,联合组建的字段个数越少越好使用主键和外键越多越好select中的执行顺序from > where >group by >having >select >distinct >order by >limit首先先通过 CROSS JOIN 求笛卡尔积,相当于得到虚拟表 vt(virtual table)1-1;通过 ON 进行筛选,在虚拟表 vt1-1 的基础上进行
2021-11-15 15:16:38
430
原创 SQL的小知识(一)
sql在orcal中的执行过程:1. 语法检查:检查sql拼写是否正确2.语义检查:检查sql访问对象是否存在(如列名不存在,会报错)3.权限检查:检查用户是否具备访问该数据库的权限4.共享池检查(shared pool)是一块内存池,其主要作用是缓存sql语句和执行计划。orcal通过检查共享池来判断是进行软解析和硬解析。软解析:指orcal首先对sql语句进行hash运算,然后根据hash值来查找,如果存在sql语句的执行计划,就直接拿来执行,直接进入执行器的缓解,这就是软解析。如果没.
2021-11-09 15:44:08
584
原创 常用的数据保存格式 266原则 最低两位,少的补0,多的去0
BigDecimal s = new BigDecimal("101.0020").stripTrailingZeros();DecimalFormat decimalFormat = new DecimalFormat("0.00#");String strVal = decimalFormat.format(s);
2021-11-06 20:10:52
62
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人