MySQL与Redis基本介绍及在项目中的使用方法| 青训营笔记

108 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第一篇笔记。

基本介绍

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 //User为用户信息结构体

在Redis中,使用HMset可以存储结构体为Value值。 不过,在和搭档讨论过后,搭档认为,这种存储方案,“太不NoSQL了”(原话),后来我经过思考,也否定了这种方案,确实是不够NoSQL,而且也“伤害”了Redis这种键值存储数据库快速读写数据的优点,基于这种想法,最终我们决定,将结构体JSON序列化后进行存储,而在获取用户信息数据的时候,只需要执行反序列化即可。采取这种方案,只需要执行Redis的Set命令即可,方便快捷。