这是我参与「第五届青训营 」伴学笔记创作活动的第15天。
基本介绍
MySQL数据库为关系型数据库(即使用关系模型组织数据,支持通用的的SQL语句),数据存放在磁盘中。
Redis数据库为非关系型数据库,采用Key-Value形式存储数据,数据存放在内存中。
功能区别
除去基本介绍中提到的显而易见的定义上的区别,两种数据库在实际使用中,各有各的优劣,基于我个人浅薄的理解,可以总结出以下几点:
- MySQL存储的数据存放在硬盘中,而Redis存储的数据存放在内存中,显然,当涉及到频繁的数据库读写时,Redis在性能上占有很大优势。
- 基于第一点,MySQL存储的数据比Redis更加安全与稳定。
- MySQL可以通过SQL语句进行复杂表的关联查询,而使用Redis若想实现相同的功能,则较难实现。
以上只是在思考项目中怎样选用数据库时考虑到的几点,MySQL与Redis之间的区别远不止这些,感兴趣的读者请自行查阅相关资料。
项目使用
基于两者的区别,在项目中采用MySQL数据库作为永久性存储的数据库,而Redis数据库则作为缓存层,在极简版抖音项目中,几乎所有功能都需要进行用户鉴权,所以Redis缓存层主要用于缓存用户令牌Token,优化性能。
一开始的想法是,像项目原始Demo里面提供的Demo数据一样,token为Key,User结构体为Value
map[string]User
在Redis中,使用HMset可以存储结构体为Value值。 不过,在讨论过后,搭档认为,这种存储方案并不NoSQL,后来我经过思考,也否定了这种方案,确实是不够NoSQL,而且也损害了Redis这种键值存储数据库快速读写数据的优点,基于这种想法,最终决定将结构体JSON序列化后进行存储,而在获取用户信息数据的时候,只需要执行反序列化即可。采取这种方案,只需要执行Redis的Set命令即可,方便快捷。