# hmdp **Repository Path**: cyanzzy/hmdp ## Basic Information - **Project Name**: hmdp - **Description**: The code of Hmdp, developed by itheima, optimized by CyanChau. - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-05-13 - **Last Updated**: 2024-02-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 黑马点评 ## 项目介绍 * Redis实战项目,适合初学者 * 在线店铺点评APP ## 项目功能 * 查看点评(热评)、发布点评、点赞 * 关注、查询关注的人发的帖子、查看好友共同关注 * 分类浏览店铺、查看附近的店铺 * 个人信息查看和管理 ## 技术选型 开发框架 * SpringBoot 2.0 数据存储 * MySQL 8.0 * MybatisPlus Redis相关 * spring-data-redis:操作Redis * Lettuce:操作Redis的高级客户端 * Apache Commons Pool:用于实现Redis连接池 * Redisson:基于Redis的分布式数据网格 工具库 * HuTool:工具库合集 * Lombok:注解式代码生成工具 前端 * 原生HTML、CSS、JS * VUE2 * Element UI组件库 * axios请求库 ## 项目特色 1. 短信登录:使用Redis实现分布式Session,解决集群间登录态同步问题 2. 店铺查询:使用Redis对高频访问店铺进行缓存,降低数据库压力,提升数据库查询性能 3. 为方便其他业务后续使用缓存,使用泛型和函数式编程实现通用缓存访问静态非法,解决缓存穿透、缓存雪崩等问题 4. 使用常量类全局管理Redis Key前缀、TTL,保证键空间的业务隔离,减少冲突 5. 使用Redis的Geo+Hash数据结构分类存储附近商户,使用Geo Search命令实现高性能商户查询及按距排序 6. 使用Redis List数据结构存储用户点赞信息,并基于ZSet实现TopN点赞排行 7. 使用Redis Set数据结构实现用户关注、共同关注功能(交集) 8. 使用Redis BitMap实现用户连续签到统计功能 9. 在系统用户量不大的前提下,基于推模式实现关注Feed流,保证新点评信息的及时可达,并减少用户访问的等待时间 10. 优惠券秒杀:使用Redis+Lua脚本实现库存预检,并通过Stream队列实现订单的异步创建,解决了超卖问题、实现一人一单 ## 项目优化点 1. 可以使用Redis+Token机制实现单点登录。对应[项目特色]第1点 2. 对Redis的所有key设置N + n的过期时间,从而合理使用内存并防止缓存雪崩;针对热点店铺缓存,使用逻辑过期(或自动续期)及其解决缓存击穿问题,防止数据库宕机 3. 使用Redis Set数据结构实现用户关注、共同关注功能(交集),使用Redis AOF+业务层数据防止关注数据丢失 4. 基于Spring Scheduler实现对热点数据的定期检测和缓存预加载,提升用户的访问体验,并通过Redisson分布式锁保证集群中同一时刻的定时任务只执行一次 5. 关注Feed流可以改为推拉结合模式(活跃用户用推、普通用户用拉) 6. 使用哨兵集群来提升Redis的读并发量、可用性和稳定性;或者使用Redis分片集群来提升Redis读写并发量、总存储容量,保证可用性和稳定性 7. 随着系统用户增多,使用Redis HyperLogLog 代替DB实现店铺和点评的UV统计