# wolf2w_cloud **Repository Path**: bai3396/wolf2w_cloud ## Basic Information - **Project Name**: wolf2w_cloud - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 7 - **Forks**: 0 - **Created**: 2023-12-02 - **Last Updated**: 2025-08-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 狼行天下旅游点评网 狼行天下旅游点评网致力于打造一个真实详细的自助游咨询平台,为旅游爱好者提供景区旅游、宾馆酒店、渔家乐住宿、旅游车船、休闲娱乐、旅游购物等服务。 ### 项目环境 - JDK 1.8 - Maven 3.9.0 - MySQL 5.7 - Redis 5.* - Nacos 2.1.2 - SpringCloud - SpringBoot - SpringCloud Alibaba - MybatisPlus - lombok - Swagger - Hutool - sf4j - sentinel ## 项目模块 ### 1. 展示前端 主要面向普通用户,提供移动端应用,包括以下功能: - **目的地:** 展示旅游地点信息。 - **旅游攻略:** 平台后台运营人员发布的文章集合,提供旅游地区必须体验的内容、准备工作、旅游景点、住宿、美食等信息。 - **旅游日记:** 用户创建的记录旅行见闻的文章,可设置为公共或私密。 - **站内搜索:** 支持攻略、游记、目的地、用户的关键字搜索。 ### 2. 管理后端 面向后台管理员,提供应用后台管理平台,包括以下功能: - **发布攻略:** 后台管理人员可以在后台发布旅游攻略。 - **管理游记:** 管理用户发布的游记,包括审核用户的点评信息等。 - **用户管理:** 管理用户信息,处理用户反馈等。 ### 3. 数据服务 用于项目数据的维护,可能包括门票、酒店、周边、旅行社等数据的对接。 ## 用户与角色 - **普通用户:** 通过应用注册登录的用户,主要使用移动端提供的功能。 - **后台管理员:** 管理后端运营人员或管理者,维护系统内容。 - **游客:** 没有登录的用户,可以使用一部分功能。 ## 系统关键词 - **平台:** 狼行天下旅游点评网,是一个综合的旅游点评平台。 - **后台管理:** 针对后台运营人员或管理人员使用的管理应用,负责系统内容维护。 - **系统基本结构:** 包括展示前端、管理后端和数据服务三大模块。 ## 如何运行项目 请按照以下步骤运行项目: ## ** 需要掌握SpringCloud,SpringBoot,SpringCloud Alibaba,MybatisPlus,Redis,Nacos,MySQL,Swagger,Hutool,Sf4j,Sentinel,Lombok等知识点.** ## ** 请先阅读项目中的README.md文件,或阅读项目源代码,了解项目结构,再进行项目运行.** 1. 克隆项目到本地. 2. 将项目开发工具. 3. 将website,mgrsite 模块 放入tomcat中运行. 4. 启动本地数据库 5. 启动本地redis 6. 启动本地nacos,并配置持久化和权限 7. 启动本地server 模块 8. 第三方接口调用,请自行申请阿里云短信服务,并配置相关参数 ## 作者 - 作者名:bai shuai - 内容所属: 叩丁狼教育 目录结构: ``` ├─ root(根) │ ├─trip-common(通用模块) │ ├─trip-common-core(通用核心模块) │ ├─trip-common-redis-boot-starter(redis starter) │ └─trip-common-auth-boot-stater(权限认证模块) │ ├─trip-gateway(网关 + swagger ) │ ├─trip-mgrsite(后台管理前端页面) │ ├─trip-provider-api(服务api) │ ├─trip-article-api(文章服务api) │ ├─trip-comment-api(评论服务api) │ └─trip-member-api(用户服务api) │ │ ├─trip-provider-server(服务实现) │ ├─trip-article-server(文章服务) │ ├─trip-comment-server(评论服务) │ ├─trip-data-server(数据统计服务) │ └─trip-member-server(会员服务) │ └─trip-website(前台展示前端页面) ``` ## 项目中遇见的问题及解决方案和备用方案 ### 1.gateway网关实现令牌校验 #### 1.1 问题描述 一些接口需要登录才能访问,需要在网关层实现令牌校验,如果校验失败,则直接返回错误信息,不再转发到后端服务. #### 1.2 解决方案 1. 在网关层 + Redis 实现令牌校验 + 令牌刷新 + 令牌过期 ,但是这种方式,需要每次请求都要访问Redis. 2. 在网关层 + 双 JWT 实现令牌校验 + 令牌刷新 + 令牌过期 ,这种方式,不需要每次请求都要访问Redis.(项目使用这种方式) ....... ### 2.数据查询时业务代码中有多个查询,但之间没有关联. #### 2.1 问题描述 在业务代码中有多个查询,但之间没有关联,使用单线程,数据量大时则会导致接口响应时间过长. #### 2.2 解决方案 1. 使用并发 CompletableFuture 实现多线程查询.(项目中使用这种方式) ### 3.模拟业务数据量大的情况,压测查询慢的问题. #### 3.1 问题描述 在数据库中模拟业务数据量大的情况,一些连表条件查询,会导致查询慢的问题. #### 3.2 解决方案 1. 在查询时优化SQL语句,减少返回不必要的字段. 2. 在查询时优化SQL语句,减少不必要的连表查询. 3. 在查询时优化SQL语句,减少不必要的排序. 4. 在查询时,使用索引,但sql8.0 之前的版本,在查询中使用运算符,会导致索引失效. 5. 在分页时,使用条件过滤,会比limit 速度快.但需要拿到上一次的最后一条数据的主键,作为下一次的查询条件. 6. 使用SpringCache,将查询结果缓存到Redis中,减少数据库的查询次数.(以上几种方式,项目中都使用了) 7. 数据量大时,跳表分页比较慢 ### 4.声明式事务导致的性能问题. #### 4.1 问题描述 在使用声明式事务时,如果在事务中有多个查询,则会导致性能问题. #### 4.2 解决方案 1. 在多个修改操作中,使用手动事务,在查询操作中,使用TransactionTemplate. 更细粒度的控制事务.(项目中使用这种方式) #### 5.频繁获取登录用户信息,代码冗余. #### 5.1 问题描述 在业务代码中,需要频繁获取登录用户信息,代码冗余. #### 5.2 解决方案 1.使用Spring 提供的 Resolver,在业务代码中,直接注入登录用户信息.(项目中使用这种方式) ### 6.Redis与数据库数据同步解决方案 #### 6.1 问题描述 在业务代码中,需要频繁修改mysql数据库中的数据,使用Redis缓存,但是Redis中的数据与数据库中的数据不一致. #### 6.2 解决方案 1. 定时刷新redis中的最新数据到mysql。(项目中使用这种方式) 2. 提供一个内部接口,内部访问时,刷新redis中的最新数据到mysql. 3. 使用redis的发布订阅功能,在修改数据时,发布消息,订阅者接收到消息后,刷新redis中的最新数据到mysql. 4. 数据初始化时,将mysql中的数据刷新到redis中(项目启动时)