【问题标题】:How to use Redis as a Cache Server for Django project?如何使用 Redis 作为 Django 项目的缓存服务器?
【发布时间】:2011-12-01 03:14:08
【问题描述】:

简单来说,我如何在我的 django 项目中设置 redis 进行缓存?

我上周一直在尝试解决缓存问题,但只是没有到位。

我需要做什么才能启动和运行缓存。只需照顾标头并安装redis??

各种教程和介绍似乎都认为理所当然的基本步骤使我无法理解如何实现缓存。这不是无处不在吗?有人是怎么知道这件事的?

【问题讨论】:

  • 之前有人问过这个问题:stackoverflow.com/questions/3801379/…
  • @jdi 我看过那篇文章(并阅读了它所引用的自述文件)。并在谷歌上阅读了无数文章。就像我说的,我错过了一些东西。我需要帮助。很抱歉问了一个已经被问到的问题,但答案对我来说不够简单:-/我需要用更简单的术语来表达。
  • 例如,在为您上面链接的问题链接(并选择作为答案)的自述文件中,“缓存”一词没有使用一次。
  • 他们可能不在 redis-py 自述文件中使用“缓存”一词的原因是因为它不仅仅是一个缓存。它是一个内存数据库。它的一种用途就像缓存一样,要做到这一点,您将使用在您的密钥上设置 EXPIRE 时间。请参阅我的以下答案。

标签: django caching redis


【解决方案1】:

好的,所以也许您缺少的连接是,一旦您运行了 redis,并且您可以使用 python http://github.com/andymccurdy/redis-py 设置和从中获取值,您就可以开始执行以下操作:

(为了简单起见的伪代码)

client_request_for_data():
    check if redis has this data already under a specific "key"
       True:
          * GET value from redis using "key"
          * return it!
       False:
          * Do the normal process of building the data
          * SET it into redis with a unique "key", with maybe an EXPIRE time
          * return it!

这里的想法是,您开始将现有代码包装在为客户端请求生成结果的位置,并首先检查密钥是否存在,如果存在则返回它。

【讨论】:

  • aaand 。谢谢@jdi,我花了几天时间把头撞在墙上,而你只是为我把它们放在一起!我很高兴能参与进来!
  • 没有问题!我知道情况如何。有时,在有人改写或给我一个明确的例子之前,概念也不太适合我。
  • 这是否意味着每个 client_request_for_data() 函数都必须创建自己的 Redis 客户端实例?
  • @RégisB.:不,这根本没有定义您实际管理 Redis 客户端连接的方式。它很可能是您在类中不断重用的持久连接,或者如果请求完全不相关并且您无法重用持久连接,则每次都可能是新连接。这仅说明了如何在请求上下文中使用该连接来确定响应是否被缓存。
  • 只是为了说明明显的实际代码需要比上面的伪代码更复杂一点:) 尤其是在竞争条件方面。在上面的 jdi 伪代码中,“检查”和“设置”步骤之间存在竞争条件——在现实世界中,您不会单独执行 GETSET!您可以使用MULTI 事务执行SETNXWATCH。最重要的是,在实现此功能之前,请先对 Redis 竞争条件进行一些谷歌搜索。
猜你喜欢
  • 2017-02-19
  • 2020-06-29
  • 2015-02-12
  • 2020-12-25
  • 2019-10-23
  • 1970-01-01
  • 2017-06-22
  • 2016-01-14
  • 2015-11-06
相关资源
最近更新 更多