- 博客(9)
- 收藏
- 关注
原创 redis集群的slot数据槽映射
redis Cluster 是redis3.0引入的一种无中心化的集群,客户端可以向任意一个节点通信,不同的节点群之间数据不互通;redis Cluster将数据的key通过CRC16算法的结果并取模16383后,分为16384个slot槽,每个master节点都被分配到一段slot槽中,这个节点只负责管理key映射到这个槽的k-v数据,对于不是当前槽的key的交互,会向客户端发送一个MOVED,表示需要客户端自行重定向其他节点。其原理与HashMap的hash过程是完全相同的。
2023-02-13 19:15:00
523
原创 HashMap
3.判断index位置是否为null,若为空直接赋值,若不为空需要从头到尾遍历整个链表,通过Object.equals来判断key是否与链表上的节点相等,若相等则覆盖,若都不相等就通过尾插法来插入这个键值对。HashMap的存放数据的过程比较有趣,它总体设计是通过hashCode来计算出当前key和value在数组中的位置,再根据这个位置是否有元素来决定是覆盖还是通过尾插法插入链表尾部。之所以1中要把高低16位互相异或运算,是为了避免低16位冲突太多,异或后可以使得低位保留到高位的信息,减少hash冲突。
2023-02-12 21:14:21
147
原创 Spring-tx包的TransactionInerceptor的机制
4.使用TransactionManager.getTransaction来尝试建立一个事务并获取事务信息对象TransactionInfo,若当前线程已经有事务TransactionInfo,则把之前的TransactionInfo保存在新建立的TransactionInfo对象里,然后把TransactionManager对象的ThreadLocal里保存的TransactionInfo更新为新建立的对象。7.清除ThreadLocal中的事务信息,更改为上一次的事务信息。5.执行被代理的方法。
2023-02-10 00:46:53
214
原创 SpringShutdownHook
SpringShutdowHook与RocketMq等中使用的Hook不一样,它不是传统意义上的钩子函数接口,而是一个线程,这个线程被注册在RunTime类中,RunTime再把它注册到ApplicationShutdownHooks类中,在调用Shutdown.exit和Shutdown.shutdown时,会启动ShutdownApplicationShutdownHooks中的所有Hook,并把他们join到当前线程中。在最后程序结束时,所有Hook线程都是并发运行的。
2023-02-09 22:08:06
1715
原创 【JedisCluster的源码过程】以get请求为例
1.通过继承----->BinaryClient----继承---->Connection.getConnection建立新的Socket长连接,并通过socket.getOutputStream和socket.getInputStream来创建RedisOutputStream和RedisInputStream,之后与远程redis服务器的互动都通过这两个字节流来实现。获取execute方法返回值,先不返回,执行finally中的方法释放jedis对象中的连接。然后调用这个对象的run方法。
2023-02-06 00:56:38
740
原创 JAVA垃圾回收机制3
几种垃圾回收器:一、Serial收集器单线程收集器,对于新生代采用复制清除算法,对老年代使用标记整理算法,都需要stop the world。在jdk1.3.1之前是hotspot的唯一收集器,由于是单线程收集器,因此效率低下,STW时间也比较长,但在单核或者处理器核心数较少的时候,由于其没有线程交互的开销,其反而比其他收集器效率高。二、ParNew收集器Serial收集器的多线程版本,专门收集新生代,除了使用多线程进行垃圾回收之外,其控制参数、回收策略都与Serial一样。JDK5
2022-05-18 23:20:42
166
原创 JAVA垃圾回收机制2
一、分代收集理论主流垃圾回收器都遵循两个理论:弱分代理论:绝大多数对象都有会很快死亡。 强分代理论:经过越多次回收的对象生命周期越长,越难以消亡。由这两个理论我们可以自己去“设计”回收机制:既然绝大多数对象都会很快死亡,那么应该更多地关注不会很快死亡的对象,这样可以反向筛选出来需要回收的对象。同时,我们可以把经历了不同回收次数的对象放在不同区域里,来反映其生命周期的长度。显然当时的设计者就是这样想的,JAVA堆中所谓新生代、老年代就是出于这种考虑设计出来的。新生代:主要存放刚建立的对象
2022-03-05 16:46:39
203
原创 JAVA垃圾回收机制详解1
一、判断对象是否还存活的算法1.引用计数算法顾名思义,一个对象创建后,在其中建立一个引用计数器,若该对象被引用,就+1,若引用失效,就-1,若引用为0,说明不再被任何地方引用,回收这个对象。优点:简单,易实现缺点:很明显两个对象相互引用的情况,会导致彼此都不会被回收,而且计数器本身也比较消耗性能(考虑多线程的话同步、加锁是必不可少的)。JAVA中是否采用:否2.可达性分析算法从GC Roots开始,根据引用关系向下搜索,走过的路径就叫引用链,所有不在引用链上的的对象,就会被判定是
2022-03-02 19:38:44
427
原创 lua脚本实现的分布式锁
用lua脚本实现的分布式锁lua脚本的概念什么的网上一堆就不说了,简单说下这里就是利用了redis对于lua脚本会原子性执行的特性来保证我们可以连续对一个键值对进行操作而不用担心冲突。脚本内容:加锁:“if redis.call(‘get’,KEYS[1])==false then return redis.call(‘set’,KEYS[1],ARGV[1],‘NX’,‘PX’,”+LOCK_HOLD_TIME+") elseif redis.call(‘get’,KEYS[1])==ARGV[1]
2022-02-23 21:32:28
2327
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人