这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
课程内容与选题缘由
之前团队伙伴设计了MySQL中的数据库表以及Redis键值对,为了方便队员之间的协作与加强对数据库这一块内容的理解,产出这篇介绍Dao层设计的笔记。
DAO层是什么
DAO层是一种用于后台开发的软件设计模式。它作为应用程序和数据源(如数据库)之间的一个中介。DAO层允许项目设计的时候更好地分离关注点,并在必要时更容易切换到不同的数据库解决方案,因为可以在DAO层进行改变而不影响应用程序的其他部分。DAO层通常包含对数据进行CRUD对应操作的方法,并处理与数据库的连接和事务。
本项目DAO的设计思路
MySQL和Redis相关的操作分开存放,每一个板块的文件中均包含:
- 数据库表的创建与数据库的初始化
- 与书库相关的CRUD操作
本项目中,MySQL保存的数据访问频率较低,而Redis中保存的数据较高。以数据的访问频率进行有区分性地存放,能够提升服务响应的性能,同时减轻MySQL的压力。
MySQL中的数据库表
在本地通过一次AutoMigrate 根据标记好tag的结构体进行自动建表。
Redis中的键值对
互动接口
KeyVideoScoreZset = "video:score" //视频 以及 累积的点赞数量
KeyVideoLikedZsetPrefix = "video:liked:" //这是 键 的前缀,搭配 视频ID 成为一个完成的键;值是对该视频按了点赞的用户ID
KeyUserFavorZsetPrefix = "video:favorite:" //这是 键 的前缀,搭配 用户ID 成为一个完整的键;值是该用户点过赞的视频ID
因为视频的点赞数据更新变化地比较快,并且被用户调用得十分频繁,因此用Redis的键值对进行存放
同理,视频与用户的点赞关系,也可以分别用两个键值对保存,用于不同的场景进行调用:
- video:liked:14256 这个键代表着 ID为14256的视频 对应的点赞的用户ID的。用于记录点赞的用户,避免重复点赞。
- video:favorite:335 这个键代表着 ID为335的用户 对应的喜欢的视频。用于喜欢列表的视频流加载。
社交接口
KeyUserFansZsetPrefix = "user:fans:" //这是 键 的前缀,搭配 用户ID 成为一个完整的键;值是该用户的粉丝的ID
KeyUserFollowZsetPrefix = "user:follow:" //这是 键 的前缀,搭配 用户ID 成为一个完整的键;值是该用户关注的博主的ID
KeyFriendshipZsetPrefix = "user:friend:" //这是 键 的前缀,搭配 用户ID 成为一个完整的键;值是该用户聊天列表中的好友
因为用户的粉丝、关注关系也变化地很平常,因此用键值对保存:
- user:fans:335 这个键代表着 ID为335的用户 对应的粉丝ID。
- user:follow:335 这个键代表着 ID为335的用户 对应的关注的用户的ID。
- user:friend:335 这个键代表着 ID为335的用户 在聊天列表中的好友。