<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LCN29的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/LCN29</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; LCN29]]></copyright><item><title><![CDATA[【Redis】集群槽设计原理]]></title><link>https://blog.csdn.net/LCN29/article/details/142151650</link><guid>https://blog.csdn.net/LCN29/article/details/142151650</guid><author>LCN29</author><pubDate>Fri, 27 Sep 2024 15:48:55 +0800</pubDate><description><![CDATA[在 Redis 中, 为了支持高可用, 官方提供了 3 种方式但是主从复制和哨兵模式都有一个问题: 无法水平扩缩容, 而这个问题在集群模式中得到了解决。假设有 3 个 Redis 节点, 所有的数据均匀的分散在 3 个节点中。如果现在需要往里面加入一个新的节点或移出一个已有的节点, 那么就需要对已有的数据做迁移。这个迁移可以说是涉及到所有数据, 这是一个大成本的操作。Redis 为了避免全数据量的迁移, 在集群中引入了一个槽的概念。]]></description><category></category></item><item><title><![CDATA[【Redis】Redis Cluster 简单介绍]]></title><link>https://blog.csdn.net/LCN29/article/details/142595416</link><guid>https://blog.csdn.net/LCN29/article/details/142595416</guid><author>LCN29</author><pubDate>Fri, 27 Sep 2024 15:48:13 +0800</pubDate><description><![CDATA[Redis Cluster 是 Redis 3.0 提供的一种分布式解决方案, 允许数据在多个节点之间分散存储, 从而实现高可用性和可扩展性。]]></description><category></category></item><item><title><![CDATA[【Redis】主从复制 - 源码]]></title><link>https://blog.csdn.net/LCN29/article/details/142069696</link><guid>https://blog.csdn.net/LCN29/article/details/142069696</guid><author>LCN29</author><pubDate>Tue, 10 Sep 2024 11:40:45 +0800</pubDate><description><![CDATA[因为主从复制的过程很复杂, 同时核心逻辑主要集中在这个文件中, 避免篇幅过大, 所以将主从复制中涉及这个文件的代码集中到了另一篇文章。在当前文章主要分析主从复制的大体代码逻辑, 如果需要了解整体的过程, 可以配合这篇文章。]]></description><category></category></item><item><title><![CDATA[【Redis】主从复制 - relication 源码分析]]></title><link>https://blog.csdn.net/LCN29/article/details/142069680</link><guid>https://blog.csdn.net/LCN29/article/details/142069680</guid><author>LCN29</author><pubDate>Tue, 10 Sep 2024 11:37:22 +0800</pubDate><description><![CDATA[【代码】【Redis】主从复制 - relication 源码分析。]]></description><category></category></item><item><title><![CDATA[【Redis】主从复制分析-基础]]></title><link>https://blog.csdn.net/LCN29/article/details/140615618</link><guid>https://blog.csdn.net/LCN29/article/details/140615618</guid><author>LCN29</author><pubDate>Mon, 22 Jul 2024 17:38:06 +0800</pubDate><description><![CDATA[对于 Redis 从节点, 可能因为版本问题, 存在着复制能力不一致的情况, 所以在主从复制开始的阶段, 从节点需要将自身支持的复制能力发送给主节点,(这个缓存区是一个环形的数组, 从头写到尾, 写满了, 重新回到头, 继续写, 新的数据覆盖掉旧的, 同时所有的从节点共用一个缓冲区)。在运行中, 主节点处理完了命令, 会遍历自身维护的所有的从节点, 将自身执行的命令发送给所有状态符合的从节点, 保证数据的一致。主从建立了连接, 主节点会将自身所有的数据生成为一个 RDB 的文件, 然后以。]]></description><category></category></item><item><title><![CDATA[【Redis】主从复制分析-使用]]></title><link>https://blog.csdn.net/LCN29/article/details/140611683</link><guid>https://blog.csdn.net/LCN29/article/details/140611683</guid><author>LCN29</author><pubDate>Mon, 22 Jul 2024 17:35:54 +0800</pubDate><description><![CDATA[Reids 主从复制:将一台 Redis 服务器的数据, 复制到其他的 Redis 服务器。前者称为主节点 (master), 后者称为从节点 (slave)。数据的复制是单向的, 只能由主节点到从节点, 同时主节点以写为主 (可写也可以读), 从节点只能读不可写入。]]></description><category></category></item><item><title><![CDATA[【MySQL】记一次 SQL 优化]]></title><link>https://blog.csdn.net/LCN29/article/details/139993684</link><guid>https://blog.csdn.net/LCN29/article/details/139993684</guid><author>LCN29</author><pubDate>Wed, 26 Jun 2024 16:59:12 +0800</pubDate><description><![CDATA[基于这种情况, 这张大表中的未发送的数据量和远远小于已发送的数据量, 同时平时查询的时候也都几乎是查询未发送的, 这时候就可以给这个枚举值字段加上索引, 因为通过未发送这种情况可以筛选掉很多的数据量。通过 char_column_3 in 查询出来的数据为 (1, 1), (1,3), (1,5), (2, 2), (3, 3), 可以发现是按照 char_column_3 排序好了。这时 InnoDB 内部的设计, 将删除的数据的位置标记为删除的, 后续有新的数据新增进来时, 就复用这个位置。]]></description><category></category></item><item><title><![CDATA[【Redis】内存回收和内存淘汰机制]]></title><link>https://blog.csdn.net/LCN29/article/details/139778344</link><guid>https://blog.csdn.net/LCN29/article/details/139778344</guid><author>LCN29</author><pubDate>Tue, 18 Jun 2024 17:20:06 +0800</pubDate><description><![CDATA[存储在 Redis 中的基本都是键值对, 而这种键值对存储, 同时可以通过 key 快速查询到对应的 value, 最合适的实现就是 HashTable 了。而实现 HashTable 的底层结构，基本就是一个数组或者链表, 同时为了解决 hash 冲突, 数组或链表的每个节点定义为一个链表。Redis 中对 HashTable 的实现也是如此, 大体如下Redis 中实现的 HastTable 叫做 dictht (Dictionary Hash Table)// 存放节点的数组。]]></description><category></category></item><item><title><![CDATA[【Java 并发】AbstractQueuedSynchronizer 中的 Condition]]></title><link>https://blog.csdn.net/LCN29/article/details/136733215</link><guid>https://blog.csdn.net/LCN29/article/details/136733215</guid><author>LCN29</author><pubDate>Fri, 15 Mar 2024 10:44:46 +0800</pubDate><description><![CDATA[任何一个 Java 对象都天然继承于 Object 类, 在线程间实现通信的往往会应用到 Object 的几个方法, 比如 wait(), wait(long timeout), wait(long timeout, int nanos) 与 notify(), notifyAll()几个方法实现等待 / 通知机制。同样的, 在 Java Lock 体系下也有同样的方法实现等待/通知机制。从整体上来看。]]></description><category></category></item><item><title><![CDATA[【MySQL】事务]]></title><link>https://blog.csdn.net/LCN29/article/details/136733118</link><guid>https://blog.csdn.net/LCN29/article/details/136733118</guid><author>LCN29</author><pubDate>Fri, 15 Mar 2024 10:42:17 +0800</pubDate><description><![CDATA[事务是数据库管理系统 (DBMS) 执行过程中的一个逻辑单位, 由一个有限的数据库操作序列构成, 这些操作要么都做, 要么都不做, 是一个不可分割的工作单位。事务是数据库最小的工作单元, 是不可以再分的, 可能包含了一个或者一系列的 DML 语句。]]></description><category></category></item><item><title><![CDATA[【MySQL】锁信息]]></title><link>https://blog.csdn.net/LCN29/article/details/136720536</link><guid>https://blog.csdn.net/LCN29/article/details/136720536</guid><author>LCN29</author><pubDate>Thu, 14 Mar 2024 20:06:30 +0800</pubDate><description><![CDATA[MySQL 锁（Lock）是数据库管理系统用于管理并发访问的一种机制。在多用户同时访问数据库的环境下，可能会出现多个事务同时对相同的数据进行读取或写入操作，为了保证数据的一致性和完整性，需要使用锁来控制对数据的访问。在并发环境下，当多个事务试图同时访问相同的数据时，锁可以确保只有一个事务能够成功地获取对数据的访问权限，其他事务需要等待或被阻塞，直到获得相应的锁为止。锁的主要作用是防止多个事务同时对同一数据进行不一致的修改，从而避免数据的丢失、错误或混乱。]]></description><category></category></item><item><title><![CDATA[【Java 并发】AbstractQueuedSynchronizer]]></title><link>https://blog.csdn.net/LCN29/article/details/136720477</link><guid>https://blog.csdn.net/LCN29/article/details/136720477</guid><author>LCN29</author><pubDate>Thu, 14 Mar 2024 20:01:33 +0800</pubDate><description><![CDATA[在同步组件的实现中, AQS 是核心部分, 同步组件的实现者通过使用 AQS 提供的模板方法实现同步组件语义。AQS 则实现了对同步状态的管理, 以及对阻塞线程进行排队, 等待通知等一些底层的实现处理。]]></description><category></category></item><item><title><![CDATA[【Java 并发】Semaphore]]></title><link>https://blog.csdn.net/LCN29/article/details/136633726</link><guid>https://blog.csdn.net/LCN29/article/details/136633726</guid><author>LCN29</author><pubDate>Mon, 11 Mar 2024 20:06:32 +0800</pubDate><description><![CDATA[Java 中 的 Semaphore (信号量) 是多线程编程中一种重要的同步工具, 用于控制对共享资源的访问。通过 Semaphore, 我们可以限制同时访问共享资源的线程数量, 有效地管理并发访问, 确保程序在多线程环境下的稳定性和效率。在一些资源有限制场景下, Semaphore 是特别合适的, 比如流量控制, 数据库连接池等。]]></description><category></category></item><item><title><![CDATA[【Java 并发】AbstractQueuedSynchronizer (AQS) 初识]]></title><link>https://blog.csdn.net/LCN29/article/details/136632578</link><guid>https://blog.csdn.net/LCN29/article/details/136632578</guid><author>LCN29</author><pubDate>Mon, 11 Mar 2024 19:21:26 +0800</pubDate><description><![CDATA[在源码中, 对 AQS 的解释 (可以查看 AbstractQueuedSynchronizer 的类注释)提供了一个框架, 用于实现依赖于先进先出 (FIFO) 的等待队列的阻塞锁和相关的同步器 (例如: 信号量, 事件等)。这个类是被设计用来作为一个有用的基础, 为大部分的依靠一个单独的原子变量来表示状态的同步器。AQS (同步器) 是用来构建锁和其他同步组件的基础框架, 它的实现主要依赖一个int 成员变量来表示同步状态以及通过一个FIFO 队列构成等待队列。]]></description><category></category></item><item><title><![CDATA[【Java JVM】常用参数]]></title><link>https://blog.csdn.net/LCN29/article/details/136512151</link><guid>https://blog.csdn.net/LCN29/article/details/136512151</guid><author>LCN29</author><pubDate>Thu, 07 Mar 2024 10:03:47 +0800</pubDate><description><![CDATA[设置为 4，则两个 Survivor 区与一个 Eden 区的比值为 1:1:4，一个 Survivor 区占整个年轻代的 1/6, -XX:SurvivorRatio=4。-XX:NewRatio: 设置年轻代和年老代的比值 (除去持久代), 设置为 4，则年轻代与年老代所占比值为 1：4，年轻代占整个堆栈的 1/5, -XX:NewRatio=4。-XX:MaxPermSize: 设置持久代大小, JDK8 后废弃了, 通过元空间进行配置, -XX:MaxPermSize=16m。]]></description><category></category></item><item><title><![CDATA[【Java JVM】方法调用]]></title><link>https://blog.csdn.net/LCN29/article/details/136512121</link><guid>https://blog.csdn.net/LCN29/article/details/136512121</guid><author>LCN29</author><pubDate>Thu, 07 Mar 2024 10:03:20 +0800</pubDate><description><![CDATA[方法调用并不等同于方法中的代码被执行, 方法调用阶段唯一的任务就是确定被调用方法的版本 (即调用哪一个方法), 暂时还未涉及方法内部的具体运行过程。Class 文件的编译过程中不包含传统程序语言编译的连接步骤, 一切方法调用在 Class 文件里面存储的都只是符号引用, 而不是方法在实际运行时内存布局中的入口地址 (也就是之前说的直接引用), 这个特性给 Java 带来了更强大的动态扩展能力, 但也使得 Java 方法调用过程变得相对复杂, 某些调用需要在类加。]]></description><category></category></item><item><title><![CDATA[【Java JVM】Class 文件的加载]]></title><link>https://blog.csdn.net/LCN29/article/details/136509545</link><guid>https://blog.csdn.net/LCN29/article/details/136509545</guid><author>LCN29</author><pubDate>Wed, 06 Mar 2024 16:37:05 +0800</pubDate><description><![CDATA[Java 虚拟机把描述类的数据从 Class 文件加载到内存, 并对数据进行校验, 转换解析和初始化, 最终形成可以被虚拟机直接使用的 Java 类型,这个过程被称作虚拟机的。与那些在编译时需要进行连接的语言不同, 在 Java 语言里面, 类的加载, 连接和初始化过程都是在程序运行期间完成的, 这种策略让 Java 语言进行提前编译会面临额外的困难,]]></description><category></category></item><item><title><![CDATA[【Java JVM】Class 文件]]></title><link>https://blog.csdn.net/LCN29/article/details/136509579</link><guid>https://blog.csdn.net/LCN29/article/details/136509579</guid><author>LCN29</author><pubDate>Wed, 06 Mar 2024 16:36:25 +0800</pubDate><description><![CDATA[类或接口的符号引用表 CONSTANT_Class_info 的内容如下。]]></description><category></category></item><item><title><![CDATA[【Java JVM】垃圾回收]]></title><link>https://blog.csdn.net/LCN29/article/details/136486910</link><guid>https://blog.csdn.net/LCN29/article/details/136486910</guid><author>LCN29</author><pubDate>Tue, 05 Mar 2024 20:55:46 +0800</pubDate><description><![CDATA[在 64 位系统中, 理论可以访问的内存搞定 16EB (2 的 64 次幂)。为了实现 “Brooks Pointer”, Shennandoah 在原有的写屏障内加入了额外的转发处理, 还使用了读屏障, 代码里面对象的读取斌率的对对象的写入频率高很多的操作, 大量的读屏障开销会是一个性能问题。(2) 转发指针的作用, 当对象拥有一份新的副本时, 只需要修改一处指针的值, 即旧对象上转发指针的引用位置, 使其执行新的对象, 就可以将所有对该对象的访问转发到新的副本上。]]></description><category></category></item><item><title><![CDATA[【Java JVM】对象回收判断]]></title><link>https://blog.csdn.net/LCN29/article/details/136470003</link><guid>https://blog.csdn.net/LCN29/article/details/136470003</guid><author>LCN29</author><pubDate>Tue, 05 Mar 2024 20:55:02 +0800</pubDate><description><![CDATA[Java 对象回收判断是程序设计中至关重要的一环。在面向对象的编程中, 合理的对象回收策略直接影响着程序的性能和内存利用效率。因此, 深入了解和准确判断 Java 对象的回收时机, 不仅可以优化程序的运行性能, 还能有效避免内存泄漏和资源浪费。本文将简单的分析一下 JVM 中对象回收的判断机制, 了解一下整体的对象回收过程。]]></description><category></category></item></channel></rss>