- 博客(14)
- 收藏
- 关注
原创 Mysql的加锁情况详解
至此,mysql加锁的分析就结束了,其实挺绕的,实际总是与自己想的不一致,但是要秉持一个原则,就是mysql的锁除了保证并发事务的情况下对数据的安全读写外,还会用来解决幻读问题;有时候从幻读的角度出发,那么也就理解了为什么会这样加锁了。
2024-11-21 16:18:20
2711
原创 Redis全系列学习基础篇之位图(bitmap)常用命令的解析
以日期为key,将用户id与位索引提前做好映射,比方说0位表示张三1位表示李四2位表示王五,当张三登录时在0位设置1,李四登录在1位设置1,王五登录在2位设置1,统计指定时间时将指定时间对应的key做bitop操作即可,如下:bitop or k3 20220101 20220102 上面命令表示将20220101和02这两个key做or操作,因为二进制or操作是有1即是1,最后统计k3里1出现的次数即得出20210101到02之间活跃用户数为3:bitcount k3 0 -1。
2024-10-29 19:16:42
1361
原创 基于bytebuddy自定义agent拦截项目里的请求并打印日志
,该项目构建成功运行后可以自动拦截项目中对外暴露的http请求,项目发起的http请求/dubbo请求,并打印出入参日志,且支持nacos配置,动态切换是否打印日志,有需要的小伙伴可以自取,根据自身业务修改相关逻辑即可。总结了一下agent开发过程中遇到的坑以及最终解决的办法,最近梳理了下源码,上传到gitee上了,有需要的同学可以自取(
2024-10-28 19:14:15
288
原创 zookeeper全系列学习之分布式锁实现
就像上篇文章zookeeper全系列学习之统一配置获取说的,有了naocs谁还用zk做配置中心呢一样,现在项目中用zk实现分布式锁的估计也很少了,但是我认为它其实是有存在的价值的,因为它的临时顺序节点的特点,当客户端不可用时他能及时识别从而避免客户端开线程去主动删除,无论是为了学习还是工作亦或是为了拓展知识面,我们还是了解下为好,下面开始正文好了,zk实现分布式锁的编码实现就到这了,后续有时间再写redis、数据库实现的,其实思路缕清了,编码实现还是相对简单的。
2024-10-25 18:30:56
1136
1
原创 zookeeper全系列学习之统一配置获取
前面介绍了zk的一些基础知识,这篇文章主要介绍下如何在java环境下获取zk的配置信息;主要基于zk的监听器以及回调函数通过响应式编程的思想将核心代码糅合成一个工具类,几乎做到了拿来即用;虽然现在一般都用nacos来做配置中心了,不会有人用zk做配置中心了,但是基于这个代码了解zk的特性还是很有必要的。
2024-10-24 19:09:35
717
1
原创 zookeeper全系列学习之基础介绍
刚刚介绍完了redis,接下来介绍另一个高性能的分布式协调器zookeeperzk是主从复制集群,一个leader多个follower,只有leader能写,其余节点只提供读功能,但是客户端是可以连接集群中任意节点的,当连接的是leader则直接写,当连接的是follower则会被转发到leader进行写操作;并且zk的集群分为两种状态,一种为leader存活的可用状态,另一种为leader挂了的不可用状态(无主);
2024-10-23 11:53:49
1104
原创 Redis全系列学习进阶篇之分片集群
通过前面的文章由基础到进阶把redis相关知识都讲了一遍,今天来写redis系列最后一篇文章——分片集群;我们都知道,主从集群解决了单点故障的问题,但是并没有解决因数据量大而给服务端带来的压力问题,而分片集群刚好能够完美解决;分片集群就是在海量数据的情况下把redis数据打到不同的redis实例上来减轻单台服务的压力,分片集群的解决方案各种各样,本文从理论上把我所知道的大概都过一遍,然后介绍redis支持的集群模式,最后再根据两种代理服务部署一遍redis的集群。
2024-10-22 08:48:23
2535
原创 Redis全系列学习进阶篇之哨兵机制
上一篇文章介绍了reids的主从集群机制,但是在集群中master如果挂了我们该如何识别并切换呢,这就要引入redis的哨兵机制了,它可以自动识别故障并完成主从切换,下面我们详细介绍如何搭建一个哨兵集群并实现对redis集群的故障发现和服务切换服务监控,redis集群上线后会通过ping命令实时监控集群状态,当发现服务不可用时会进行投票,当大多数哨兵都认为服务不可用时则马上进行哨兵内部选主,执行故障恢复操作。
2024-10-21 19:18:42
989
原创 springboot源码学习之旅——环境构建
之前简单看过SpringIOC的源码,大概了解了Spring创建bean的过程以及一些拓展点,今天开始准备看springboot的源码,源码的版本还是2.2.X的,究其原因就是我发现2.2.X之后的版本好像默认是gradel构建的了,要想使用maven得自己写配置文件,而我不想折腾就直接用2.2.X版本了,此次主要是想看下springboot的启动过程和自动装配,对比了一下虽然新老版本有差别,但是核心能力应该是没变的,如果介意的就不用往下看了。
2024-10-21 15:35:07
410
原创 Redis全系列学习进阶篇之主从集群
之前介绍redis的基础应用、底层原理以及工作中的实际运用,这篇文章开始介绍redis的主从集群和哨兵机制,从概念到实操,这块我在面试中被问的挺少的,最多问问数据同步机制,但是我们工作中可能会用到,特别是没有运维需要开发自己部署环境的公司;
2024-10-21 09:42:25
620
原创 记一次基于bytebuddy创建agent拦截不生效的坑
最近需要对存量的项目进行批量日志打印操作,要求对代码零侵入,显然AOP是行不通了,于是考虑使用agent来实现对方法的拦截,但是一顿操作下来,神奇的事情发生了,我自定义的agent里的premain方法被调用了,但是定义的拦截器没有生效,即使我拦截规则用的是any(),即拦截所有请求,也不会生效,更尴尬的是,我一时找不到原因,于是就新建了一个新的springboot项目,而这个新项目对agent有效,最后通过配置main方法,修改bytebuddy的版本解决了,今天用这篇文章主要记录下排查过程,以便给跟我出
2024-10-18 08:59:36
1206
原创 Redis全系列学习进阶篇之缓存穿透、击穿、雪崩以及实用解决方案
今天来聊聊redis的缓存穿透、击穿、雪崩以及解决方案,其中解决方案包括类似于布隆过滤器这种网上一搜一大片但是实际生产部署有一定复杂度的,也有基于spring注解通过一行代码就能解决的,其中各有优劣,咱们根据实际需要选型;接下来会从穿透、击穿、雪崩的基本概念、各种问题对应的解决方案以及方案的具体实施来一一介绍@Cacheable注解是一个spring3.1后引入的缓存技术,可通过在业务代码添加spring的缓存注解来实现缓存对象和方法的效果;而不用在业务代码里显示的进行set操作,大大方便了我们的日常开发。
2024-10-17 19:50:58
2151
原创 Redis全系列学习基础篇之底层原理
redis底层原理要聊的东西其实挺多的,感觉也是面试的高频问题,这篇文章主要介绍我本身了解的原理和在面试里遇到的问题本文介绍了redis的线程模型、IO模型、持久化、缓存过期、内存淘汰等面试中常问的知识点,漏的比较重要的一个点应该就是数据类型的底层实现了,后续我会补充进来。
2024-10-16 17:30:36
1493
原创 Redis全系列学习基础篇之项目中的实际运用
作为一名java程序员在这残酷的大环境下除了学习只能学习,学习了不一定有用,不学习则肯定没用,这次裁员找工作明显比21年难,好在平时有学习的积累从而不至于那么难看,但是回头看还是觉得自己准备的不够,所以想从今天开始结合我自己这次的面试体验和日常的积累然后以博客的形式再总结一次,在给自己加深映像的同时希望也能帮助到正在找工作的小伙伴,目前计划更新的技术栈有jvm、多线程、mysql、redis、kafka、spring等,希望能坚持下去,也希望更新完成之前千万别丢了工作,哈哈。
2024-10-15 17:58:21
1074
基于bytebuddy构建的日志打印agent
2024-10-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人