黑马Redis笔记高级篇 | 多级缓存

news2025/1/26 15:50:30

黑马Redis笔记高级篇 | 多级缓存(黑马教程云服务器踩坑记录)

  • 1、JVM进程缓存(tomcat服务内部)
    • 1.1 导入商品案例
    • 1.2 初识Caffeine
    • 1.3 实现进程缓存
  • 2、Lua语法入门
    • 2.1 初识Lua
    • 2.2 变量和循环
    • 2.3 条件控制、函数
  • 3、多级缓存
    • 3.1 安装OpenResty
    • 3.2 OpenResty快速入门
    • 3.3 请求参数处理
    • 3.4 查询Tomcat
    • 3.5 Redis缓存预热
    • 3.6 查询Redis缓存
    • 3.7 Nginx本地缓存
  • 4、缓存同步策略
    • 4.1 数据同步策略
    • 4.2 安装Canal
    • 4.3 监听Canal
  • 多级缓存总结


在这里插入图片描述
在这里插入图片描述

1、JVM进程缓存(tomcat服务内部)

1.1 导入商品案例

1、安装docker教程:黑马-Centos7安装Docker
2、根据本章资料中【案例导入说明.md】启动mysql镜像,注意要先关闭本地的mysql服务,否则3306端口被占用,mysql镜像会启动失败。
3、接下来完全按照【案例导入说明.md】导入

1.2 初识Caffeine

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 实现进程缓存

在这里插入图片描述


2、Lua语法入门

在这里插入图片描述

2.1 初识Lua

在这里插入图片描述
在这里插入图片描述

2.2 变量和循环

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3 条件控制、函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3、多级缓存

3.1 安装OpenResty

在这里插入图片描述
按照【安装OpenResty】教程安装,云服务器记得打开配置文件中对应端口(8081)

3.2 OpenResty快速入门

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本地访问商品详情页时需要开启本地nginx,同时云服务器也要reload配置。

3.3 请求参数处理

在这里插入图片描述
在这里插入图片描述

//服务器OpenResty的nginx.conf
#user  nobody;
worker_processes  1;
error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #lua 模块
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";
    #c模块     
    lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  

    server {
        listen       8081;
        server_name  localhost;
        location ~ /api/item/(\d+) {
            # 默认的响应类型
            default_type application/json;
            # 响应结果由lua/item.lua文件决定
            content_by_lua_file lua/item.lua;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
--OpenResty的item.lua
-- 获取路径参数
local id = ngx.var[1]
-- 返回结果
ngx.say('{"id":' .. id .. ',"name":"SALSA AIR","title":"RIMOWA 26寸托运箱拉杆箱 SALSA AIR系列果绿色 820.70.36.4","price":19900,"image":"https://m.360buyimg.com/mobilecms/s720x720_jfs/t6934/364/1195375010/84676/e9f2c55f/597ece38N0ddcbc77.jpg!q70.jpg.webp","category":"拉杆箱","brand":"RIMOWA","spec":"","status":1,"createTime":"2019-04-30T16:00:00.000+00:00","updateTime":"2019-04-30T16:00:00.000+00:00","stock":2999,"sold":31290}')

3.4 查询Tomcat

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里由于本人的OpenResty安装在云服务器,而运行的程序(即视频中说到的tomcat服务器)在本地,实操踩了很多坑,详细记录一下。

首先我要先理清请求的过程:
1、浏览器向windows本地80端口发送请求:http://localhost/api/item/10003
2、该请求被本地的nginx拦截处理,转发给:云服务器IP:8081,即云服务器OpenResty
3、云服务器OpenResty(基于nginx)监听到符合/api/item/(\d+)的请求,调用lua脚本查询数据。由于此时云服务器被反向代理到windows本地,lua脚本查询到本地8081端口的tomcat服务器中的数据。

因此,想要正确地查到数据,首先需要先保证本地程序正处于运行状态,为8081端口提供服务。
其次需要保证本地端口能被云服务器(外网)访问,因此需要对本地windows进行内网穿透,这里我使用的是花生壳。
接下来贴出我的对应配置即代码以供参考:(出于隐私保护,我将对应ip和域名替换成【解释】的形式)
1、本地nginx配置文件


#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #nginx的业务集群,nginx本地缓存,redis缓存,tomcat查询
    upstream nginx-cluster{
        server 【云服务器ip】:8081;
    }
    server {
        listen       80;
        server_name  localhost;

	location /api {
            proxy_pass http://nginx-cluster;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2、云服务器OpenResty中nginx配置

#user  nobody;
worker_processes  1;
error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #lua 模块
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";
    #c模块     
    lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  

    server {
        listen       8081;
        server_name  localhost;
        location /item {
            # windows电脑的ip和java服务端口
            proxy_pass http://【本地windows内网穿透后的外网域名】:【网穿透后的端口】;
        }
        location ~ /api/item/(\d+) {
            # 默认的响应类型
            default_type application/json;
            # 响应结果由lua/item.lua文件决定
            content_by_lua_file lua/item.lua;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3、云服务器OpenResty中执行的lua脚本(这里调用的 read_http 等函数可以自行去黑马资料中找)

--导入common库
local common = require('common')
local read_http = common.read_http
-- 导入cjson库
local cjson = require('cjson')

-- 获取路径参数
local id = ngx.var[1]

-- 查询商品信息
local itemJSON = read_http("/item/" .. id,nil)
-- 查询库存信息
local stockJSON = read_http("/item/stock/" .. id,nil)

-- JSON转化为lua的table
local item = cjson.decode(itemJSON)
local stock = cjson.decode(stockJSON)

-- 组合数据
item.stock = stock.stock
item.sold = stock.sold

-- 把item序列化为json返回
ngx.say(cjson.encode(item))

多台tomcat负载均衡案例的云服务器OpenResty中nginx配置

#user  nobody;
worker_processes  1;
error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #lua 模块
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";
    #c模块     
    lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  

    upstream tomcat-cluster {
        hash $request_uri;
        server 【本地windows内网穿透后的外网域名】:【网穿透后的端口1;# 注意这里没有http://
        server 【本地windows内网穿透后的外网域名】:【网穿透后的端口2;# 注意这里没有http://
    }
    server {
        listen       8081;
        server_name  localhost;
        location /item {
            # windows电脑的ip和java服务端口
            proxy_pass http://tomcat-cluster;
        }
        location ~ /api/item/(\d+) {
            # 默认的响应类型
            default_type application/json;
            # 响应结果由lua/item.lua文件决定
            content_by_lua_file lua/item.lua;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

3.5 Redis缓存预热

在这里插入图片描述
在这里插入图片描述
1、云服务器利用Docker安装Redis

docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes

2、在item-service服务中引入Redis依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

3、配置Redis地址

spring:
  redis:
    host: 【云服务器的ip(用于访问docker中6379端口的redis)】

4、编写初始化类

@Component
public class RedisHandler implements InitializingBean {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Autowired
    private IItemService itemService;
    @Autowired
    private IItemStockService stockService;
    private static final ObjectMapper MAPPER = new ObjectMapper();

    @Override
    public void afterPropertiesSet() throws Exception {
        //初始化缓存
        // 1.查询商品信息
        List<Item> itemList = itemService.list();
        // 2.放入缓存
        for (Item item : itemList) {
            // 2.1.item序列化为JSON
            String json = MAPPER.writeValueAsString(item);
            // 2.2.存入redis
            redisTemplate.opsForValue().set("item:id:" + item.getId(), json);
        }

        // 3.查询商品库存信息
        List<ItemStock> stockList = stockService.list();
        // 4.放入缓存
        for (ItemStock stock : stockList) {
            // 2.1.item序列化为JSON
            String json = MAPPER.writeValueAsString(stock);
            // 2.2.存入redis
            redisTemplate.opsForValue().set("item:stock:id:" + stock.getId(), json);
        }
    }
}

3.6 查询Redis缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
1、修改common.lua引入Redis模块

-- 引入redis模块
local redis = require('resty.redis')
-- 初始化Redis对象
local red = redis:new()
-- 设置Redis超时时间
red:set_timeouts(1000, 1000, 1000)

-- 关闭redis连接的工具方法,其实是放入连接池
local function close_redis(red)
    local pool_max_idle_time = 10000 -- 连接的空闲时间,单位是毫秒
    local pool_size = 100 --连接池大小
    local ok, err = red:set_keepalive(pool_max_idle_time, pool_size)
    if not ok then
        ngx.log(ngx.ERR, "放入redis连接池失败: ", err)
    end
end

-- 查询redis的方法 ip和port是redis地址,key是查询的key
local function read_redis(ip, port, key)
    -- 获取一个连接
    local ok, err = red:connect(ip, port)
    if not ok then
        ngx.log(ngx.ERR, "连接redis失败 : ", err)
        return nil
    end
    -- 查询redis
    local resp, err = red:get(key)
    -- 查询失败处理
    if not resp then
        ngx.log(ngx.ERR, "查询Redis失败: ", err, ", key = " , key)
    end
    --得到的数据为空处理
    if resp == ngx.null then
        resp = nil
        ngx.log(ngx.ERR, "查询Redis数据为空, key = ", key)
    end
    close_redis(red)
    return resp
end

-- 封装函数,发送http请求,并解析响应
local function read_http(path, params)
    local resp = ngx.location.capture(path,{
        method = ngx.HTTP_GET,
        args = params,
    })
    if not resp then
        -- 记录错误信息,返回404
        ngx.log(ngx.ERR, "http查询失败, path: ", path , ", args: ", args)
        ngx.exit(404)
    end
    return resp.body
end

-- 将方法导出
local _M = {  
    read_http = read_http,
    read_redis = read_redis
}  
return _M

2、修改item.lua,设置为先查redis后查tomcat,减小tomcat服务器的压力,这里的127.0.0.1要替换成云服务器ip
这里我也不清楚原因,明明OpenResty和redis都在云服务器上,但使用127.0.0.1查询就只能查到前三个商品。如果有大佬懂的话欢迎在评论区解答!

--导入common库
local common = require('common')
local read_http = common.read_http
local read_redis = common.read_redis
-- 导入cjson库
local cjson = require('cjson')

-- 封装查询函数
function read_data(key, path, params)
	-- 先查redis
	-- local resp = read_redis("127.0.0.1",6379,key)
	local resp = read_redis("【云服务器ip】",6379,key)
	-- 判断查询结果
	if not resp then
	    -- 这里一定要加(key or nil),否则会报错lua entry thread aborted: runtime error
		ngx.log("redis查询失败,尝试查询http key:",(key or nil))
		-- redis查询失败,查询http
		resp = read_http(path, params)
	end
	return resp
end

-- 获取路径参数
local id = ngx.var[1]

-- 查询商品信息
local itemJSON = read_data("item:id:" .. id,"/item/" .. id,nil)
-- 查询库存信息
local stockJSON = read_data("item:stock:id:" .. id,"/item/stock/" .. id,nil)

-- JSON转化为lua的table
local item = cjson.decode(itemJSON)
local stock = cjson.decode(stockJSON)

-- 组合数据
item.stock = stock.stock
item.sold = stock.sold

-- 把item序列化为json返回
ngx.say(cjson.encode(item))

3.7 Nginx本地缓存

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1、OpenResty的配置中开启共享词典(本地缓存)

#user  nobody;
worker_processes  1;
error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    #lua 模块
    lua_package_path "/usr/local/openresty/lualib/?.lua;;";
    #c模块     
    lua_package_cpath "/usr/local/openresty/lualib/?.so;;";  
    # 添加共享词典(本地缓存)
    lua_shared_dict item_cache 150m;

    upstream tomcat-cluster {
        hash $request_uri;
        server 【本地windows内网穿透后的外网域名】:【网穿透后的端口1;# 注意这里没有http://
        server 【本地windows内网穿透后的外网域名】:【网穿透后的端口2;# 注意这里没有http://
    }
    server {
        listen       8081;
        server_name  localhost;
        location /item {
            # windows电脑的ip和java服务端口
            proxy_pass http://tomcat-cluster;
        }
        location ~ /api/item/(\d+) {
            # 默认的响应类型
            default_type application/json;
            # 响应结果由lua/item.lua文件决定
            content_by_lua_file lua/item.lua;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2、修改item.lua中的业务逻辑

--导入common库
local common = require('common')
local read_http = common.read_http
local read_redis = common.read_redis
-- 导入cjson库
local cjson = require('cjson')
-- 导入共享词典,本地缓存
local item_cache = ngx.shared.item_cache

-- 封装查询函数
function read_data(key, expire, path, params)
	-- 先查本地缓存
	local val = item_cache:get(key)
	if not val then
		ngx.log(ngx.ERR, "本地缓存查询失败,尝试查询redis key:",(key or nil))
		-- 查redis
		-- val = read_redis("127.0.0.1",6379,key)
		val = read_redis("124.222.157.95",6379,key)
		-- 判断查询结果
		if not val then
			ngx.log(ngx.ERR, "redis查询失败,尝试查询http key:",(key or nil))
			-- redis查询失败,查询http
			val = read_http(path, params)
		end
	end
	-- 查询成功,写入本地缓存
	item_cache:set(key, val, expire)
	-- 返回数据
	return val
end

-- 获取路径参数
local id = ngx.var[1]

-- 查询商品信息
local itemJSON = read_data("item:id:" .. id, 1800, "/item/" .. id,nil)
-- 查询库存信息
local stockJSON = read_data("item:stock:id:" .. id, 60, "/item/stock/" .. id,nil)

-- JSON转化为lua的table
local item = cjson.decode(itemJSON)
local stock = cjson.decode(stockJSON)

-- 组合数据
item.stock = stock.stock
item.sold = stock.sold

-- 把item序列化为json返回
ngx.say(cjson.encode(item))

4、缓存同步策略

4.1 数据同步策略

在这里插入图片描述
1、基于MQ的异步通知:发消息对于item-service仍然有侵入
在这里插入图片描述
2、基于Canal的异步通知:无侵入
在这里插入图片描述

4.2 安装Canal

在这里插入图片描述
在这里插入图片描述
根据【安装Canal.md】安装即可。

4.3 监听Canal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跟着视频教程操作即可,云服务器11111端口记得开放。


多级缓存总结

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/521418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速了解LVQ神经网络是什么

本站原创文章&#xff0c;转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com 目录 一. 快速了解LVQ神经网络 1.1 LVQ神经网络是什么 1.2 LVQ神经网络的表示 二. 关于LVQ神经网络的判别计算过程 2.1 LVQ神经网络模型与它的判别方法 2.2 LVQ模型的…

【论文阅读】MINOTAUR: Multi-task Video Grounding From Multimodal Queries

背景动机 细粒度的视频理解已经成为增强现实(AR)和机器人应用开发的关键能力。为了达到这种级别的视频理解&#xff0c;智能体(例如虚拟助手)必须具备识别和推理视频中捕获的事件和对象的能力&#xff0c;处理一系列视觉任务&#xff0c;如活动检测、对象检索和(空间)时间基础…

教你设置dsn,brd文件关联到cadence

用过cadence的人应该都知道&#xff0c;很多人存在dsn,brd文件无法关联到cadence&#xff0c;从而导致无法直接双击对应的文件打开软件编辑&#xff0c;不得不先打开软件&#xff0c;再通过文件夹浏览来打开对应的文件&#xff0c;这其实是浪费了一些时间的。 下面通过简单的介…

Linux应用开发:socket

目录 1、TCP 1.1 TCP建立连接的流程图 1.2 TCP函数 1.2.1 socket 1.2.2 bind 1.2.3 listen 1.2.4 accept 1.2.5 recv 1.2.6 send 1.2.7 connnect 1.2.8 setsockopt、getsockopt 1.3 应用程序&#xff1a;服务器 1.4 应用程序&#xff1a;客户端 2、UDP 2.1 UDP建…

Github上传大于25M文件最简单方法!!!

Github上传大于25M文件最简单方法 方法&#xff1a;使用 GitHub 桌面应用程序1.下载 [Github](https://desktop.github.com/)应用程序到您的 Windows 或 Mac PC 上。2.单击“从互联网克隆存储库...”选项。3. 使用您的 Git 帐户登录。4. GitHub 应用程序将提示您使用电脑浏览器…

Docker安装Kong konga

一、安装Kong 1. 创建一个docker网络 docker network create kong-net2.拉取镜像 docker pull postgres:9.6 docker pull kong:2.6.03. 搭建pgsql数据库环境 docker run -d --name kong-database \--networkkong-net \-p 5432:5432 \-e "POSTGRES_USERkong" \-e …

Cisco Nexus 9000v Switch, NX-OS Release 10.3(3)F - 虚拟化的数据中心交换机

Cisco Nexus 9000v Switch, NX-OS Release 10.3(3)F - 虚拟化的数据中心交换机 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-nexus-9000v/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org NX-OS System SoftwareR…

Java接口介绍

Java接口介绍 接口&#xff08;Interface&#xff09;&#xff0c;在Java编程语言中是一个抽象类型&#xff0c;是抽象方法的集合&#xff0c;接口通常以interface关键字来声明。Java接口是用于描述类所具有的方法集合&#xff0c;但并不提供实现这些方法的代码。它们被用来定义…

Leetcode刷题日志5.0

目录 前言&#xff1a; 1.两数相加 2.无重复字符的最长子串 3.整数反转 4.删除链表的倒数第 N 个结点 前言&#xff1a; 今天我又来继续分享最近做的题了&#xff0c;现在开始进入我们快乐的刷题时间吧&#xff01;&#xff08;编程语言Python3.0&#xff0c;难度&#xf…

C++模板详解(函数模板、类模板)

hello,这里是bangbang&#xff0c;今天来讲下模板 目录 1. 泛型编程 2. 函数模板 2.1 函数模板概念 2.2 函数模板格式 2.3 函数模板的实例化 2.4 模板参数的匹配原则 3. 类模板 3.1 类模板定义格式 3.2 类模板实例化 4. 非类型模板参数 5. 模板特化 5.1 模板特化概念 5.2…

计算机视觉——day 90 基于级联卷积神经网络和对抗学习的显著目标检测

基于级联卷积神经网络和对抗学习的显著目标检测 I. INTRODUCTIONII. 网路架构A. 基于级联卷积神经网络的生成器G全局显著性估计器 E局部显著性精炼器 R B.鉴别器 DIv. 实验A. 数据集和评价标准B. 实验结果 V. 结论 I. INTRODUCTION 显著目标检测在过去的几年中受到了广泛的关注…

AcWing算法提高课-1.3.7货币系统

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 在网友的国度中共有  n n n 种不同面额的货币&#xff0c;第  i i i 种货币的面额为  a [ i ] a[i] a[i]&#xff0c;你可以假…

Linux知识点 -- Linux环境基础开发工具使用

Linux知识点 – Linux环境基础开发工具使用 文章目录 Linux知识点 -- Linux环境基础开发工具使用一、Linux编辑器 - vim1.vim的打开与关闭2.vim的三种模式3.命令模式常见命令4.底行模式命令5.设置vim的table键为4个字符 二、Linux编辑器 - gcc / g1.介绍2.gcc / g的使用3.gcc /…

docker笔记详解

Docker 官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn/ 1.什么是 Docker 1.1 官方定义 最新官网首页 # 1.官方介绍 - We have a complete container solution for you - no matter who you are and where you are …

Linux | 将SpringBoot+Vue项目部署到服务器上

知识目录 一、写在前面二、后端部署2.1 项目打包2.2 项目运行 三、通过Shell脚本自动部署项目3.1 安装Git和Maven3.2 编写Shell脚本3.2 执行脚本 四、前端部署4.1 安装NGINX4.2 node.js安装4.3 npm打包项目4.4 运行项目 四、总结撒花 一、写在前面 大家好&#xff0c;我是初心…

MyBatis配置

配置结构 属性&#xff08;properties&#xff09; 属性不仅可以在内部直接修改&#xff0c;还可以在外部引入&#xff0c;外部引入需要在配置文件引入属性的文件&#xff0c; db.properties放在资源目录下面&#xff0c;然后在configuration标签下面导入外部配置的propertie…

Kali linux ssh Permission denied, please try again解决

新装的kali 没有ssh 装上ssh后root用户禁止登录所以要修改ssh配置&#xff0c;下面就这个过程解决全部演示。 默认情况下 SSH 不允许以 root 用户登录&#xff0c;因此将会出现下面的错误提示信息&#xff1a; Permission denied, please try again.kali linux 默认没有ssh,因此…

股票量价关系基础知识5

图解各阶段量价关系&#xff1a;价涨量增 价涨量增是指股价上涨的同时成交量也放大。它是最常见的多头进攻模式&#xff0c;说明价量配合良好&#xff0c;反映投资者买卖情绪高涨。成交量放大说明有资金流入&#xff0c;做多力量增强&#xff0c;后市看涨。 注意&#xff1a;1…

yolov5 用自己的数据集进行训练

在训练之前先要按照一定目录格式准备数据&#xff1a; VOC标签格式转yolo格式并划分训练集和测试集_爱钓鱼的歪猴的博客-CSDN博客 目录 1、修改数据配置文件 2、修改模型配置文件 3、训练 1、修改数据配置文件 coco.yaml 拷贝data/scripts/coco.yaml文件&#xff0c; pa…

requset页面的代码逻辑

基地址 &#xff1a; //引入axios import axios from axios; //vuex // import store from ../store/index; //配置基准地址 const Serve axios.create({baseURL: http://47.99.166.157:3000,// transformRequest: [function (data) {// try {// return jsonBig.…