自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据库有1000万数据,Redis只能缓存20w数据。如何保证Redis中的数据都是热点数据?

Redis的allkeys-lru策略采用近似LRU算法管理内存,通过采样键的最近访问时间淘汰冷数据。它在键元数据中记录LRUclock时间戳,当内存不足时随机采样若干键(默认5个),淘汰最久未访问的键。这种实现平衡了性能与准确性,通过多次采样循环逐步释放内存,优化缓存命中率。

2025-11-24 20:27:21 70

原创 Redis的数据淘汰策略有哪些?

redis中提供了很多种,默认是noeviction,不删除任何数据,内部不足时直接报错。这个可以在redis的配置文件中进行设置。里面有两个非常重要的概念:一个是LRU,另外一个是LFU。LRU的意思就是最少最近使用。它会用当前时间减去最后一次访问时间。这个值越大,则淘汰优先级越高。LFU的意思是最少频率使用。它会统计每个key的访问频率。值越小,淘汰优先级越高。我们在项目中设置的是allkeys-lru,它会挑选最近最少使用的数据进行淘汰,把一些经常访问的key留在redis中。

2025-11-23 22:46:57 426

原创 Redis的数据过期策略有哪些?

Redis采用惰性删除和定期删除两种策略管理过期数据。惰性删除在访问key时检查并删除过期项;定期删除则定时扫描清理过期key,包含SLOW模式(默认10Hz,单次≤25ms)和FAST模式(间隔≥2ms,单次≤1ms)两种执行方式。这两种策略协同工作,共同维护Redis的高效数据管理。

2025-11-22 08:38:58 227

原创 Redis做为缓存,数据的持久化是怎么做的?

Redis提供RDB和AOF两种持久化方式。RDB通过快照将内存数据写入磁盘,恢复速度快但可能丢失数据;AOF记录所有写命令,恢复时重放命令,速度较慢但数据更安全。实际项目中通常结合使用两种方式,其中AOF可配置刷盘策略(如每秒批量写入),在数据安全性和性能之间取得平衡。

2025-11-21 21:12:49 401

原创 Redis做为缓存,MySql的数据如何与redis进行同步呢?(双写一致性)

本文介绍了一种基于阿里Canal组件的数据同步方案。该方案通过Canal服务伪装成MySQL从节点,实时读取binlog日志实现数据同步,具有不影响业务代码、部署简单的特点。同步过程允许一定延时,能满足大多数业务需求。Canal客户端获取数据后即可更新缓存,实现了高效的数据库与缓存同步机制。

2025-11-20 15:18:44 66

原创 你听说过延时双删吗?为什么不用它呢?

本文简要介绍了延迟双删策略的实现方式:先在缓存中删除数据,再更新数据库,最后延时删除缓存数据。作者指出该策略存在两个主要问题:一是难以确定合适的延时时间,二是在延时过程中可能出现脏数据,无法保证强一致性。由于这些缺陷,最终没有采用此方案。

2025-11-19 08:44:40 325

原创 排他锁是如何保证读写、读读互斥的呢?

排他锁(X锁)是数据库并发控制的核心机制,采用SETNX实现互斥访问。其核心作用在于保证写操作的独占性:同一时刻仅允许一个事务进行写操作,同时禁止其他读写操作,从而确保数据一致性。排他锁通过"写-写互斥"和"写-读互斥"机制防止并发写入冲突和读写冲突,但不直接处理读操作间的互斥。这种设计既保证了数据写入的原子性,又通过与其他锁机制配合实现高效并发控制。

2025-11-18 10:48:14 151

原创 redis做为缓存,mysql的数据如何与redis进行同步呢?(双写一致性)

本项目采用Redisson实现的读写锁机制确保数据库与Redis的高度一致性。在读操作时使用共享锁,支持并发读取但阻塞写入;在写操作时使用排他锁,完全互斥以确保数据一致性。关键点在于读写方法必须使用同一把锁对象,通过这种机制有效避免脏读问题,满足了系统对数据时效性的高要求。该方案实现了读读不互斥、读写互斥的强一致性保证,适用于需要实时同步的业务场景。

2025-11-17 09:22:11 120

原创 什么是缓存雪崩?怎么解决?

缓存雪崩是指大量缓存同时失效导致数据库瞬时压力过大,区别于单key失效的缓存击穿问题。解决方案主要是通过为缓存失效时间添加随机值(如1-5分钟),分散缓存过期时间,避免集体失效现象发生。这种方法能有效降低数据库瞬时负载压力。

2025-11-16 09:15:34 525

原创 什么是缓存击穿?怎么解决

缓存击穿是指过期key遭遇高并发请求,导致DB瞬间过载。解决方案:1)互斥锁方案,通过SETNX锁定后加载数据,确保强一致性但性能较低;2)逻辑过期方案,异步更新过期数据,保持高可用性但牺牲强一致性。前者适合强一致场景,后者适合高性能需求。两种方案需根据业务一致性要求权衡选择。

2025-11-15 18:32:44 188

原创 你能介绍一下布隆过滤器吗?

布隆过滤器通过哈希函数将元素映射到位数组中来快速判断元素是否存在。它使用多个哈希函数减少冲突,允许少量误判(一般控制在5%以内),但能显著降低数据库查询压力。该结构初始化全0数组,插入时修改对应位为1,查询时检查相关位状态。虽然存在误判可能,但通过调整数组大小可平衡空间效率和准确率,特别适合高并发场景下的快速元素检测。

2025-11-14 09:24:03 640

原创 什么是缓存穿透?怎么解决?

缓存穿透是指查询不存在数据时,请求直接落到数据库层,可能导致数据库过载。这种问题常由恶意攻击引发。常见解决方案是使用布隆过滤器预先校验数据存在性,有效阻挡非法查询对数据库的冲击

2025-11-13 08:51:33 71

原创 《黑马点评》10-UV统计_完整代码【简单易懂注释版】

本文展示了使用Redis的HyperLogLog数据结构进行UV统计的方法。通过HmDianPingApplicationTests.java中的测试代码,模拟处理100万条用户数据(user_0到user_999999),以1000条为单位分批存入Redis。最终调用size()方法统计独立用户数,验证HyperLogLog在百万级数据下的统计能力。该方法以极小内存开销实现了高精度去重计数,适合海量数据的UV统计场景。

2025-11-12 23:14:28 188

原创 《黑马点评》09-用户签到_完整代码【简单易懂注释版】

本文介绍了用户签到功能的后端实现,包含两个主要模块:签到功能和签到统计。在UserController、IUserService和UserServiceImpl三个文件中,分别实现了用户签到接口和连续签到统计功能。签到功能通过Redis的位图存储签到记录,使用SETBIT命令记录当月签到情况;签到统计则通过BITFIELD命令获取签到数据,使用位运算统计连续签到天数。系统采用用户ID和年月作为键名,实现了按月记录和查询的功能,返回Result对象封装操作结果。

2025-11-11 08:48:49 148

原创 《黑马点评》08-附近商铺_完整代码【简单易懂注释版】

本文介绍了实现附近商铺功能的技术方案,主要包括两部分内容:1. 使用Redis GEO模块导入店铺数据,通过类型ID分组后将店铺经纬度信息批量存入Redis;2. 实现附近商户查询功能,通过坐标参数判断是否进行距离查询,利用Redis的GEOSEARCH命令获取指定范围内的店铺,并实现分页处理和距离计算。方案包含依赖配置、控制器实现、服务层逻辑以及数据解析等完整实现细节。

2025-11-10 09:39:21 260

原创 《黑马点评》07-好友关注_完整代码【简单易懂注释版】

本文介绍社交平台好友关注功能的实现方案,包含三大核心模块:一是关注/取关功能,由FollowController处理请求,FollowService操作数据库并同步Redis关注集合;二是共同关注功能,利用Redis Set存储关注关系,通过集合交集计算共同好友;三是动态推送与分页查询,用户发博时系统将内容推送到粉丝的Redis收件箱(ZSet结构),并提供基于时间戳的滚动分页接口。系统基于SpringBoot+MyBatisPlus构建,借助Redis高效管理社交关系与内容分发。

2025-11-08 09:14:11 366

原创 《黑马点评》06-达人探店_完整代码【简单易懂注释版】

文章详细介绍了达人探店系统的核心功能实现,主要包括: 图片上传功能,通过MultipartFile处理文件上传并存储到指定路径 探店笔记功能,包括笔记详情查询及相关用户信息处理 点赞功能实现,使用Redis的有序集合(zset)存储点赞信息 热门笔记查询,按点赞数降序排列展示 点赞排行榜功能,展示点赞用户列表 系统采用了Spring Boot框架,结合Redis缓存提升性能,实现了完整的探店笔记发布、查看、点赞及排行榜功能。

2025-11-07 08:46:34 508

原创 《黑马点评》05-秒杀优化_完整代码【简单易懂注释版】

本文介绍了三种秒杀系统优化方案:1)基于阻塞队列实现异步下单,通过Lua脚本进行库存判断和订单创建;2)基于JDK阻塞队列优化,使用单线程处理订单任务;3)基于Redis Stream消息队列的方案,通过消费者组处理订单并支持消息确认机制。每种方案都详细展示了核心代码实现,包括Lua脚本、订单处理逻辑和消息队列消费过程。重点解决了高并发下的库存超卖、重复下单等问题,并采用分布式锁保证线程安全。文章对比了不同方案的优缺点,最终推荐使用Redis Stream消息队列实现更可靠的异步秒杀系统。

2025-11-06 11:11:51 374

原创 《黑马点评》04-分布式锁_完整代码【简单易懂注释版】

本文介绍基于Redis的分布式锁实现及优化方案。定义ILock接口和SimpleRedisLock实现类,通过setIfAbsent实现基础锁。针对误删问题,引入线程标识(UUID+线程ID)验证归属。为保证多命令原子性,用Lua脚本安全释放锁。最后集成Redisson,配置RedissonClient和RLock,强调其看门狗自动续期优势。方案逐步优化,从基础实现到解决线程安全、原子性问题,最终采用Redisson提供成熟方案。

2025-11-05 09:33:09 819

原创 《黑马点评》03-优惠券秒杀_完整代码【简单易懂注释版】

本文实现了一个Redis全局唯一ID生成器,并应用于优惠券秒杀系统。通过时间戳+序列号的方式生成分布式ID,同时实现了秒杀下单功能,包括:1)使用乐观锁解决超卖问题(got条件判断库存);2)采用悲观锁(synchronized)和AOP代理确保一人一单;3)包含完整的业务逻辑验证(库存检查、时间校验等)。测试环节使用线程池模拟300并发请求,验证了系统的高并发处理能力。

2025-11-04 09:11:34 419

原创 《黑马点评》02-商户查询缓存_完整代码【简单易懂注释版】

本文档介绍商户查询缓存系统的核心设计:基于Redis实现商户及商铺类型列表缓存,优先读缓存提升性能;采用“先更新数据库,再删缓存”策略保障一致性;针对缓存穿透,缓存空值;针对缓存击穿,提供互斥锁与逻辑过期方案,并引入DoubleCheck机制确保数据准确;核心操作封装为通用CacheClient工具类。系统涵盖数据预热、并发控制与异常处理,兼顾高性能与一致性。

2025-11-03 08:52:20 571

原创 《黑马点评》01-短信登录_完整代码【简单易懂注释版】

本文介绍了基于短信验证码的登录系统实现过程,主要包括以下功能模块:1)短信验证码发送与校验;2)用户登录注册功能;3)登录状态拦截器实现;4)用户敏感信息隐藏;5)基于Redis的登录状态管理;6)登录状态刷新方案;7)退出登录功能。系统采用SpringBoot框架,通过ThreadLocal保存用户信息,Redis存储会话数据,实现了无状态的登录验证机制。关键点包括验证码生成、Token管理、双重拦截器设计(RefreshTokenInterceptor和LoginInterceptor)。

2025-11-02 15:51:44 398

原创 《天机学堂》day12.优惠券使用相关接口_完整代码【简单易懂注释版】

本文详细介绍了优惠券方案推荐系统的设计与实现,主要包括以下内容:1) 采用策略模式实现四种优惠券类型(无门槛、满减、折扣、每满减)的算法核心;2) 通过初筛和细筛两阶段筛选可用优惠券,并进行全排列组合生成候选方案;3) 使用多线程并发计算各方案的优惠明细;4) 设计最优解筛选算法,综合考虑优惠力度和用券数量;5) 与交易服务联调实现完整的优惠方案推荐功能。系统采用CompletableFuture实现并发计算,并通过双重哈希映射优化最优解筛选过程,最终返回按优惠力度排序的方案列表。

2025-10-19 08:50:48 1067

原创 《天机学堂》day11.领取优惠券优化相关接口_完整代码【简单易懂注释版】

本文详细介绍了分布式锁在优惠券系统中的应用实现。首先讲解了简单分布式锁原理,通过Redis实现基础的锁机制;然后引入Redisson框架优化锁功能;接着通过自定义注解、工厂模式和策略模式逐步完善锁的实现;最后结合SPEL表达式实现动态锁名称。在异步领券部分,实现了基于Redis的库存管理和RabbitMQ消息队列的异步处理机制,包括优惠券缓存管理、消息发送和消费处理。整个方案通过多级优化,确保了高并发场景下优惠券发放的可靠性、高性能和可扩展性。

2025-10-18 09:34:39 823

原创 《天机学堂》day10.领取优惠券相关接口_完整代码【简单易懂注释版】

本文介绍了优惠券管理系统的实现方案,主要包含以下功能模块: 优惠券查询功能:通过CouponController实现发放中优惠券的查询,包括校验用户领取状态和数量限制。 登录拦截优化:在bootstrap.yml配置中设置/coupons/list路径免登录拦截。 优惠券领取功能:实现用户领取优惠券的业务逻辑,包含时间校验、库存校验和个人限领校验。 兑换码兑换功能:通过兑换码兑换优惠券,包含兑换码解析、状态校验和乐观锁处理。 并发安全解决方案: 使用乐观锁解决超卖问题 通过synchronized解决锁失效

2025-10-17 09:18:34 1068

原创 《天机学堂》day09.优惠券管理相关接口_完整代码【简单易懂注释版】

本文介绍了优惠券管理系统的设计与实现,包括优惠券的增删改查、发放、兑换等功能模块。系统采用分层架构,包含Controller、Service、Mapper层,实现优惠券的新增、分页查询、编辑、删除等基础操作。在发放功能中,通过异步生成兑换码提高性能,并设计兑换码加密算法确保安全性。针对并发问题,采用乐观锁解决超卖、悲观锁防止重复领取、AOP代理处理事务失效。系统还实现了定时任务自动开始/结束发放,支持分片处理提升效率。兑换功能结合Redis位图校验兑换状态,MySQL存储兑换记录,确保数据一致性。

2025-10-16 08:48:44 2095

原创 《天机学堂》day08.排行榜系统相关接口_完整代码【简单易懂注释版】

本文介绍了一种结合Redis与MySQL的实时与历史积分排行榜系统实现方案:利用Redis ZSet实现实时积分存储、分页查询及个人排名;通过XXL-Job定时任务每月将数据迁移至按月份动态命名的MySQL历史榜单表(points_board_xx),并借助MybatisPlus动态表名插件支持多表查询;同时,积分明细按赛季拆分为points_record_xx表,实现高效的历史数据管理与清理。

2025-10-15 09:33:41 717

原创 《天机学堂》day07.积分系统相关接口_完整代码【简单易懂注释版】

本文介绍了基于Spring Boot的签到积分系统实现方案。系统主要包含两大功能模块:1)签到功能,采用Redis位图存储签到记录,支持每日签到、防止重复签到、计算连续签到天数及积分奖励;2)积分功能,通过消息队列处理多种积分类型(签到、问答、学习等),实现积分明细记录和每日积分统计查询。系统还提供了赛季管理模块,支持赛季列表查询。关键技术点包括Redis位图操作、RabbitMQ消息处理、日期工具类使用等,实现了一个完整的用户成长体系解决方案。

2025-10-14 09:42:28 676

原创 《天机学堂》day06.点赞相关接口_完整代码【简单易懂注释版】

本文介绍了点赞功能模块的实现方案,主要包括:1) 点赞/取消点赞接口设计与实现,包含Redis缓存和消息队列处理;2) 点赞状态查询接口开发及Feign客户端封装;3) 点赞数变更消息监听器实现;4) Redis缓存改造方案,优化点赞计数和查询性能;5) 定时任务设计,实现缓存数据持久化。系统采用Redis存储点赞数据,通过消息队列异步处理点赞数变更,并结合定时任务将缓存数据同步到数据库,在保证性能的同时确保数据一致性。

2025-10-13 09:07:54 494

原创 《天机学堂》day05.互动问答的相关接口_完整代码【简单易懂注释版】

本文档提供互动问答系统API接口完整实现方案,含两大功能模块:问题管理涵盖新增、编辑、删除问题接口,支持用户端分页查询问题及详情、管理端分页查询问题及详情与隐藏/显示问题;回答评论管理包含新增回答/评论接口,支持用户端分页查询回答/评论、管理端分页查询回答/评论与隐藏/显示评论。所有接口基于Spring Boot框架,采用Controller、Service接口、ServiceImpl实现类三层结构,涉及用户信息、课程信息等多个微服务调用,系统支持匿名提问和分页查询。

2025-10-12 08:51:02 965

原创 《天机学堂》day04.提交学习计划(视频)_优化_完整代码【简单易懂注释版】

本文基于JDK的DelayQueue实现延迟任务处理:1)通过DelayTask和DelayQueue完成基本测试;2)将学习记录先写入Redis缓存,并提交20秒延迟任务;3)实现Redis缓存的读写与清理;4)异步线程消费到期任务,校验数据一致性后持久化至数据库;5)封装LearningRecordDelayTaskHandler整合Redis、延迟队列与异步处理;6)改造提交接口,区分视频与考试记录类型,触发缓存更新与延迟任务。方案有效缓解数据库压力,优化高频进度更新。

2025-10-11 09:03:49 385

原创 《天机学堂》day03.我的学习记录相关接口_完整代码【简单易懂注释版】

本文介绍了在线学习平台中学习计划相关功能的实现代码,主要包括四个核心功能: 创建学习计划:通过用户ID和课程ID验证课程存在性后,更新学习计划状态和每周学习频率; 查询学习进度:获取指定课程的学习记录和最新学习进度; 提交学习记录:处理视频和考试两种类型的学习记录,并更新课程学习状态; 查询学习计划:统计本周学习进度,包括已完成小节数、计划学习数和积分情况。 这些功能通过Controller、Service和DAO三层架构实现,涉及用户认证、数据校验、状态更新等业务逻辑,并通过分页查询优化性能。

2025-10-10 09:14:29 772

原创 《天机学堂》day02.我的课表相关接口_完整代码【简单易懂注释版】

本文介绍了基于Spring Boot和微服务架构的在线学习平台课程管理功能,涵盖用户课表管理(添加、分页查询、学习状态跟踪、退款退课、权限校验)、课程数据统计(学习人数、课程状态)及课程有效期控制,通过RabbitMQ异步处理、MyBatis Plus数据操作和FeignClient服务调用,实现了模块化、高内聚的课程管理与统计系统。

2025-10-09 09:11:34 800

原创 《黑马商城》Elasticsearch高级-详细介绍【简单易懂注释版】

本文介绍Elasticsearch的DSL查询语法与RestClient查询方法,其中DSL查询类型分叶子查询(含全文检索、精确查询)和复合查询(含bool、函数查询等),还详解排序、分页、高亮功能实现,RestClient查询部分讲解通过Java API构建与DSL语法对应的查询条件及请求发送至结果解析的完整流程,数据聚合方面介绍Bucket聚合、Metric聚合的使用方法及借助RestClient实现聚合查询,文章搭配大量具体示例,展现Elasticsearch强大的搜索和统计分析能力。

2025-10-08 09:54:24 1024

原创 《黑马商城》Elasticsearch基础-详细介绍【简单易懂注释版】

本文介绍了Elasticsearch的基础知识和操作指南。主要内容包括: Elasticsearch简介与安装:介绍ELK技术栈,讲解通过Docker安装Elasticsearch和Kibana的方法。 核心概念:详细解释倒排索引原理,对比正向索引与倒排索引的特点。 IK分词器使用:介绍中文分词器的安装配置,包括扩展词典的添加方法。 基础操作:涵盖索引库的CRUD操作、文档的增删改查,以及批量导入数据的方法。 Java API实践:通过RestHighLevelClient演示索引库和文档操作的完整代码示例

2025-10-07 11:05:08 1043

原创 《黑马商城》MQ高级-详细介绍【简单易懂注释版】

本文系统阐述了RabbitMQ的高级功能,围绕消息可靠性传递与延迟消息实现,分别从生产者、MQ和消费者三端详述了保障消息可靠性的机制(如重试、确认、LazyQueue持久化及异常重定向),提出基于业务状态判断的幂等性解决方案并辅以定时任务兜底,同时对比死信交换机与DelayExchange插件两种延迟消息实现方式,结合订单超时案例给出具体配置、代码示例及适用场景分析,为构建高可靠RabbitMQ系统提供完整实践指南。

2025-10-06 10:12:09 789

原创 《黑马商城》MQ基础-详细介绍【简单易懂注释版】

本文介绍RabbitMQ的基本概念、安装配置及Spring AMQP的使用方法。内容包括:MQ基础,对比同步与异步调用优劣,阐明RabbitMQ选型优势;通过Docker部署RabbitMQ并使用管理控制台;在Spring AMQP中声明队列、交换机与绑定关系,演示Work Queues、Fanout、Direct和Topic四种消息模型;配置JSON消息转换器以替代JDK序列化;并通过将订单支付状态同步调用改造为RabbitMQ异步通知的实例,展示实际应用。全文提供丰富代码示例与操作步骤。

2025-10-05 10:13:38 752

原创 《黑马商城》分布式事务-详细介绍【简单易懂注释版】

本文介绍了分布式事务框架Seata的部署与集成方法,重点讲解了XA和AT两种事务模式的实现原理。Seata通过TC事务协调者统一管理分支事务状态,解决微服务架构下的数据一致性问题。XA模式基于两阶段提交保证强一致性但性能较差;AT模式利用数据快照实现最终一致性,性能更优但存在短暂不一致可能。文章详细说明了TC服务的Docker部署流程、微服务集成步骤,以及两种模式的具体配置方式,为分布式系统开发提供了实用指导。

2025-10-04 09:29:25 985

原创 《黑马商城》微服务保护-详细介绍【简单易懂注释版】

本文介绍了微服务保护中的雪崩问题及其解决方案,重点讲解了Sentinel框架的使用。主要内容包括:1. 雪崩问题分析及线程隔离、服务熔断两种解决方案;2. Sentinel的安装配置,包括控制台搭建和微服务整合;3. 请求限流和线程隔离的具体实现方法;4. 服务熔断机制,包含降级逻辑编写和熔断策略配置。通过实际案例演示了如何利用Sentinel进行服务保护,包括限流测试、线程隔离验证以及熔断效果观察。文章为微服务架构下的系统保护提供了完整的实践指导。

2025-10-03 09:30:44 900

原创 《黑马商城》Nacos配置管理-详细介绍【简单易懂注释版】

本文详细介绍了Nacos配置管理的实现方法。主要包括配置共享(抽取jdbc、日志等公共配置到Nacos)、配置热更新(通过@ConfigurationProperties动态更新业务参数)和动态路由(通过监听Nacos配置变更实现网关路由动态刷新)三部分。每个功能都给出了具体实现步骤,包括依赖引入、配置文件修改、代码实现等,并特别说明了配置文件的命名规则和监听机制。最后通过购物车服务上限配置和网关路由配置的实例,演示了Nacos配置管理的实际应用效果。

2025-10-02 09:21:51 710

空空如也

空空如也

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

TA关注的人

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