侧边栏壁纸
  • 累计撰写 23 篇文章
  • 累计创建 12 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MySQL和Redis的区别

usoo
2021-08-10 / 0 评论 / 0 点赞 / 74 阅读 / 0 字

前言

说到数据库,我在测试工作中经常接触到的就是MySQL和Redis了。那么同样是作为存储数据的中间件,为什么会存在两种不同类型的数据库呢,两者有什么区别和联系,以及适合应用场景的选型。下面我们来聊聊MySQL和Redis。

一、数据库类型

MySQL

  • 是关系型数据库,数据是以表格的形式存储。这些表格之间通过关系(如外键)相互关联,每一行代表一个记录,每一列代表一个字段。但支持的数据类型较少,这也意味着不够灵活。
    mysql-20240418094332

Redis

  • 是非关系型数据库,数据是以键值对的形式存储。其中值可以是多种数据类型,如字符串、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set)等。

二、存储形式

MySQL

  • 数据存储在磁盘中,读写操作涉及磁盘 I/O,相对 Redis 来说速度较慢。
  • 例如,在一个包含大量用户数据的数据库中,查询一个用户的详细信息可能需要在磁盘上查找对应的行数据,花费的时间会比从内存中读取要长。
  • 一般采用事务日志和快照等方式保证数据的持久化。

Redis

  • 数据存储在内存中,读写速度非常快,适合高并发、低延迟的场景。

  • 由于内存空间有限,没法存储大量数据。

  • 定期写入磁盘或者以日志的形式追加到文件中,避免突然宕机,导致内存数据全部丢失。

    39bbb78274d8cc5cc047461923e3ef47

三、数据一致性

MySQL

  • 通过事务机制来保证数据的一致性。ACID(原子性、一致性、隔离性、持久性)特性是关系型数据库的重要特点,MySQL 可以通过严格的事务控制来确保数据在并发操作下的正确性。
  • 例如,在一个银行转账系统中,使用 MySQL 的事务来确保从一个账户扣除金额和另一个账户增加金额这两个操作要么同时成功,要么同时失败,保证了数据的一致性。

mysql-20230919103025

Redis

  • 数据的更新可能不会立即在所有节点上生效,但最终会达到一致状态。
  • 数据存在缓存时,触发更新接口,先更新数据的缓存,再更新数据库。
  • 数据存在缓存时,触发更新接口,先清空缓存数据,再更新数据库。
  • 数据上锁,确保在当前服务下同一条数据同一时间只允许一个事务在处理,如果有其他事务介入直接拒绝。

四、应用场景

MySQL

  • 适合存储结构化的业务数据,如企业的客户信息、订单数据、财务数据等。这些数据需要严格的事务处理、复杂的查询(如多表联合查询)和数据完整性约束。
  • 例如,在一个电商系统中,MySQL 用于存储用户订单信息、商品信息、商家信息等,通过 SQL 查询来处理订单状态查询、商品搜索等业务逻辑。

Redis

  • 缓存是 Redis 最常见的用途,由于 Redis 的数据存储在内存中,所以读写速度非常快,远超基于磁盘存储的数据库。使用 Redis 缓存可以极大地提高应用的响应速度和吞吐量。
    redis-d44c2397-5994-452f-8b7b-eb85d2b87685

  • 记录用户登录状态。
    通常下,用户登录成功之后,用户登录之后的状态信息,会保存到Redis中。这样后面该用户访问其他接口的时候,会直接从Redis中查询用户登录状态,如果可以查到数据,说明用户已登录,则允许做后续的操作。

  • 做排行榜。
    很多网站有排行榜的功能,比如:商城中有商品销量的排行榜,游戏网站有玩家获得积分的排行榜。在游戏排行榜中,通过 Redis 的有序集合存储玩家的分数和 ID,能够快速地更新和查询排名信息。

小结

我们知道MySQL存储在磁盘里,Redis存储在内存里,所以MySQL偏向于存数据,Redis偏向于快速取数据。Redis既可以用来做持久存储,也可以做缓存,如果存储大量数据,只能花更多的钱去购买内存,造成在一些不需要高性能的地方是相对比较浪费的,而且Redis查询复杂的表关系时不如MySQL,所以可以把热门的数据放Redis,MySQL存基本数据。现在目前大多数公司的存储都是MySQL(主) + Redis(辅),以此减轻MySQL的压力并提高数据读写速率。

0

评论区