Redis实战笔记
# Redis 实战笔记
# 技术架构图
这个项目是单体项目,架构比较简单,下图依然是理想架构,实际上只用单台 Tomcat、MysQL、Redis 即可:
# 目录解析
# config 目录
存放项目依赖相关配置
- MvcConfig: 配置了登录、自动刷新登录 Token 的拦截器
- MybatisConfig: 配置 MyBatis Plus 分页插件
- RedissonConfig: 创建单例 Redisson 客户端
- WebExceptionAdvice: 全局响应拦截器
# controller 目录
存放 Restful 风格的 API接口
# dto 目录
存放业务封装类,如 Result 通用响应封装 (不推荐学习它的写法)
# entity 目录
存放和数据库对应的 Java POJO 实体类,一般是用 MyBatisX 等插件自动生成
# mapper 目录
存放操作数据库的代码,基本没有自定义 SQL,都是复用了 MyBatis Plus 的方法,不做重点学习
# service 目录
存放业务逻辑处理代码,需要重点学习
- BlogServicelmpl: 基于 Redis 实现点赞、按时间排序的点赞排行榜;基于 Redis 实现拉模式的 Feed流,推荐学习
- FollowServicelmpl: 基于 Redis 集合实现关注、共同关注,推荐学习
- ShopServicelmpl: 基于 Redis 缓存优化店铺查询性能;基于 Redis GEO 实现附近店铺按距离排席,推荐学习
- UserServicelmpl: 基于 Redis 实现短信登录(分布式 Session),推荐学习 (虽然没有真的实现短信登录而是通过日志打印验证码代替 -- 可考虑阿里云短信服务)
- VoucherOrderServicelmpl: 基于 Redis 分布式锁、Redis + Lua 两种方式,结合消息队列,共同实现了秒杀和一人一单功能,非常值得学习
- VoucherServicelmpl: 添加优惠券,并将库存保存在 Redis 中,为秒杀做准备
# utils 目录
存放项目内通用的工具类,需要重点学习
- CacheClient: 封装了通用的缓存工具类,涉及泛型、函数式编程等知识点,值得学习
- RedisConstants: 保存项目中用到的 Redis 键、过期时间等常量,值得学习
- RedisldWorker: 基于 Redis 的全局唯一自增 id 生成器,值得学习
- RedisTokenInterceptor: 自动刷新 Redis 登录 Token 有效期,值得学习
- SimpleRedisLock: 简单的 Redis 锁实现,了解即可,一般用 Redisson
- UserHolder: 线程内缓存用户信息,可以学习