【问题标题】:How can I use redis with Django?如何在 Django 中使用 redis?
【发布时间】:2011-04-17 14:44:01
【问题描述】:

我听说过 redis-cache,但它究竟是如何工作的?通过以某种方式缓存 rdbms 查询,它是否用作 django 和我的 rdbms 之间的层?

还是应该直接用作数据库?我对此表示怀疑,因为该 github 页面不包含任何登录详细信息,因此没有设置.. 只是告诉您设置一些配置属性。

【问题讨论】:

    标签: python django redis


    【解决方案1】:

    这个用于 Redis 的 Python 模块在自述文件中有一个明确的使用示例:http://github.com/andymccurdy/redis-py

    Redis 被设计成一个 RAM 缓存。它支持基本的 GET 和 SET 键以及字典等集合的存储。您可以通过将 RDBMS 查询的输出存储在 Redis 中来缓存它们。目标是加速您的 Django 站点。在需要速度之前不要开始使用 Redis 或任何其他缓存 - 不要过早优化。

    【讨论】:

    • 但是如何检查redis上的缓存是否需要更新呢?你比较记录数还是有更好的方法?
    • 这通常通过为密钥设置一个 TTL 来完成:redis.io/commands/ttl。如果密钥过期,您必须去数据库。所以如果密钥在redis中,那么你就使用它。请注意,这个的简单实现会导致一些问题:当流行密钥过期时,你有en.wikipedia.org/wiki/Thundering_herd_problem,你想使用en.wikipedia.org/wiki/Negative_cache,而你的数据库需要en.wikipedia.org/wiki/Admission_control
    • 嗯,嗯,a) Redis 的设计不仅仅是 RAM 缓存 - 它是持久的(但包括缓存功能),b) 它不仅仅是简单的键值存储 - 还有列表、哈希集等. 带有内置操作。
    • 诚实地缓存模型/响应对象不属于过早优化。除非您被收费这样做(例如在 heroku 上),否则即使对于小型应用程序,缓存也没有什么坏处。
    • 这不是关于速度,而是关于资源。缓存中的表会更便宜。
    【解决方案2】:

    Redis 基本上是一个“内存中”的 KV 存储,有很多花里胡哨的东西。它非常灵活。您可以将其用作临时存储,如缓存,或永久存储,如数据库(其他答案中提到的注意事项)。

    与 Django 结合使用时,Redis 的最佳/最常见用例可能是缓存“响应”和会话。

    这里有一个后端https://github.com/sebleier/django-redis-cache/,这里有 Django 文档中的优秀文档:https://docs.djangoproject.com/en/1.3/topics/cache/

    我最近开始使用https://github.com/erussell/django-redis-status 来监控我的缓存 - 很有魅力。 (在 redis 上配置 maxmemory 否则结果不是很有用)。

    【讨论】:

      【解决方案3】:

      仅仅因为 Redis 将事物存储在内存中并不意味着它就是缓存。我见过人们将它用作数据的持久存储。

      它可以用作缓存,这表明它可用作高性能存储。如果您的 Redis 系统出现故障,尽管您可能会丢失未再次写回磁盘的数据。有一些方法可以减轻这种危险,例如一个热备副本。 如果您的数据是“关键任务”,例如您经营一家银行或一家商店,那么 Redis 可能不是您的最佳选择。但是,如果您使用持久的实时数据或一些社交互动内容编写高流量游戏,并且将数据丢失的可能性控制在完全可以接受的范围内,那么 Redis 可能值得一看。

      不管怎样,重点是,是的,Redis可以当数据库使用。

      【讨论】:

      • 对于我的公司,我们使用 Redis 存储从 Cassandra 和 Postgres 生成的摘要和产品。这些产品的数量(数十亿),需要多久更换一次,我们永远不知道任何时候需要什么,这使得它们非常适合 redis。此外,一旦 SQL 数据库中的任何内容超过一百万行,redis 就可以成为会员测试的一个很好的免费资源(例如,这些实体在这个域中吗?)
      【解决方案4】:

      您还可以将 Redis 用作 Django 应用程序中分布式任务的队列。您可以将其用作CeleryPython RQ 的消息代理。

      【讨论】:

        【解决方案5】:

        Redis 作为主数据库

        是的,您可以使用 Redis 键值存储作为主数据库。 Redis 不仅存储键值对,它还支持不同的数据结构,如

        1. 列表
        2. 设置
        3. 排序集
        4. 哈希
        5. 位图
        6. 超级日志

        Redis Data types Official doc

        Redis 在内存键值存储中,因此如果发生 Redis 服务器故障,您的数据将会丢失。

        Redis 也可以持久化数据检查官方文档。

        Redis Persistence Official doc


        Redis 作为缓存

        是的,Redis 位于 Django 和 RDBMS 之间。

        工作原理

        given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

        Django’s cache framework Official Doc


        如何在 Django 中使用 Redis

        我们可以在 Django 应用中使用 redis python 客户端redis-py

        Redis python client redis-py Github

        我们可以使用 Django-redis 作为 django 缓存后端。

        Django-redis 建立在 redis-py 之上,并添加了与 django 应用程序相关的额外功能。

        Django-redis doc Github

        其他库也存在。


        Redis 用例和数据类型

        一些用例

        • 会话缓存
        • 实时分析
        • 网页缓存
        • 排行榜

        Top Redis Use Cases by Core Data structure types


        使用 Redis 的大型科技公司

         Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-22
          • 2014-03-22
          • 2018-07-05
          • 2021-01-15
          相关资源
          最近更新 更多