我一直在看Redis。它看起来很有趣。但是从实际的角度来看,在什么情况下使用 Redis 而不是 MySQL 更好?
6 回答
忽略整个 NoSQL 与 SQL 的争论,我认为最好的方法是将它们结合起来。换句话说,将 MySQL 用于系统的某些部分(复杂查找、事务),将 redis 用于其他部分(性能、计数器等)。
以我的经验,与可伸缩性相关的性能问题(很多用户......)最终会迫使你添加某种缓存来消除 MySQL 服务器的负载,而 redis/memcached 非常擅长这一点。
我不是 Redis 专家,但从我收集到的信息来看,两者都有很大的不同。雷迪斯:
- 不是关系数据库(没有花哨的数据组织)
- 将所有内容存储在内存中(更快,更少空间,在发生崩溃时可能不太安全)
- 在各种虚拟主机上的部署较少(如果您不是自己托管)
我认为当您拥有少量不需要 MySQL 提供的关系结构并且需要快速访问的数据时,您可能希望使用 Redis。例如,这可能是需要经常快速访问的动态 Web 界面中的会话数据。
Redis 也可以用作一些 MySQL 数据的缓存,这些数据将被非常频繁地访问(即:当用户登录时加载它)。
我认为您问的问题是错误的,您应该问自己哪个更适合应用程序,而不是哪个应用程序适合系统;)
MySQL 是一种关系数据存储。如果已配置(例如使用innodb表),MySQL 是提供ACID事务的可靠数据存储。
Redis 是一个 NoSQL 数据库。它更快(如果使用正确),因为它在速度与可靠性(很少使用 fsync 运行,因为这会极大地损害性能)和事务(可以用SETNX缓慢地近似)。
Redis 有一些非常简洁的特性,例如集合、列表和排序列表。
这些关于 Redis 的幻灯片列出了统计信息收集和会话管理作为示例。还有一个用redis编写的twitter克隆作为例子,但这并不意味着twitter使用redis(twitter使用带有大量memcache缓存的MySQL)。
mysql -
1) 结构化数据 2) ACID 3) 繁重的事务和查找。
雷迪斯 -
1) 非结构化数据 2) 简单快速的查找。例如 - 会话的令牌 3) 将其用于缓存层。
Redis、SQL(+NoSQL)各有优缺点,而且经常并存:
- Redis - 将局部变量移至单独的应用程序
- 易于从局部变量/原型转移
- 永久存储
- 多个用户/应用程序都看到相同的数据
- 可扩展性
- 故障转移
- (-) 难以对数据进行更高级的查询/问题
- NoSQL
- 将原始数据转储到“数据库”
- 所有/大部分 Redis 功能
- (-) 与 SQL 相比,更难进行高级查询
- SQL
- 数据之间的高级查询
- 所有/大部分 Redis 功能
- (-) 需要将数据放入“模式”(想想工作表/Excel)
- (-) 比 Redis/NoSQL 更难获取简单的值
(不同的 SQL/NoSQL 解决方案可能会有所不同。您应该阅读CAP 定理和ACID,了解为什么一个系统不能同时为您提供所有信息)
根据官网介绍,Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。实际上,Redis 是一种高级键值存储。它实际上是超快的,具有惊人的高吞吐量,因为它每秒可以执行大约 110000 次设置,每秒大约 81000 次获取。它还支持一组非常丰富的数据类型来存储。事实上,Redis 每次都将数据保存在内存中,但也将数据持久保存在磁盘数据库中。因此,它带来了一个权衡:惊人的速度和数据集的大小限制(根据内存)。在本文中,为了与 MySQL 进行一些基准比较,我们将仅使用 Redis 作为缓存引擎。
在这里阅读:Redis vs MySQL 基准测试