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

时间:2010-10-19 08:53:56

标签: php mysql redis

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

6 个答案:

答案 0 :(得分:78)

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

根据我的经验,与可伸缩性(许多用户......)相关的性能问题最终会迫使您添加某种缓存以从MySQL服务器中删除负载,而redis / memcached非常擅长。

答案 1 :(得分:20)

我不是Redis专家,但从我收集的内容来看,两者都非常不同。 Redis:

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

我认为当你有一小部分不需要MySQL提供的关系结构并需要快速访问的数据时,你可能想要使用Redis。例如,这可以是动态Web界面中的会话数据,需要经常且快速地访问。

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

我认为你的问题是错误的,你应该问自己哪一个更适合某个应用程序,而不是哪个应用程序适合系统;)

答案 2 :(得分:12)

MySQL是一个关系数据存储。如果已配置(例如使用 innodb 表),则MySQL是可靠的数据存储,提供ACID次交易。

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

Redis has some very neat features,例如集合,列表和排序列表。

These slides on Redis将统计信息收集和会话管理列为示例。还有一个以redis编写的twitter clone 作为示例,但这并不意味着twitter使用redis(twitter use MySQL具有大量的memcache缓存)。

答案 3 :(得分:6)

MySql -

1)结构化数据 2)ACID 3)繁重的交易和查询。

Redis -

1)非结构化数据 2)简单快速的查找。例如 - 会话的标记 3)用它来缓存层。

答案 4 :(得分:0)

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

在这里阅读:Redis vs MySQL Benchmarks

答案 5 :(得分:0)

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

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

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