- 博客(12)
- 收藏
- 关注
原创 基于redis的分布式锁的实现思路
去Redis里设置一个Key(lock:xxx因为Redis是单线程的,所以只有一个客户端能设置成功。设置时一定要带过期时间。设置Key的时候,它的Value必须是一个唯一标识(比如UUID+线程ID,故事里的“名字”),用来避免误删。不能直接删除Key,要先检查Value是否匹配,匹配上再删除。而且这个“检查+删除”动作必须是一个原子操作。所以,基于Redis的分布式锁,本质就是利用Redis单线程和原子操作的特性,来模拟一个“只有一把的钥匙”
2025-09-09 00:30:00
663
原创 Markdown编辑器的快速使用
本文介绍了Markdown编辑器的基本功能和使用指南。主要内容包括:1)Markdown编辑器的欢迎界面和新增功能;2)常用快捷键汇总;3)文本样式设置方法;4)链接与图片插入技巧;5)代码片高亮和列表创建;6)表格制作方法;7)数学公式、甘特图、UML图表等高级功能;8)文章的导出与导入操作。文章详细说明了各类Markdown语法,帮助用户快速掌握编辑器使用方法,提升写作效率。
2025-09-09 00:15:00
620
原创 Redisson可重入锁原理-举个通俗的栗子
Redisson可重入锁通过智能的"钥匙管理"机制解决了嵌套加锁问题。它采用Redis的Hash结构记录锁信息,包含线程标识和重入次数。当同一线程重复获取锁时,只需增加计数器而非重新竞争;释放锁时递减计数器,归零时才真正释放。这种设计允许线程安全地多次获取同一把锁,避免了死锁风险。所有操作通过Lua脚本原子执行,确保线程安全,完美支持方法嵌套调用场景。
2025-09-08 18:12:11
508
原创 分布式锁“误删”的问题以及解决办法
分布式锁误删的根本原因是锁自动释放后,原持有者仍可能误删新持有者的锁。解决方案是:1.加锁时存入唯一客户端标识(如UUID+线程ID);2.释放时通过原子操作(Lua脚本)先验证标识再删除。关键点在于确保"谁加的锁谁才能释放",同时建议设置合理的锁过期时间或使用看门狗机制自动续期。这种方法能有效防止误删,保证分布式锁的安全性。
2025-09-08 15:50:02
317
原创 悲观锁和乐观锁的通俗解释
悲观锁和乐观锁是两种处理共享资源并发访问的策略。悲观锁假设冲突必然发生,操作前先加锁(如文档标记"编辑中"),确保独占访问,但会降低效率。乐观锁假设冲突较少,允许多用户同时修改,提交时检查版本号,若冲突则提示重试,适合读多写少场景,但高并发时重试率高。技术实现上,悲观锁类似数据库的SELECT FOR UPDATE,乐观锁通过版本号机制实现。两者区别类似于"先抢后干"和"干了再说"的不同处理方式。
2025-09-08 00:15:00
825
原创 雪花算法介绍-小白也能看懂!
雪花算法是一种分布式ID生成方案,通过组合时间戳、机器ID和序列号来保证ID的唯一性。它将64位ID分为四部分:1位符号位、41位毫秒级时间戳、10位机器ID和12位序列号。这种设计既避免了中心化服务的性能瓶颈,又确保了ID的趋势递增特性,非常适合高并发场景。算法名称源于其ID组合方式像雪花一样几乎不会重复,被广泛应用于各大互联网公司的分布式系统中。
2025-09-07 12:00:00
386
原创 缓存淘汰策略
缓存淘汰算法是决定缓存空间不足时移除哪些数据的策略。常见算法包括:FIFO(先进先出)简单但效率低;LFU(最少使用)保护热门数据但维护开销大;LRU(最近最少使用)性能好但可能污染缓存;LRU-K通过记录多次访问时间优化LRU;MRU(最近最常使用)适用于特定场景;随机替换实现简单但不稳定。高级算法如LFRU结合LFU和LRU优点但实现复杂。实际应用中,LRU及其变种因平衡实现难度与效果而成为主流。
2025-09-07 01:55:00
882
原创 如何理解缓存中逻辑过期时间-通俗介绍
文章摘要:逻辑过期时间是一种人为设定的业务规则时间点,不同于物理过期时间指向物品实际变质。以超市牛奶为例,商家设定"保质期前3天打折"就是逻辑过期时间。在技术领域(如缓存系统),逻辑过期时间能有效平衡性能与数据更新需求:1)设定缓存有效期(如1分钟);2)过期前直接返回缓存数据保证速度;3)过期后异步更新数据同时仍可返回旧缓存,避免数据库过载。其核心价值在于通过"闹钟机制"实现高性能服务和系统保护。
2025-09-06 15:41:20
544
原创 黑马点评店铺类型实现缓存解决办法
摘要:代码重构实现了从Redis缓存查询商铺类型数据,优化了查询性能。当缓存命中时,直接返回缓存的JSON数据;未命中时查询数据库并将结果写入Redis,设置30分钟过期时间。优化后查询时间从1.9秒降至32毫秒,提升近60倍。同时处理了缓存穿透问题,采用空结果缓存策略,并规范返回空集合而非null值。整个流程包括缓存查询、数据转换、数据库查询、结果缓存和过期时间设置等步骤,有效提升了系统响应速度。
2025-09-05 15:21:50
1136
原创 实现登录校验拦截器
【摘要】本文介绍了在SpringBoot中实现登录校验拦截器的步骤:1)理解拦截器原理,通过preHandle方法校验会话中的用户标识;2)创建实现HandlerInterceptor接口的拦截器类,编写登录校验逻辑;3)配置拦截器注册类,指定拦截路径和排除路径;4)测试验证拦截效果。该方法可有效保护受控资源,同时建议结合SpringSecurity进行更完善的认证管理,并注意会话超时处理等安全细节。
2025-09-04 18:19:50
368
原创 黑马点评-项目启动失败解决方案
本文介绍了Java项目配置调整的步骤:1)推荐使用JDK11版本;2)更新MySQL驱动至8.0.28稳定版;3)正确配置yaml文件的数据库和Redis参数;4)通过8081端口验证数据获取;5)使用startnginx.exe启动Nginx;6)切换浏览器到手机模式测试;7)通过8080端口验证项目成功启动。这些操作确保了项目在本地环境的正常运行。
2025-09-04 16:23:17
136
原创 动漫角色生成赛:技术与创意巅峰对决
动漫角色生成赛的核心技术依托于生成对抗网络(GAN)和扩散模型(Diffusion Models),通过大规模动漫数据集训练模型学习风格特征。比赛通常聚焦于生成多样性、风格一致性、细节精细度等指标,参赛者需优化模型架构或训练策略。
2025-09-04 16:03:28
179
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人