- 博客(14)
- 收藏
- 关注
原创 Redis最佳实践(Redis使用的经验总结)
Redis键值设计建议采用[业务名]:[数据名]:[id]格式,控制key长度在44字节内,避免BigKey(value<10KB,集合元素<1000);批处理推荐Pipeline或MSET,集群环境需保证key同slot,可采用分组或HashTag方案;服务端需配置持久化、慢查询阈值及安全策略(如密码、禁用危险命令);主从架构通常够用,集群按需选用。
2025-12-11 16:38:08
1309
原创 多级缓存——亿级流量的缓存方案(Caffeine、OpenResty、Canal等)
本文探讨了多级缓存架构的设计与实现。传统缓存策略存在Tomcat性能瓶颈和数据库冲击问题,多级缓存方案通过Nginx、Redis和本地缓存的分层设计有效缓解压力。文章详细介绍了基于Caffeine的高性能本地缓存实现,并阐述了如何结合OpenResty实现Nginx层面的缓存处理。通过Redis缓存预热解决冷启动问题,利用Canal实现MySQL与缓存的数据同步,确保数据一致性。最终构建了包含Nginx本地缓存、Redis分布式缓存和Tomcat进程缓存的多级缓存体系,显著提升了系统性能和数据访问效率。
2025-12-09 18:57:04
1241
原创 分布式缓存(Redis持久化、主从、哨兵、分片)
本文主要探讨了Redis单节点存在的问题及解决方案。单节点Redis存在数据丢失风险、并发能力有限、故障恢复困难和存储容量不足等问题。针对这些问题,文章详细介绍了三种解决方案:1)通过RDB和AOF持久化机制保障数据安全;2)搭建主从架构实现读写分离;3)使用哨兵机制实现自动故障恢复。此外,还介绍了分片集群的搭建方法,通过多master节点提升并发能力和存储容量。文章提供了详细的配置步骤和实现原理,包括集群结构设计、实例配置、启动方式等关键技术要点,为构建高可用Redis集群提供了完整解决方案。
2025-12-02 19:15:13
1171
原创 深入理解 Feed 流:互联网产品的 “信息核心引擎”
Feed流是互联网产品的核心功能,通过信息流形式向用户推送内容,主要分为两种模式:Timeline(按时间排序)和智能排序(算法推荐)。实现方案包括拉模式(读扩散)、推模式(写扩散)和推拉结合模式(读写混合)。拉模式适合关注量少的场景但实时性差,推模式实时性强但存储压力大,推拉结合模式则兼顾两者优势。具体实现中,推送功能需将内容写入粉丝收件箱,分页查询采用滚动分页解决数据更新问题。
2025-11-26 23:47:24
1891
原创 Redis消息队列
Redis提供了三种消息队列实现方式:List结构简单但功能有限,支持单消费者和持久化;PubSub支持多消费者但不持久化;Stream是功能最完善的方案,支持多消费者、消息回溯和确认机制。文章演示了如何利用Stream实现异步秒杀系统,通过Lua脚本处理库存检查和订单创建,配合消费者组确保消息可靠处理。这种方案解决了高并发下的性能问题,同时通过消息确认机制避免了消息丢失。
2025-11-18 23:01:38
1314
原创 悲观锁、乐观锁与分布式锁(Lua、Redisson、WatchDog、multiLock)深度解析
并发编程中,锁是保障数据一致性的核心机制。悲观锁(如synchronized)采用“先加锁后操作”策略,适用于写多读少的高冲突场景(如秒杀),保证强一致性但性能开销大。乐观锁(如CAS机制)采用“先操作后校验”策略,通过版本号控制实现无锁并发,适合读多写少的低冲突场景,性能更高。分布式锁(如基于Redis的实现)解决跨进程资源竞争,需注意原子性和锁续期,可通过Redisson等工具简化实现。选择锁的本质是在数据一致性和系统性能间寻求平衡,需根据具体业务场景的冲突概率和性能要求做出最合适的选择。
2025-11-10 17:34:25
1608
1
原创 AOP(面向切面编程)
AOP(面向切面编程)是OOP的补充,通过横向抽取通用功能(如日志、事务等)形成切面,解决代码重复问题。核心概念包括:切面(Aspect)封装横切逻辑,切入点(Pointcut)定义拦截位置,通知(Advice)实现增强逻辑(前置/后置/环绕等)。Spring AOP基于动态代理(JDK/CGLIB)实现,默认对public方法生效。典型应用场景包括日志记录、事务管理、性能监控和权限校验。文中详细演示了通过自定义注解实现权限校验的完整流程,并对比了JDK动态代理和CGLIB代理的差异。
2025-12-17 18:23:50
1609
原创 Lua语法
本文介绍了Lua脚本语言的基础知识与应用。主要内容包括:1)Lua简介及运行环境配置;2)变量声明与数据类型(字符串、数字、布尔值、table);3)循环结构(数组和table遍历);4)函数定义与条件控制语法(if-else逻辑运算)。重点演示了如何创建Lua脚本、处理不同数据类型、实现迭代操作以及构建带条件判断的自定义函数。文章通过具体代码示例(如打印数组、处理nil参数等)展示了Lua作为嵌入式脚本语言的灵活性和实用性。
2025-12-08 16:02:35
324
原创 UV统计(HyperLogLog)
HyperLogLog是一种高效统计独立访客量(UV)的概率算法,通过Redis实现时内存占用极低(16KB)。相比传统方法需存储所有用户信息,HyperLogLog只需0.81%误差代价即可估算大流量数据,如百万用户统计仅占用14KB内存且结果稳定(实测997593/1000000)。适用于高并发场景下的UV统计需求。
2025-11-30 12:22:19
364
原创 BitMap功能——用户签到
本文介绍了使用Redis BitMap实现用户签到功能的方法。针对传统数据库存储签到数据占用空间过大的问题,采用按月统计的位图方案,将每天签到状态用1个bit位表示。具体实现包括:1)签到功能使用SETBIT命令记录当天签到;2)签到统计通过BITFIELD获取当月签到数据,并通过位运算计算连续签到天数。该方法利用Redis字符串类型实现BitMap,最大支持512M存储空间,显著降低了存储开销,提高了签到统计效率。
2025-11-29 13:08:15
384
原创 GEO数据结构(附近商户搜索)
Redis的GEO功能支持地理坐标存储和查询,包括添加坐标(GEOADD)、计算距离(GEODIST)和范围搜索(GEOSEARCH)等命令。通过案例演示了火车站坐标存储、距离计算和天安门附近搜索的实现。在商户搜索应用中,首先按类型分组存储商户坐标,然后通过Spring Data Redis实现附近商户查询,包括分页处理和距离计算。需要注意版本兼容问题,需升级相关依赖以支持Redis 6.2的GEOSEARCH命令。该功能适用于基于地理位置的服务场景。
2025-11-28 15:19:36
559
原创 秒杀优化——异步秒杀思路(基于阻塞队列)
本文介绍了一个基于Redis和Java的优惠券秒杀系统实现方案。系统通过多级校验保证数据一致性:首先使用Redis存储优惠券库存和用户购买记录,利用Lua脚本原子性地完成库存校验、扣减和防重复购买判断;其次采用阻塞队列实现异步下单,结合Redisson分布式锁防止重复下单;最后在数据库事务中再次校验并完成订单创建。这种架构设计实现了秒杀系统的高并发处理能力,同时确保了数据一致性。此外,文章还分析了当前内存队列方案的局限性,并建议改用RabbitMQ等专业消息队列来提升系统可靠性。
2025-11-17 17:46:40
1029
原创 Idea常用快捷键
try/catch- 基本的异常捕获try/finally- 只有 finally 块try/catch/finally- 完整的异常处理
2025-11-11 21:08:53
540
原创 CountDownLatch:让多线程同步如此简单
是 Java 并发包中的一个同步工具类,它的核心作用是让一个或多个线程等待其他线程完成指定操作后再继续执行,本质是通过 “计数器递减” 实现线程间的协调。加深理解:可以把 CountDownLatch 想象成一个 “倒计时门闸”。比如你组织了一场接力赛:你是裁判(主线程),需要等 3 个选手(子线程)都跑完自己的赛程,才能宣布比赛结束。一开始你手里拿着标有 “3” 的牌子(计数器初始值),每个选手跑完后,你就把数字减 1(调用 countDown ())。
2025-11-04 17:45:52
1019
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅