- 博客(82)
- 收藏
- 关注
原创 Redis——分布式锁
分布式锁是解决分布式系统资源竞争的关键技术。本文分析了分布式锁的必要性(跨JVM互斥)和三大核心原则:原子性加锁(SET NX EX命令)、自动过期防死锁、唯一标识防误删。针对误删问题,提出使用Lua脚本保证判断和删除的原子性。在Redis集群环境下,讨论了主从切换导致的脑裂问题,建议采用Redlock算法或Zookeeper等强一致性方案。文章强调理解架构思想比代码实现更重要,为分布式锁应用提供了系统性的设计思路。
2026-02-15 18:41:50
821
原创 Redis——缓存【缓存穿透、缓存雪崩、缓存击穿】
Redis作为高性能缓存中间件,在提升系统性能的同时也面临三大经典问题:缓存穿透(查询不存在数据)、缓存击穿(热点Key过期)和缓存雪崩(大量缓存集体失效)。文章分析了每种问题的现象和危害,并给出针对性解决方案:布隆过滤器和空值缓存应对穿透,互斥锁和逻辑过期解决击穿,随机过期时间和高可用架构预防雪崩。同时介绍了Redis在页面缓存、会话存储、计数器和分布式锁等场景的应用价值。文章强调良好的缓存架构设计对保障系统稳定性的重要性。
2026-02-14 16:40:22
755
原创 Redis——集群
Redis集群通过数据分片和哈希槽机制实现横向扩展,突破单机容量和性能限制。集群支持弹性扩容缩容,通过哈希槽迁移实现平滑调整。采用Gossip协议通信和自动故障转移保障高可用,同时设置多数派原则防止脑裂。运维需关注集群状态、节点角色、内存使用等关键指标,合理配置参数如cluster-node-timeout和maxmemory。Redis集群实现了分布式存储、负载均衡和高可用性,是解决单机Redis瓶颈的有效方案。
2026-02-14 16:25:37
1113
原创 Redis——哨兵机制
Redis哨兵机制是实现高可用的关键组件,它通过持续监控主节点状态、严谨的故障判断和自动故障转移来保障服务连续性。单个哨兵通过心跳检测和信息更新监控主从节点,当主节点故障时,经过主观/客观下线判断后执行切换,依据优先级、数据新鲜度等标准选举新主节点。哨兵集群通过冗余部署解决单点问题,采用Raft算法选举Leader进行故障转移。配置参数需权衡灵敏度和稳定性,合理设置超时时间。虽然哨兵机制解决了高可用问题,但数据扩展仍需依赖Redis Cluster的分片能力。
2026-02-14 11:05:03
1276
原创 Redis——主从复制
Redis主从复制摘要(149字) Redis主从复制通过读写分离解决单点故障和性能瓶颈问题。主节点(Master)处理写请求,从节点(Slave)处理读请求,实现负载均衡。核心机制包括:1)全量复制-首次同步时传输完整RDB快照;2)增量复制-网络恢复后通过复制积压缓冲区补发差异数据。关键配置参数为repl-backlog-size,建议高写入场景调大该值。复制过程异步执行,从节点可能存在毫秒级延迟。该架构兼具数据冗余、故障恢复和性能扩展三大优势,是Redis高可用方案的基础。
2026-02-12 10:45:29
942
原创 Redis事务
Redis事务机制解析 Redis事务通过MULTI、EXEC、WATCH等命令实现"伪原子性"操作。与关系型数据库不同,Redis事务不支持回滚机制,而是通过WATCH监控关键键值,在数据被修改时直接放弃事务。事务执行过程中即使某条命令失败,已执行的命令也不会撤销。这种设计基于Redis追求简单高效的哲学,通过放弃而非回滚来保证一致性。相比Lua脚本,Redis事务更适合简单固定的命令序列,而复杂逻辑则建议使用Lua脚本实现。事务机制体现了Redis在性能与功能间的平衡取舍。
2026-02-12 10:12:05
669
原创 Redis核心原理底层机制——持久化【RDB与AOF】
于是你学到了有一种内存数据库叫Redis,Redis则把数据存到内存里,当新数据数据库里没有的时候,他会把新数据保存并给MySQL写入,当遇到数据库里有的数据,他会保存到内存里,下次再读这个数据直接从内存读就好了,这样的话大批数据想要读数据就都要经过Redis中间层~:我们都知道Redis最大的特点是单线程,那他拍摄快照的时候,后面过来要读数据等一些列的请求就不管了,那岂不是把Redis最受欢迎的特点‘快’给干掉了,这不纯纯自杀行为么,所以这个时候我们有了下面所说的BGSAVE。(说白了就是定期备份)
2026-02-12 08:59:43
1041
原创 JAVA进阶之路——无奖问答挑战4
Java问答摘要 Lock与synchronized区别: Lock是接口,synchronized是关键字 Lock需手动释放,synchronized自动释放 Lock支持公平锁、非阻塞获取锁(tryLock) synchronized有锁升级机制,性能相近 多态实现: 运行时多态:继承+方法重写+向上转型 动态绑定:JVM根据实际对象类型调用方法 编译时多态:方法重载(参数列表不同) 优势:解耦、扩展性强,遵循开闭原则
2026-02-09 22:50:03
946
原创 JAVA进阶之路——锁大全【并发世界的秩序守护者】
锁是并发编程中的核心同步机制,用于协调多线程对共享资源的访问。主要类型包括:互斥锁通过系统调用实现线程阻塞,适合长临界区;自旋锁采用忙等待策略,避免上下文切换开销,适用于短临界区;读写锁分离读/写操作,优化读多写少场景;可重入锁支持同一线程多次获取,解决嵌套调用问题;乐观锁基于版本号或CAS实现无锁并发,而悲观锁则直接加锁保护数据。不同锁类型在性能、适用场景和实现复杂度上各有特点,需要根据具体业务场景选择最合适的同步方案。
2026-02-08 20:04:44
789
原创 JAVA进阶之路——无奖问答挑战3
本文摘要:JUC包提供原子类、锁、并发容器等线程安全工具;synchronized是悲观、可重入的互斥锁;线程安全问题源于原子性、可见性和有序性;IP协议负责网络寻址和路由;MySQL索引采用B+树结构,支持高效查询和范围查找。这些知识点覆盖了Java并发编程、网络协议和数据库索引的核心概念。
2026-02-08 19:31:08
942
原创 JAVA进阶之路——数据结构之线性表(顺序表、链表)
本文介绍了线性表的基本概念及其两种实现方式。首先阐述了线性表的逻辑结构特点:有序、唯一表头表尾、元素间严格的前驱后继关系。然后详细说明了线性表的抽象数据类型(ADT)定义,包括构造销毁、状态查询和增删操作。重点对比了顺序表(数组实现)和链表(链式存储)两种实现方式:顺序表支持O(1)随机访问但插入删除效率低,链表插入删除高效但访问需遍历。最后给出了Java实现的代码示例,包括顺序表的随机访问和动态扩容,以及链表的基本操作实现。文章通过比喻和代码示例帮助读者理解数据结构的基础概念。
2026-02-07 23:02:25
1226
原创 JAVA进阶之路——无奖问答挑战2
本文介绍了Java线程池的相关知识,包括使用线程池的优势(降低资源消耗、提高响应速度、增强可管理性),线程池的核心组成(线程池管理器、工作线程、任务队列),以及关键参数说明(如核心线程数、最大线程数等)。详细讲解了线程池的工作流程,从任务分配到队列处理再到拒绝策略。最后对比了HTTP与HTTPS在安全性、端口、协议基础等方面的差异,突出了HTTPS的加密特性和SEO优势。文章采用问答形式,结合表格清晰呈现技术要点。
2026-02-07 21:47:34
430
原创 MySQL进阶之战——索引、事务与锁、高可用架构的三重奏
在关系型数据库(如MySQL的InnoDB引擎)中,最主流的索引结构是B+树。为什么不是二叉树、红黑树,也不是哈希表?这需要结合磁盘I/O的特性来理解。磁盘 I/O 的瓶颈在关系型数据库(如 MySQL)中,数据最终存储在硬盘上,而硬盘的读取速度相对于内存来说要慢很多。磁盘读取的最小单位是“页”(通常是 16KB)。由于磁盘的读写速度相对较慢,因此每次读取磁盘都需要尽可能减少访问次数。如果查询过程中访问磁盘次数过多,性能就会大大下降。B+ 树作为一种平衡查找树,正是为了优化磁盘访问而设计的。
2026-02-06 21:33:26
1625
原创 JAVA进阶之路——无奖问答挑战1
本文汇总了Java编程中的五个核心问题解析:1)面向过程与面向对象的本质区别在于执行者思维与指挥者思维;2)IOC通过控制反转实现解耦,依赖注入是其具体实现方式;3)synchronized与ReentrantLock在实现机制、功能特性和使用场景上的差异;4)CAS乐观锁的工作原理及其在并发编程中的应用与局限;5)泛型与基本类型在概念本质、使用限制及性能方面的区别。这些问题涵盖了Java编程中对象导向、并发控制、类型系统等关键知识点,对提升Java开发能力具有重要指导意义。
2026-02-06 19:20:10
716
原创 Java入门17——异常
使用throwthrow new RuntimeException("年龄不能为负数");精准分类:区分业务场景(如“年龄非法”与“用户名重复”)。信息扩展:支持附加错误码、字段名等上下文。统一处理:便于集中拦截特定业务异常。1. 定义异常类选择继承Exception(受检异常)或// 非受检异常示例super();2. 使用自定义异常throw new AgeException("年龄值非法: " + age);
2026-02-05 22:36:45
421
1
原创 深入底层理解HashMap——妙哉妙哉的结构!!
HashMap是Java集合框架中基于哈希表实现的键值对存储结构,具有O(1)平均时间复杂度的快速查询特性。其核心采用"数组+链表/红黑树"的复合结构:数组作为哈希桶,通过哈希值定位元素位置;哈希冲突时使用链表存储,当链表长度超过8且数组容量≥64时转为红黑树优化性能。关键操作包括:put时计算哈希值、处理冲突及可能的树化;get时快速定位并精确匹配。默认负载因子0.75触发扩容,但多线程环境下存在数据覆盖和JDK1.7死循环问题,因此并发场景建议使用ConcurrentHashMap。
2026-02-05 20:36:16
1008
2
原创 Redis入门--基础语法大全
Redis支持多种核心数据结构及操作命令:通用命令(exists/del/expire等)用于键管理;String类型(set/get/incr)适合简单键值存储;Hash(hset/hget/hmset)适合存储对象;List(lpush/rpush/lrange)实现消息队列;Set(sadd/smembers/sismember)用于去重;ZSet(zadd/zrange/zscore)支持排序功能如排行榜。掌握这些基础语法是高效使用Redis的关键。
2026-02-04 20:56:57
829
原创 JAVA进阶之路——网络通信的层级密码:Socket切入,理解TCP与HTTP协议
本文系统介绍了网络通信的分层架构与核心机制。首先阐述了协议的重要性,指出OSI七层模型作为理论框架如何将复杂网络通信分解为7个层次。重点分析了三个关键层级:Socket作为程序与网络的接口层,提供标准化的通信API;TCP作为传输层的可靠传输协议,通过三次握手、流量控制等机制确保数据有序传输;HTTP作为应用层协议,定义了客户端与服务器的交互规范。最后以网页访问为例,完整展示了从DNS解析到TCP连接建立再到HTTP请求响应的全流程。文章采用寄信、快递等生活化比喻,帮助读者理解网络通信的分层协作原理。
2026-02-04 20:56:02
1389
2
原创 Redis入门--从分布式系统到单线程模型的基础解析
Redis是一款高性能键值数据库,在分布式系统中扮演重要角色。其核心特性包括内存存储实现毫秒级响应、丰富的数据结构支持以及单线程高并发处理能力。Redis广泛应用于缓存加速、分布式会话管理和任务队列等场景。通过简单的命令如SET/GET即可实现键值操作,支持字符串、哈希、列表等多种数据结构。Redis的单线程模型通过内存操作、非阻塞IO和高效数据结构实现卓越性能。掌握Redis基础语法和原理是构建高可用分布式系统的关键技能。
2026-02-03 16:56:27
886
原创 Java进阶之路--线程最最详细讲解
本文介绍了Java中线程与进程的核心概念及实现方法。进程是资源分配的基本单位,拥有独立内存空间;线程是CPU调度的基本单位,共享进程资源但拥有独立执行栈。通过代码示例展示了进程创建(Runtime.exec)和线程的两种创建方式(继承Thread类与实现Runnable接口),并详细解析了线程的生命周期状态。针对多线程同步问题,讲解了竞态条件和数据不一致性的成因,提出通过synchronized关键字和ReentrantLock实现线程同步,确保操作的原子性和可见性。
2026-02-03 16:33:12
1332
1
原创 解决xshell连接不到虚拟机的问题(ping请求超时)
本文介绍了解决虚拟机ping请求超时问题的方法。首先检查虚拟机IP与VMnet子网地址是否一致,可通过虚拟网络编辑器调整网络模式(桥接/NAT/仅主机)和子网IP。然后为各节点单独设置连接方式,在Windows终端测试ping通后,配置hosts文件添加IP映射。最后使用Xshell通过映射的主机名连接运行中的虚拟机。关键点包括确保网络配置一致、正确设置IP映射以及保持虚拟机运行状态。
2025-12-26 14:55:51
466
原创 Web前端开发——CSS入门
其中,body 是选择器,background-color 和 font-family 是属性,#f0f0f0 和 Arial, sans-serif 是值。CSS(Cascading Style Sheets)是一种和html差不多的语言,但是它的使用让页面能更优美一点。它与HTML配合使用,HTML负责网页的布局,而CSS负责美化网页。将CSS代码写在一个单独的 .css 文件中,然后通过标签引入HTML。这种方式是推荐的,因为它可以让HTML和CSS代码分离,便于维护和复用。使用井号 # 开头。
2025-03-16 19:21:04
733
原创 MySQL单表查询大全【SELECT】
在MySQL语句中,最重要的莫过于查询了,也就是select的用法,前一篇博客我们只是给大家大概一个思路去学数据库,由库到表再到表中的数据,今天我们说的就是单表查询表中数据,之后再给大家更新多表的联合查询等知识在此之前为了方便大家可以一起练习,我们先来创建一些数据,以便大家可以知道我们查的是什么,在哪查的除此之外,还有一些知识,来让我们认识到更全面的查询,大家按照顺序观看即可。
2025-03-16 19:06:24
1034
1
原创 MySQL语法总结
本篇博客说明:!!!.注意此系列都用的是MySQL语句,和SQLServer,PostgreSQL有些细节上的差别!!!1.每个操作都是先展示出语法格式2.然后是具体例子3.本篇注脚与文本顺讯息息相关或许会解答你的一些疑问4.本文例子使用也是连续的,如果前面建立库没有删除就一直在,删除则之后也没有这个库!!放心食用!!!
2025-03-08 21:36:46
1548
1
原创 Web前端开发——HTML基础下
运行之后我们发现连个表格边框都没有,那还能叫做表格吗,所以我们得加一下边框,也就是在table标记里加入 width 表格像素以及 border 边框的像素。有了边框之后,我们就可以进一步了解表格的基本框架了,表格有表头,表格主体和表尾,还有表格标题,我们来具体使用演示一下。input 是最常用的表单元素,用于创建各种类型的输入字段。它支持多种类型,如文本、密码、电子邮件、数字等。label 元素为表单控件提供了语义化的标签,使得表单内容更加清晰易懂。我们先来看一下第一个示例。
2025-03-08 21:36:17
1671
原创 Web前端开发——HTML基础
1HTML是超文本标记语言,用于构建网页结构,由Tim Berners-Lee在1990年创建。HTML5为最新版本通俗易懂一点。
2025-02-24 20:25:20
1222
原创 Java图书管理系统(简易&保姆级)
那么书架我们也写好了,在串联用户和书架时,我们突然想到有这么一个步骤,用户选择了菜单中一项内容,然后我门要对书架进行增删查改,这个时候,我们就通过菜单的功能串联起来了,前面我们讲到菜单的返回是一个整数,那么我们要针对选择的整数,进行一个功能上的选择,那么我们应该怎么做呢?那用户方面我们大体写出来了,接下来我们该考虑图书了,首先,我们需要建立一个书架,上面放着书,一本书有作者,价格,书名,类型,有没有被借走这几种状态,那么我们就可以先建立一个包~答案就是,把这些功能,放到 一个数组里面!
2024-11-26 20:32:36
1967
1
原创 Java入门15——抽象类
在前面我们学习了继承,我们知道了父类是子类共有的属性,而且子类重写了父类的方法,父类里的方法就不会被具体的使用了,为了防止你不小心调用了父类里被子类重写方法的调用,我们可以用 抽象类 加一层防护~首先有个父类是Animal1类,其次有个子类为 Dog2 类,抽象方法具体体现在 eat 这里,抽象类注意看父类~这里我们重写了 Animal1 类里面 eat 的方法,这是因为抽象方法必须重写!注意看我们在父类这里加了 abstract ,此时Animal1 为抽象类方法~下篇博客我们来学习接口,敬请期待——
2024-11-07 22:57:39
398
原创 Java入门11——关键字总结+static
一、关键字总结我们学习了public,private我们今天先来做个小结~那么什么是包呢?例如,团队 A 开发了一个名为Utils的工具类,放在com.teamA.utils包中;团队 B 也开发了一个同样叫Utils的工具类,但放在com.teamB.utils包中。当在一个项目中同时使用这两个工具类时,就可以通过包名来区分它们,如com.teamA.utils.Utils和com.teamB.utils.Utils在包底下,我们可以写好几个类文件,关于子类和父类,我们后续要学继承关
2024-11-03 22:34:09
389
原创 Java入门10——封装(private)
这个其实是因为当我们在写一个类的时候,这个类里面的东西你不想让人修改,这个时候,就提到了封装这个属性。我们以Dog1,Dog2两个类举例,第一遍用public,第二遍用private。我们发现,这里就报错了,那么我们怎么如果就是想引用怎么办呢?很简单,这个时候我们就想到了 set 和 get 方法。今天的内容就到这里啦,很简单的一个小知识点~今天我们要学习封装~2.通过关键字private实现封装。我们就又可以给狗命名和定义年龄了~自己下来要敲一下代码哦~~~话不多说,开始今天的正题~
2024-11-03 22:34:00
684
原创 Java入门8——二维数组
首先二维数组,也很好理解,就是把几个一维数组拼在一起了,我们用代码来熟悉一下~从下次开始就要开始学习类和对象了,冲冲冲!这里以三行五列int类型的二维数组为例~这就是二维数组的内容啦,数组收尾完毕~下篇博客就要开启类和对象啦~~~今天的内容算是数组的收尾~~然后内存图,可以这样理解~
2024-11-01 17:22:35
268
原创 Java入门7——一维数组练习题
在Java中,已经给定好了一个函数功能专门用来查找,就是 : Arrays.binarySearch(数组,查找的数字),让我们用代码实现一下~思路:就是让数组的中间数和要查找的数字作比较,然后一左一右作为查找的范围,然后根据大小调整左边界作为中间数还是右边的数字作为边界,这里给大家一个例子,作为参考~【eg】假设给定一个排好顺序的数组array,然后要输入你要查找的数字,这个时候你要用二分查找的思想实现这个功能。Arrays.binarySearch(开始找的位置,结束找的位置,查找的数字);
2024-11-01 15:25:38
529
C语言 猜数字游戏关机版本 闲暇时的小游戏 真实关机!!!
2024-04-15
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅