何时在PHP应用程序中使用Redis代替MySQL?


72

我一直在看Redis。看起来很有趣。但是从实际的角度来看,在哪种情况下最好使用Redis而不是MySQL?


您是否已阅读:mysqlperformanceblog.com/2009/08/27/looking-at-redis?我不太懂(我是法国人),但似乎很有趣。
MatTheCat 2010年

谢谢。是的,这很有趣。我仍然不确定实际的应用程序。
james.bcn 2010年

1
虽然不能代替Redis,但应记住MySQL支持哈希索引(默认为较慢但可排序的btree)。然后,可以通过增加my.ini值将所有密钥存储在内存中key_buffer_size。这可能不会取代redis,但是请记住,使用这些东西可以使您更接近NoSQL的性能。您可以在将Redis添加到堆栈之前考虑这些因素。
SilentSteel

Answers:


86

忽略整个NoSQL与SQL的争论,我认为最好的方法是将它们结合起来。换句话说,对于系统的某些部分(复杂的查询,事务)使用MySQL,而对其他部分(性能,计数器等)则使用redis。

以我的经验,与可伸缩性(很多用户...)相关的性能问题最终迫使您添加某种缓存来减轻MySQL服务器的负载,redis / memcached擅长此事。


21

我不是Redis专家,但是从我收集的数据来看,两者截然不同。Redis:

  • 不是关系数据库(没有花哨的数据组织)
  • 将所有内容存储在内存中(更快,更小空间,如果发生崩溃,可能不太安全)
  • 不太广泛地部署在各种Web主机上(如果您不托管自己的主机)

我认为当您的数据量很少而不需要MySQL提供的关系结构并且需要快速访问时,您可能希望使用Redis。例如,这可能是动态Web界面中的会话数据,需要经常且快速地对其进行访问。

Redis还可以用作某些MySQL数据的缓存,这些MySQL数据将经常被访问(即:当用户登录时加载它)。

我认为您是在以错误的方式提出这个问题,您应该问自己哪个更适合某个应用程序,而不是哪个应用程序适合系统;)


1
谢谢-也许我以错误的方式提出了这个问题,但是如果我不明白何时使用Redis比使用MySQL更合适,我将无法回答任何一个问题!
james.bcn 2010年

15

MySQL是一个关系数据存储。如果进行了配置(例如使用innodb表),则MySQL是提供ACID事务的可靠数据存储。

Redis是一个NoSQL数据库。它更快(如果正确使用),因为它以可靠的速度进行交易(很少使用fsync运行,因为这会严重损害性能)和事务(可以通过SETNX缓慢地近似)。

Redis具有一些非常简洁的功能,例如集合,列表和排序列表。

这些关于Redis的幻灯片以统计信息收集和会话管理为例。还有一个用redis编写的twitter克隆示例,但这并不意味着twitter使用redis( twitter使用具有大量内存缓存的MySQL)。


6

MySQL-

1)结构化数据2)ACID 3)繁重的事务和查找。

Redis-

1)非结构化数据2)简单快速的查找。例如-会话令牌3)将其用于缓存层。


2

Redis,SQL(+ NoSQL)有其优点和缺点,并且经常并存:

  • Redis-局部变量移至单独的应用程序
    • 易于从局部变量/原型中移出
    • 持久存储
    • 多个用户/应用程序都看到相同的数据
    • 可扩展性
    • 故障转移
    • (-)难以对数据进行更高级的查询/问题
  • NoSQL
    • 将原始数据转储到“数据库”中
    • 全部/大部分Redis功能
    • (-)与SQL相比,更难以执行高级查询
  • 的SQL
    • 数据之间的高级查询
    • 全部/大部分Redis功能
    • (-)需要将数据放入“模式”(思考表/ Excel)
    • (-)比Redis / NoSQL难于输入/输出简单值

(不同的SQL / NoSQL解决方案可能会有所不同。您应该阅读CAP定理ACID,以了解为什么一个系统不能同时为您提供全部功能)


-1

根据官方网站的说法,Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。实际上,Redis是高级键值存储。实际上,它具有超高的吞吐率,而且速度超快,因为它每秒可以执行约110000个SET,每秒执行约81000个GET。它还支持一组非常丰富的数据类型来存储。实际上,Redis每次都将数据保留在内存中,但也将其保留在磁盘上。因此,这需要权衡:惊人的速度和数据集的大小限制(根据内存)。在本文中,为了有一些与MySQL相比的基准,我们将仅使用Redis作为缓存引擎。

在这里阅读:Redis vs MySQL基准测试

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.