Redis 实战项目(一) -- 短信登录

162 阅读2分钟

短信登录

安装 redis

目标

  • 在 centos7 系统中安装和配置 redis 数据库,并使用 redis desktop manager 连接到 redis

步骤

  1. redis 是基于 c 语言编写的,首先需要安装 gcc 依赖
    • yum install -y gcc tcl
  2. 将 redis 安装包上传至虚拟机的 /usr/local/src 目录下并解压
    • 解压缩:tar -xzf redis-6.2.6.tar.gz
  3. 进入 redis 目录
    • 813a80d2b65f4182a22d893801c9ea03.png
    • cd redis-6.2.6
  4. 运行编译命令
    • make && make install
  5. 默认安装路径在 /usr/local/bin 目录下
    • 7ee352312546575e2eadba5787822d25.png
    • db482d426a1f15fe6c9c03db077ddb66.png
  6. 测试 redis 能否正常启动
    • redis-server
    • 5bb1b3a540f2677fc028e6eca4c2a850.png
  7. 配置 redis
    • 备份配置文件:cp redis.conf redis.conf.bck
    • 修改 redis.conf 文件中的配置
    • 11223939e1e8092eb8027a44cd3850d4.png
  8. 设置开机自启
    • 新建一个系统服务文件:vi /etc/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true 

[Install]
WantedBy=multi-user.target
  • 重载系统服务:systemctl daemon-reload
  • 开机自启:systemctl enable redis
  1. rdm 连接 redis
    • 关闭防火墙:systemctl stop firewalld
    • 正常连接即可

导入项目

导入 mysql 表

  • 在 idea 中执行资料中的 hmdp.sql 文件
  • cf4efd530d5f8de07729ab58f0261b49.png
  • 454d9cfdae4a052d06a686199f59e479.png

导入后端项目

修改配置文件

  • 更改数据库的地址和用户名密码

部署前端项目

  • 地址:localhost:8080

基于 session 实现登录

发送短信验证码

  • f265cf498b72212842d12acec90ab121.png
  • 7d751e0b386f7221f6b291b3f1cbd985.png
  • controller 层
    • fa3caf8ab461a712943509da588c946b.png
  • service 层
    • 6d71f03e729f3694657793cf5670c5c3.png
  • 校验手机号的正则表达式
    • e8c5165c098b9fb88edf7460bf52b4e7.png

短信验证码登录、注册

  • 86d800eac8ccee31fac610a6e1dd92f7.png
  • controller 层
    • 0c4f1b10a1202154145622cfef6663ee.png
  • service 层
    • a66d3c397e0651a045f8cbb61f6108a1.png
    • 727c67251cc7b1a36255c576c286c7f3.png
  • mapper 层

校验登录状态

  • 67ff7ed9d56285ef5ec02a26d4d26eb9.png
  • 编写拦截器代码
    • 337d961eabcf2605b3606ae0c78755e3.png
  • 注册拦截器、配置拦截路径
    • bd691dad198876f61a94cb121fabe3bc.png
  • 查询登录状态
    • e8161fa0f073c2d5b132fce155513f08.png

集群的 session 共享问题

  • 问题:
    • 多台 tomcat 并不共享 session 存储空间,当请求切换到不同 tomcat 服务时导致数据丢失的问题
  • session 替代方案应该满足
    1. 数据共享
    2. 内存存储
    3. key、value 结构
  • redis 集群!!!
  • 34fded2aaae6dd45b7666cd6c87455ad.png

基于 redis 实现 session 登录

  • 325f9c706fb4f555581e3ccf50aabb4f.png
修改代码
  1. 更新发送手机验证码的代码

    • @Reousrce 注解
    • 9ce9eb037c6ac673104e08844cf8fa73.png
    • 设置常量类提升代码规范性
    • 4d6896562649698bd8a2201ccb422490.png
    • 修改后代码
    • ddc46efa02f93fd3c24959c11f6fe02e.png
  2. 更新注册和登录功能代码

  • 更新 UserServiceImpl 中的 login 方法
    • 89aeeebf4067ed3e798800034d2b1fbd.png
  • 更新 LoginInterceptor 中的代码
    • 053fa9faf2db92f26feecda03f839d24.png

登录拦截器的优化

  • 逻辑:
    • 使用两个优先级不同的拦截器
      1. 负责拦截所有请求并刷新 token 有效期
      2. 负责拦截需要登录的路径
  • 04a1fd3ad4219f00d9a69f195cc66a92.png
  • token 刷新拦截器(不负责拦截)
    • 6436da7dd007b01886909024fbddf20a.png
  • 登录拦截器(负责拦截)
    • 0b5fcd18aa2728cfafe9ddf01dc77234.png
  • MvcConfig(配置优先级)
  • 91c934bae76c69066f68d34862a26789.png