实战篇

p30 短信登录-隐藏用户敏感信息

问题描述:登录后会跳转到 index.html

解决办法

  • 更改 nginx-1.18.0\html\hmdp\login.html 第 87 行为:location.href = "/info.html"

  • 更改 UserController 中 /user/me 方法:

    @GetMapping("/me")
    public Result me(){
        // 获取当前登录的用户并返回
        UserDTO user = UserHolder.getUser();
        return Result.ok(user);
    }

p50 优惠券秒杀-添加优惠券

问题描述:访问 http://localhost:8080/shop-detail.html?id=1 不显示优惠券

解决办法

将 tb_seckill_voucher 表中的 end_time 改为当前时间之后的日期

在这里插入图片描述

使用 postman 添加优惠券的请求内容:

{
    "shopId": 1,
    "title": "100元代金券",
    "subTitle": "周一至周五均可使用",
    "rules": "全场通用\\n无需预约\\n可无限叠加\\不兑现、不找零\\n仅限堂食",
    "payValue": 8000,
    "actualValue": 10000,
    "type": 1,
    "stock": 100,
    "beginTime": "2023-01-26T10:09:17",
    "endTime": "2023-12-26T23:59:59"
}

p69 秒杀优化-异步秒杀思路

问题描述:根据用户信息生成 token.txt

解决办法:在测试类中添加如下方法

    @Test
    public void createToken() throws IOException {
        List<User> list = userService.list();
        PrintWriter printWriter = new PrintWriter(new FileWriter("E:\\token.txt"));
        for(User user: list){
            String token = UUID.randomUUID().toString(true);
            UserDTO userDTO = BeanUtil.copyProperties(user, UserDTO.class);
            Map<String, Object> userMap = BeanUtil.beanToMap(userDTO, new HashMap<>(),
                    CopyOptions.create()
                            .setIgnoreNullValue(true)
                            .setFieldValueEditor((fieldName, fieldValue)->fieldValue.toString()));
            String tokenKey = LOGIN_USER_KEY + token;
            stringRedisTemplate.opsForHash().putAll(tokenKey, userMap);
            stringRedisTemplate.expire(tokenKey, LOGIN_USER_TTL, TimeUnit.MINUTES);
            printWriter.print(token + "\n");
            printWriter.flush();
        }
    }

执行结果:

在这里插入图片描述

p81 达人探店-点赞排行榜

问题描述:详情页下面位置点赞无反应

在这里插入图片描述

解决办法

  • 在 nginx-1.18.0\html\hmdp\blog-detail.html 第 78 行添加 @click="addLike()"

在这里插入图片描述

p87 好友关注-实现滚动分页查询

问题描述:实现滚动查询的方法 queryBlogOfFollow 中,关于 offset 计算有问题,下面的 os 变量只记录了单页数据中最后一个 score 的重复次数,并不能作为 下次查询的 offset

在这里插入图片描述

解决办法:在上述代码末尾添加如下内容

os = minTime == max ? os + offset : os;

案例中,使用 ZSet 实现排序时,注意参数的设置规则:

reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count);
  • min:0,这里使用时间戳作为 score,所以最小值可以直接给 0
  • max(注意)
    • 第一次查询:当前时间戳
    • 非第一次查询:上次查询的最小时间戳
  • offset(注意)
    • 第一次查询: 0
    • 非第一次查询
      • 如果当前页最后一条数据的 score 与上一页最后一条数据的 score 相同,则下一页的 offset 就是上一页的 offset + 当前页最后一个 score 的重复次数
      • 如果当前页最后一条数据的 score 与上一页最后一条数据的 score 不相同,则下一页的 offset 就是当前页最后一个 score 的重复次数
  • count:给定每次查询个数

问题描述:向下滚动分页时,如果数据很多,后续滚动无效果,不触发查询下一页

解决办法:在 nginx-1.18.0\html\hmdp\info.html 页面,添加 <div style="height:101%"> 标签作为 <div class="blog-box" > 的父级,具体如下:

在这里插入图片描述

p90 附近商铺-实现附近商户功能

问题描述:当页面展示的数据高度不超过 <div class="shop-box"> 容器的高度时,无法实现滚动

解决办法:在 nginx-1.18.0\html\hmdp\shop-list.html 页面,添加 <div style="height:101%"> 标签作为 <div class="shop-box" > 的父级,具体如下:

在这里插入图片描述

高级篇

p110 分布式缓存-15-Redis分片集群-集群伸缩

问题描述:实现删除 7004 节点

解决办法

只需要使用如下命令:

redis-cli --cluster del-node IP:PORT NODE-ID
# IP:PORT: 要删除的节点地址和端口;
# NODE-ID: cluster nodes查到的node-id, 必须和ip:port保持一致,防止误删;如果不一致会报错;

注意 :在删除主节点前,需要确保这个主节点是空的,如果不是空的,需要将这个节点的数据重新分片到其他主节点上。

1、将主节点 7004 的 slots 分配到其他主节点上,这里分配给 7001 节点

在这里插入图片描述

2、输入 yes 接受这个计划,然后回车,开始 7004 节点的 slots 的转移

在这里插入图片描述

3、slots 转移完毕后,执行 redis-cli -c -p 7001 连接 redis,执行 cluster nodes查看节点,7004 节点的 slots 已经转移到了 7001 节点

在这里插入图片描述

4、使用 redis-cli --cluster del-node IP:PORT NODE-ID 命令删除 7004 节点

在这里插入图片描述

p122 多级缓存-10-OpenResty快速入门

问题描述:按照步骤配置完 nginx 映射后,重启 nginx 后访问 http://localhost/item.html?id=10001 不成功

解决办法:如果配置没有问题,可能是启动了多个 nginx 进程,将其全部停止,然后重启。具体步骤:

1、打开 cmd 命令对话框,查看所有 nginx.exe 进程,输入命令:

tasklist /fi "imagename eq nginx.exe"

在这里插入图片描述

2、结束这些进程,输入命令:

taskkill /fi "imagename eq nginx.exe" /f

在这里插入图片描述
3、然后执行 start nginx.exe 重启,重新访问 http://localhost/item.html?id=10001

在这里插入图片描述

p125 多级缓存-13-向tomcat发送http请求

问题描述:访问 http://localhost/item.html?id=10001 不成功,报 500 错误

在这里插入图片描述

解决办法

1、首先检查 /usr/local/openresty/nginx/conf/nginx.conf 文件的配置

在这里插入图片描述

启动 ItemApplication 服务,使用上述配置的 ip 地址替换 localhost,确保在本机你能够访问成功

在这里插入图片描述
2、检查 /usr/local/openresty/nginx/lua/item.lua 配置文件内容,资料中给的这段配置有错误

在这里插入图片描述
3、重启 nginx 服务,访问 http://localhost/item.html?id=10003

在这里插入图片描述

p128 多级缓存-16-查询Redis

问题描述:如果使用自己默认的 redis,并且 redis 设置有密码的情况下,停掉 tomcat 服务后,访问 redis 不成功,是因为老师使用 docker 创建 redis 镜像不需要密码,资料中的 lua 脚本里连接 redis 的函数是没有设置密码的。

解决办法

1、在 pom.xml 配置文件中添加自己 redis 的密码

spring:
  redis:
    host: 192.168.151.101
    password: 123

2、修改 /usr/local/openresty/lualib/common.lua 文件中 read_redis 函数,添加参数,设置密码,具体如下:

在这里插入图片描述

3、修改 /usr/local/openresty/nginx/lua/item.lua 文件中 redis_data 函数的调用,传递密码参数,具体如下:

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐