如何在Django中使用redis?

med*_*iev 92 python django redis

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

或者它应该直接用作数据库?我怀疑,因为那个github页面没有涵盖任何登录细节,没有设置..只是告诉你设置一些配置属性.

Spi*_*nim 68

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

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

  • 这通常通过为密钥设置TTL来完成:http://redis.io/commands/ttl.如果密钥到期,则必须转到DB.因此,如果密钥是redis,那么您可以使用它.请注意,这种简单的实现会导致一些问题:当一个流行的密钥到期时你有http://en.wikipedia.org/wiki/Thundering_herd_problem,你想使用http://en.wikipedia.org/wiki/Negative_cache,并且您的数据库需要http://en.wikipedia.org/wiki/Admission_control (7认同)
  • 诚实地缓存模型/响应对象不会过早优化.除非你被指控这样做(比如在heroku上),即使对于小应用程序也不会有任何缓存. (7认同)
  • 嗯,好吧,a)Redis的设计不仅仅是RAM缓存 - 它是持久的(但包括缓存功能),b)它不仅仅是简单的键值存储 - 有内置操作的列表,哈希集等. (4认同)

Ste*_*ers 59

仅仅因为Redis将内存存储在内存中并不意味着它应该是一个缓存.我见过人们将它用作数据的持久存储.

它可以用作缓存,暗示它可以作为高性能存储使用.如果您的Redis系统出现故障,您可能会丢失未再次写回磁盘的数据.有一些方法可以减轻这种危险,例如热备份副本.如果您的数据是"关键任务",就像您经营银行或商店一样,Redis可能不是您的最佳选择.但是如果你用持久的实时数据或一些社交互动的东西写一个高流量的游戏并管理数据丢失的概率是完全可以接受的,那么Redis可能值得一看.

无论如何,重点仍然是,是的,Redis可以用作数据库.

  • 对于我的公司,我们使用Redis存储从Cassandra&Postgres生成的摘要和产品.这些产品的数量(数十亿),需要改变的频率,以及我们永远不知道什么是需要的,这使得它们非常适合redis.此外,一旦你在SQL数据库中超过一百万行,redis可以成为一个很好的免费资源进行成员资格测试(例如,这个实体是否在这个域中?) (3认同)

ost*_*ard 22

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或结果不是那么有用).


Dmi*_*lov 5

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


Muh*_*eed 5

Redis 作为主数据库

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

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

Redis 数据类型官方文档

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

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

Redis 持久化官方文档


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的缓存框架官方文档


如何在 Django 中使用 Redis

我们可以将 redis python 客户端redis-py用于 Django 应用程序。

Redis python 客户端 redis-py Github

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

Django-redis基于redis-py构建,并添加了与 django 应用程序相关的额外功能。

Django-redis 文档 Github

其他库也存在。


Redis 用例和数据类型

一些用例

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

按核心数据结构类型划分的顶级 Redis 用例


使用 Redis 的大型科技公司

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 
Run Code Online (Sandbox Code Playgroud)