Felix,我的毕业设计项目,是一款专注于提供优质阅读体验的图书阅读应用。在这个数字化时代,Felix旨在重新定义移动阅读,将传统的阅读习惯与现代技术完美结合。
Spring Boot - https://spring.io/projects/spring-boot
Spring Cloud - https://spring.io/projects/spring-cloud
Nacos - https://nacos.io/zh-cn/
Spring Cloud Gateway - https://spring.io/projects/spring-cloud-gateway
MyBatis - https://www.mybatis.org/mybatis-3/zh/index.html
Elasticsearch - https://www.elastic.co/elasticsearch/
OpenFeign - https://github.com/OpenFeign/feign
Redis - https://redis.io/
MySQL - https://www.mysql.com/
Netty - https://netty.io/
MinIo - https://min.io/
Caffeine - https://github.com/ben-manes/caffeine/wiki/Home-zh-CN
Nginx - https://nginx.org/en/
com.mazhj.felix
├── felix-auth-center // 认证中心 [10002]
├── felix-gateway // 网关模块 [8080]
├── felix-feign // 服务调用客户端接口
│ └── felix-feign-user-client // user服务
│ └── felix-feign-book-client // book服务
│ └── felix-feign-search-client // search服务
├── felix-common // 通用模块
│ └── felix-common-auth // 请求鉴权模块
│ └── felix-common-core // 核心模块
│ └── felix-common-minio // 文件管理模块
│ └── felix-common-pojo // 数据传输实体模块
│ └── felix-common-quartz // 定时任务模块
│ └── felix-common-redis // 缓存服务模块
│ └── felix-common-web // web服务模块
├── felix-system-service // 系统业务模块
│ └── felix-user // 用户服务 [10003]
│ └── felix-book // 图书服务 [10004]
│ └── felix-control // 管理服务 [10005]
│ └── felix-search // 搜索服务 [10006]
│ └── felix-forum // 论坛服务 [10007、10008]
├── pom.xml // 公共依赖
No | 工程模块 | 说明 | 子模块 |
---|---|---|---|
1 | felix-common | 通用模块,定义DTO、工具类、配置类等。 | auth、core、minio、pojo、quartz、redis、web |
2 | felix-auth-center | 认证中心 | |
3 | felix-gateway | 服务网关、权限验证 | |
4 | felix-system-service | 系统服务模块,包含体业务模块 | felix-book、felix-user、felix-control、felix-search、felix-search |
5 | felix-feign | Feign客户端,提供微服务的公用客户端 | book-client、user-client、search-client |
felix-gateway
是felix系统的请求入口,对外提供鉴权、限流等操作。 使用 Spring Cloud Gateway响应式网关技术,内部使用 JWT完成对所有 用户请求的鉴定;使用 Hystrix、Redis基于令牌桶算法完成限流操作。
No | 具体的服务 | 说明 | 使用的feign客户端 |
---|---|---|---|
1 | felix-book | 图书中心,提供图书基础数据接口 | |
2 | felix-user | 账户中心,提供账户授权、用户服务等接口 | book-client |
3 | felix-control | 用户端动态组件 | book-client、user-client、search-client |
4 | felix-forum | 话题论坛 | book-client、user-client、search-client |
5 | felix-search | 全文分词搜索 |
felix-user
用户模块负责处理账户相关的操作,完成用户认证,使用 JWT签发token, 提供用户对个人账户信息的操作。
依赖的通用模块:
- felix-common-core
- felix-common-web
- felix-common-pojo
BookController
获取图书信息、查看图书详情ChapterController
查看章节信息、阅读章节
业务场景:用户点击一本图书后会看到相应的章节信息,即可以阅读章节内容
分析业务场景,阅读图书的每个章节内容,因为图书是对所有用户的属于公共资源,所以考虑将每章节的信息存入redis中; 每本书有自己独有的章节;所以在redis中存储应该存在两个key,一个是bookId,一个是chapterId,应使用hash 结构 存储数据即bookId为key chapterId为hash key;那么现在又出现新的问题了如果有一本书章节很多,阅读不同的章节都 需要区请求数据库,然后在一章一章的放入缓存这种,如果在书的数量少的时候这么做似乎没什么问题;但是考虑到性能的消耗, 这么存储是不高效的;
分析阅读时的操作:
- 上一章(第一章没有上一张)
- 下一章(最后一章没有下一张)
可以把一本书的所有章节看成一个链表然后在请求其中一章后直接将整个链表都放入redis中;这就大大提升了数据访问的效率。
链表节点结构:
{
"bookId": "",
"chapterCode": "",
"pre": {
"bookId": "",
"chapterCode": "",
"pre": {},
"next": {}
},
"next": {
"bookId": "",
"chapterCode": "",
"pre": {},
"next": {}
}
}
- 关键词搜索
- 猜你喜欢
- 主页图书排行榜(热度榜、点赞榜)
业务场景:在主页最上方会有一个类似推荐榜的图书榜单;来供用户查看图书的排名信息;(每日的榜单是不同的)
目前该业务只是实现了一种排名策略(这块使用了策略模式);根据每本书的粉丝数来排名,排名数据过期时间为1天这就意味着排名是日更的 为了方便 扩展适应业务变更的需求,过期时间和排名策略支持自定义配置;
业务场景:在主页会展示猜你喜欢图书列表; 使用打分机制,首先会从缓存中拿到用户可能喜欢这本书的理由作为打分的一部分因素,
//获取用户提供的理由,以此为根据打分
//用户提供的理由包括:浏览记录、搜索记录
//理由结构体
public class Reason {
/** 搜索记录*/
private List<String> searchRecord;
/** 最近浏览图书的id*/
private List<String> lookRecent;
}
然后再根据用户书架图书同种类别的多少进行类别打分。
最后根据分数取排名考前的图书推荐给用户。
依赖的通用模块 : felix-common-core、felix-common-pojo、felix-common-web
todo