Djangoでredisを使用するにはどうすればよいですか?


95

redis-cacheについて聞いたことがありますが、どのように機能しますか?どういうわけか、rdbmsクエリをキャッシュすることにより、djangoと私のrdbmsの間のレイヤーとして使用されますか?

それともデータベースとして直接使用されることになっていますか?そのgithubページはログインの詳細をカバーしていないので、私は疑っています。セットアップはありません。構成プロパティを設定するように指示するだけです。

回答:


72

このRedis用Pythonモジュールのreadmeには、明確な使用例があります。http://github.com/andymccurdy/redis-py

RedisはRAMキャッシュとして設計されています。これは、キーの基本的なGETおよびSETに加えて、辞書などのコレクションの格納をサポートします。RDBMSクエリは、その出力をRedisに保存することでキャッシュできます。目標は、Djangoサイトを高速化することです。速度が必要になるまでRedisまたは他のキャッシュの使用を開始しないでください-時期尚早に最適化しないでください。


しかし、redisのキャッシュを更新する必要があることをどのように確認しますか?レコード数を比較しますか、それとももっと良い方法がありますか?
Marconi

7
これは通常、キーのTTLを設定することによって行われます:redis.io/commands/ttl。キーの有効期限が切れた場合は、DBにアクセスする必要があります。したがって、キーがredisの場合は、それを使用します。人気のキーはあなたが持っている満了時:(注)この単純な実装では、いくつかの問題を引き起こすことen.wikipedia.org/wiki/Thundering_herd_problemを、使用したいen.wikipedia.org/wiki/Negative_cacheを、そしてあなたのDBは必要en.wikipediaを。 org / wiki / Admission_control
Spike Gronim

4
うーん、まあ、a)RedisはRAMキャッシュ以上のものとして設計されています-永続的です(ただし、キャッシュの機能が含まれます)、b)単純なキーと値のストレージ以上のものです-組み込みの操作を持つリスト、ハッシュセットなどがあります。
Olli

8
正直にモデル/応答オブジェクトをキャッシュしても、時期尚早の最適化には該当しません。(herokuのように)課金されていない限り、小さなアプリでもキャッシュに問題はありません。
vikki 2013年

1
スピードではなく、リソースです。キャッシュ内のテーブルは安価です。
dman

60

Redisが物事をメモリに保存するからといって、それがキャッシュであることを意味するわけではありません。これをデータの永続ストアとして使用している人を見てきました。

キャッシュとして利用できることは、高性能ストレージとして有用であることのヒントです。Redisシステムがダウンしても、ディスクに再度書き込まれなかったデータが失われる可能性があります。このような危険を軽減する方法はいくつかあります(例:ホットスタンバイレプリカ)。銀行や店舗を経営している場合のように、データが「ミッションクリティカル」である場合、Redisは最適な選択肢ではない可能性があります。しかし、永続的なライブデータやソーシャルインタラクションなどを使用してトラフィックの多いゲームを作成し、データ損失の確率を許容できる範囲で管​​理する場合、Redisは一見の価値があります。

とにかく、要点は残っています。はい、Redisはデータベースとして使用できます。


3
私の会社では、Cassandra&Postgresから生成された要約と製品を保存するためにRedisを使用しています。これらの製品の数量(数十億)、どれくらいの頻度で変更する必要があるか、いつでも何が必要かわからないことが、Redisに最適です。また、SQLデータベースの何百万行以上になると、redisはメンバーシップテストの優れた補足リソースになります(たとえば、これらのエンティティはこのドメインにありますか?)
David

数か月前にまったく同じことを言った私の答えがあなたの質問に飛び越えられたのはなぜだろうと思わずにはいられません。
ostergaard 2017

22

Redisは基本的に、たくさんのベルとホイッスルを備えた「メモリ内」のKVストアです。非常に柔軟性があります。キャッシュのような一時的なストアとして、またはデータベースのような永続的なストアとして使用できます(他の回答で言及されている警告があります)。

Djangoと組み合わせると、Redisの最もよくある/最も一般的な使用例は、おそらく「応答」とセッションをキャッシュすることです。

ここhttps://github.com/sebleier/django-redis-cache/にバックエンドがあり、Django docsのすばらしいドキュメントhttps://docs.djangoproject.com/en/1.3/topics/cache/

私は最近、https://github.com/erussell/django-redis-statusを使用してキャッシュを監視し始めました。(redisでmaxmemoryを構成するか、結果があまり役に立ちません)。



2

プライマリデータベースとしてのRedis

はい、Redis Key-Valueストアをプライマリデータベースとして使用できます。Redisはキーと値のペアを保存するだけでなく、次のようなさまざまなデータ構造もサポートします

  1. リスト
  2. セットする
  3. ソートされたセット
  4. ハッシュ
  5. ビットマップ
  6. ハイパーログ

Redisデータ型公式ドキュメント

RedisはメモリのKey-Valueストアにあるため、Redisサーバーに障害が発生した場合、データが失われることに注意する必要があります。

Redisは、データチェックの公式ドキュメントも保持できます。

Redis Persistenceの公式ドキュメント


キャッシュとしての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を使用する方法

Djangoアプリケーションには、redis pythonクライアントredis-pyを使用できます。

Redis Pythonクライアントredis-py Github

djangoキャッシュバックエンドにDjango-redisを使用できます。

Django-redisredis-py上にビルドします、djangoアプリケーションに関連する追加機能が追加されています。

Django-redis doc Github

他のライブラリも存在します。


Redisのユースケースとデータ型

いくつかのユースケース

  • セッションキャッシュ
  • リアルタイム分析
  • ウェブキャッシング
  • リーダーボード

コアデータ構造タイプ別の上位Redisユースケース


Redisを使用している大手企業

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.