自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 【JVM】万字总结GC垃圾回收

在程序运行过程中,会不断创建对象来使用内存,当这些对象不再被引用时,其所占用的内存若不及时释放,会导致内存占用不断增加,最终可能引发内存溢出。GC 机制能自动检测并回收这些不再使用的对象所占用的内存。

2025-06-04 02:02:12 1183

原创 【Java】java中的五种对象引用

在java中,对象引用主要分为五种类型:强引用、软引用、弱引用、虚引用、终结期引用。

2025-06-04 01:58:58 295

原创 【JVM】Java程序运行时数据区

运行时数据区是Java程序执行过程中管理的内存区域Java 运行时数据区组成(JVM 内存结构)Java 虚拟机(JVM)的运行时数据区由以下核心部分组成:线程私有:程序计数器、Java虚拟机栈、本地方法栈。线程共享:方法区、堆。程序计数器存储当前执行的字节码指令地址。线程私有:每个线程都有独立的程序计数器。多线程场景下程序计数器的工作流程:Thread1CPUThread2执行指令 [PC=15]时间片用完保存PC值(15)恢复执行 [PC=22]执行指令...时间片用完保存PC值(25)恢复执行 [PC

2025-05-30 00:52:28 1348

原创 【JVM】初识JVM 从字节码文件到类的生命周期

JVM(Java Virtual Machine)即 Java 虚拟机,是 Java 技术的核心组件之一。JVM的本质就是运行在计算机上的一个程序,通过软件模拟实现了一台抽象的计算机的功能。JVM是Java程序的运行环境,负责加载字节码文件,解释并执行字节码文件,同时有着内存管理、垃圾回收等功能。不同系统上的JVM将同一份字节码文件解释为该系统能执行的机器码是Java能一次运行到处编译的关键。

2025-05-29 01:49:12 1225

原创 【Redis原理】四万字总结Redis网络模型的全部概念

当用户进程发起IO请求后,若内核数据未就绪,立即返回错误,用户程序可继续执行其他任务,并通过轮询机制主动检查多个文件描述符的就绪转态。fill:#333;

2025-05-27 08:00:00 1234

原创 深入解析IO模型:从阻塞到多路复用

当用户进程发起IO请求后,若内核数据未就绪,立即返回错误,用户程序可继续执行其他任务,并通过轮询机制主动检查多个文件描述符的就绪转态。fill:#333;

2025-05-27 01:03:43 735

原创 深入解析操作系统内核与用户空间以及内核态与用户态转换

用户空间和内核空间的划分是现代操作系统的基础,对应用程序网络模型的设计和优化有着深远的影响。

2025-05-26 22:25:28 1009

原创 【Redis】数据结构汇总

我们知道Redis是一个键值型(Key-Value Pair)的数据库,我们可以根据键实现快速的增删改查。而键与值的映射关系正是通过Dict来实现的。哈希表(DictHashTable)哈希节点(DictEntry)和字典(Dict)// 哈希表结构// 哈希桶数组(链式存储)// 哈希表大小(桶数量,2^n)// 哈希掩码(size-1,用于计算索引)// 已使用的桶数量(含链表节点)} dictht;// 字典结构// 类型特定函数(如哈希函数、键比较函数)

2025-05-26 02:17:37 2659

原创 【Redis原理篇】五大基本数据类型的底层编码方式

Hash底层采用的编码与Zset基本一致,只需要把排序有关的SkipList去掉即可。元素(member)和分数(score)成对存储,按分数升序排列。修改embstr字符串(因embstr内存不可变)。(按2的次方分配内存)的64B内存块,减少碎片)。:需重分配内存并移动数据,时间复杂度 O(n),**适用范围:**64位整数(**实现:**直接将数据存储在。**适用条件:**字符串大小<:连续内存块存储,无指针开销。

2025-05-26 02:11:03 696

原创 【redis原理篇】底层数据结构

数据类型(typeRedis 支持 5 种基础数据类型,由typeOBJ_STRING:字符串(简单值、计数器、二进制数据)。OBJ_LIST:列表(队列、栈、阻塞队列)。OBJ_HASH:哈希(对象属性存储)。OBJ_SET:集合(唯一性集合、交并差运算)。OBJ_ZSET:有序集合(排行榜、范围查询)。

2025-05-26 00:47:29 1318

原创 【Redis】分布式缓存的一系列问题(持久化,主从集群,哨兵,分片集群)

Redis 持久化是将内存中的数据保存到磁盘,防止服务重启或故障时数据丢失的核心机制。:解决 AOF 文件膨胀问题,生成更紧凑的新 AOF 文件(等效当前数据库状态的最小命令集合)。,通过数据分片、节点自治和高可用机制,实现水平扩展和高并发场景下的高性能服务。Redis 分片集群(Cluster)是 Redis 官方提供的。:客户端首次连接集群时,随机选择一个节点获取完整的槽分布信息((文本格式)实现持久化,重启时重放命令恢复数据。发送缓冲区中的新写命令(同步期间的增量数据)

2025-05-24 16:26:48 1077

原创 【Redis实战篇】基于Redis的功能实现附近商铺查询(Geo),用户签到与统计(Bitmap),网站UV统计(HyperLogLog)

【Redis实战篇】基于Redis的功能实现附近商铺查询(Geo),用户签到与统计(Bitmap),网站UV统计(HyperLogLog)

2025-05-22 00:58:54 750

原创 Java 8 Stream 流操作全解析

通过掌握 Stream 流的常见用法,可以显著提升代码的可读性和开发效率,尤其在处理集合数据时,能够以更简洁的方式实现复杂的数据操作。

2025-05-21 19:16:53 2755

原创 【Redis实战篇】万字总结关于博客发布,点赞,好友关注以及feed流实现内容推送

于博客发布,点赞,好友关注以及feed流实现内容推送等

2025-05-21 01:14:43 619

原创 【Redis实战篇】Redis三种方法实现消息队列优化秒杀优惠券

Redis Stream 是 Redis 5.0 版本引入的新数据结构,主要用于实现消息队列(MQ,Message Queue)。Redis 原本的发布订阅(pub/sub)虽能实现消息队列功能,但存在消息无法持久化的问题,一旦出现网络断开、Redis 宕机等情况,消息就会被丢弃。而 Redis Stream 提供了消息的持久化和主备复制功能,可让任何客户端访问任何时刻的数据,能记住每个客户端的访问位置,还能保证消息不丢失。

2025-05-19 20:37:12 1186

原创 【Redis实战篇】秒杀优惠券优化(基于Lua脚本,阻塞队列,异步线程实现)

static {

2025-05-19 13:53:37 619

原创 【Redis实战】秒杀优惠券优化(Lua脚本,阻塞队列,异步进程)

static {

2025-05-19 00:09:57 1123

原创 【Redis实战篇】集群架构下的超卖问题

数据同步问题是一个复杂而重要的课题。在单 JVM 环境下表现出色,但在集群架构下中会出现线程安全问题。通过引入分布式锁机制,如 Redis 实现的分布式锁,可以有效解决跨节点同步问题,确保系统的一致性和可靠性。在实际应用中,需要根据具体场景选择合适的分布式锁实现方式,并注意锁的过期时间、原子性操作等关键问题。

2025-05-18 01:43:22 961

原创 集群与分布式架构解析:从概念、差异到应用场景的全维度对比

将多个同构化服务器节点组成统一服务池,所有节点运行完全相同的应用程序副本,通过负载均衡机制对外呈现单一服务入口。

2025-05-16 17:42:49 872

原创 实战篇万字总结 | 秒杀优惠卷(全局ID生成器,秒杀超卖问题,乐观锁与悲观锁)

在这个测试方法中,充当了协调主线程和子线程的角色,保证主线程在所有子线程任务执行完成后才继续执行,从而能够精确统计多线程并发执行方法的总耗时。

2025-05-16 03:17:39 1149

原创 Redis实战篇|将解决缓存问题方案封装成工具类

步骤 1:定义缓存策略枚举枚举中每个常量对应一种策略,并通过抽象方法统一执行逻辑。@Override// 参数校验throw new IllegalArgumentException("PASS_THROUGH 策略需设置 time 和 unit");},@Overridethrow new IllegalArgumentException("LOGICAL_EXPIRE 策略需设置 expireTime");

2025-05-15 02:28:27 818

原创 Redis缓存的应用与相关问题(缓存更新策略,缓存穿透,缓存雪崩,缓存穿透)

return Result.fail("店铺不存在");if (json!= null) {return Result.fail("店铺不存在");问题核心区别典型场景核心解决方案缓存穿透数据不存在,恶意攻击查询id=-1的数据布隆过滤器、缓存空值、接口校验缓存击穿单热点数据过期,高并发请求秒杀商品缓存失效互斥锁、逻辑过期、双缓存缓存雪崩大量数据同时失效或服务宕机促销活动后缓存集体过期分散过期时间、多级缓存、集群容灾。

2025-05-14 02:00:01 1318

原创 用HttpSession完成登陆与校验与其产生的问题和解决方案

以上几种方案各有优缺点,实际开发中可根据项目需求、性能要求、安全要求等因素选择合适的解决方案。

2025-05-13 00:46:33 894

原创 Redis 序列化问题分析与解决方案

为避免上述问题,我们需要配置序列化器,而配置序列化器主要有两种方法1. 默认 JDK 序列化的问题问题表现使用未配置的会默认采用,导致存储数据为二进制流(如可读性差:二进制数据无法直观阅读。体积膨胀:包含类元数据,内存占用高。兼容性差:类结构变更或跨 Java 版本易失败。跨语言限制:仅适用于 Java 生态。2. 解决方案:自定义序列化配置通过配置的序列化器,优化存储格式。方案一:GenericJackson2JsonRedisSerializer机制序列化时添加@class字段记录类型信息(如。

2025-05-11 19:33:50 2346

原创 客户端操作redis为什么要使用连接池

在使用Jedis操作Redis数据库时,频繁创建和销毁连接会导致系统性能下降,尤其是在高并发场景下,可能耗尽系统资源。为了解决这一问题,可以通过配置连接池来管理Redis连接。连接池在初始化时创建一定数量的连接,并在需要时分配和回收连接,从而减少连接创建和销毁的开销,提高系统性能和吞吐量。此外,连接池还可以控制连接数量,防止资源耗尽,并提供统一的连接管理和监控接口,便于维护和优化。通过使用连接池,可以显著提升系统的响应速度和稳定性。

2025-05-11 03:40:18 284 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除