项目DAO层设计 | 青训营笔记

116 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天

课程内容与选题缘由

之前团队伙伴设计了MySQL中的数据库表以及Redis键值对,为了方便队员之间的协作与加强对数据库这一块内容的理解,产出这篇介绍Dao层设计的笔记。

DAO层是什么

DAO层是一种用于后台开发的软件设计模式。它作为应用程序数据源(如数据库)之间的一个中介。DAO层允许项目设计的时候更好地分离关注点,并在必要时更容易切换到不同的数据库解决方案,因为可以在DAO层进行改变而不影响应用程序的其他部分。DAO层通常包含对数据进行CRUD对应操作的方法,并处理与数据库的连接和事务。

本项目DAO的设计思路

1

MySQL和Redis相关的操作分开存放,每一个板块的文件中均包含:

  • 数据库表的创建与数据库的初始化
  • 与书库相关的CRUD操作

本项目中,MySQL保存的数据访问频率较低,而Redis中保存的数据较高。以数据的访问频率进行有区分性地存放,能够提升服务响应的性能,同时减轻MySQL的压力。

MySQL中的数据库表

2

3

在本地通过一次AutoMigrate 根据标记好tag的结构体进行自动建表。

Redis中的键值对

4

互动接口

  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的用户 在聊天列表中的好友。