Djangoキャッシュ

9152 ワード

公式ドキュメント
キャッシュバックエンドをRedisに設定
Django 缓存_第1张图片
DjangoのキャッシュをRedisに設定
1.インストール
pip install django-redis Hiredis

hiredisはCで書かれたRedisクライアントであり、彼の解析器はdjango-redisで使用できます.
2.settings.pyで次のように設定します.
Redisリファレンスhttp://django-redis-chs.readthedocs.io/zh_CN/latest/
CACHES = {
     
    "default": {
     
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://172.16.153.130:6379/1",
        "OPTIONS": {
     
            "CONNECTION_POOL_KWARGS": {
     "max_connections": 100},  #         ,      100
            "PARSER_CLASS": "redis.connection.HiredisParser",  # pip install Hiredis
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "",  #     
        }
    }
}

3.使用:
from django.core.cache import cache

キー値ペアの設定
cache.set("foo", "value", timeout=10)  #        foo,    value,       10  

キー値ペアの取得
cache.get('foo')

TTL値取得(タイムアウト時間)
cache.ttl('foo')

キャッシュセッション
在这里插入图片描述
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

キャッシュビュー
ビュー全体をキャッシュ
from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...
60 * 15は60秒に15を乗じた900秒です
キャッシュビュー内のリクエストメソッドの内容
在这里插入图片描述 在这里插入图片描述
Django 缓存_第2张图片 pyinxiangcom/25594833/ENResource/p763)]
キャッシュテンプレートクリップ
[外部チェーン画像の転送に失敗しました.ソース局には盗難防止チェーンのメカニズムがある可能性があります.画像を保存して直接アップロードすることをお勧めします(img-qlCZwrID-161458414968)(evernotecid://BBD579E0-7127-4377-8E81-47BEA574FA91/appyinxiangcom/25594833/ENResource/p765)]
キャッシュAPIの使用
django.core.cache.cache
ショートカットとして、デフォルトのキャッシュはdjangoを通過することができる.core.cache.Cacheリファレンス:
>>> from django.core.cache import cache

基本的な使い方/基本的なインタフェースは:
cache.set(key, value, timeout=DEFAULT_TIMEOUT, version=None)¶
cache.set(‘my_key’, ‘hello, world!’, 30) cache.get(key, default=None, version=None)¶
cache.get(‘my_key’) ‘hello, world!’ keyは文字列で、valueはpicklable形式のPythonオブジェクトを任意に使用できます.
timeoutパラメータはオプションで、デフォルトはCACHESの対応するバックエンドのtimeoutパラメータです.キャッシュに値が存在する秒数です.timeoutがNoneに設定されている場合、永続的にキャッシュされます.timeoutが0の場合、値はキャッシュされません.
オブジェクトがキャッシュにない場合、cache.get()はNoneを返します.
Wait 30 seconds for ‘my_key’ to expire…
cache.get(‘my_key’)NoneキャッシュにNoneの値を格納しないことをお勧めします.格納したNoneの値がキャッシュヒットで返されたNoneの値か分からないからです.
cache.get()はデフォルトパラメータを持つことができます.オブジェクトがキャッシュに存在しない場合は、指定した値が返されます.
cache.get(‘my_key’, ‘has expired’) ‘has expired’ cache.add(key,value,timeout=DEFAULT_TIMEOUT,version=None)/キーが存在しない場合、add()メソッドを使用してキーを追加できます.set()と同じパラメータですが、指定したキーがすでに存在する場合はキャッシュの更新は試みられません.
cache.set(‘add_key’, ‘Initial value’) cache.add(‘add_key’, ‘New value’) cache.get(‘add_key’)‘Initial value’add()で格納されている値がキャッシュにあるかどうかを知りたい場合は、戻り値をチェックします.値が保存されている場合はTrue、そうでない場合はFalseを返します.
cache.get_or_set(key,default,timeout=DEFAULT_TIMEOUT,version=None)/キー値を取得したい場合や、キーがキャッシュに存在しない場合に値を設定する場合はget_or_set()メソッド.get()と同じパラメータがありますが、デフォルトでは、単純に戻るのではなく、そのキーに新しいキャッシュ値を設定します.
cache.get(‘my_new_key’) # returns None cache.get_or_set(‘my_new_key’,‘my new value’,100)‘my new value’呼び出し可能な値をデフォルト値として渡すこともできます.
import datetime cache.get_or_set(‘some-timestamp-key’, datetime.datetime.now) datetime.datetime(2014, 12, 11, 0, 15, 49, 457920) cache.get_many(keys,version=None)/ここにもget_many()インタフェースは、リクエストしたキーがキャッシュに実際に存在し(期限切れではありません):
cache.set(‘a’, 1) cache.set(‘b’, 2) cache.set(‘c’, 3) cache.get_many([‘a’, ‘b’, ‘c’]) {‘a’: 1, ‘b’: 2, ‘c’: 3} cache.set_many(dict,timeout)/set_の使用many()キー値ペアを渡す辞書は、複数の値をより効果的に設定できます.
cache.set_many({‘a’: 1, ‘b’: 2, ‘c’: 3}) cache.get_many([‘a’,‘b’,‘c’]){‘a’:1,‘b’:2,‘c’:3}cacheに似ている.set(),set_many()には、オプションのtimeoutパラメータがあります.
サポートされているバックエンド(memcached)では、set_many()は挿入できないキーリストを返します.
cache.delete(key,version=None)/delete()で表示されるキーを削除できます.これは、特定のオブジェクトキャッシュをクリアするための簡単な方法です.

>>> cache.delete('a')
cache.delete_many(keys, version=None)¶
            ,  delete_many()            。

>>> cache.delete_many(['a', 'b', 'c'])
cache.clear()¶
  ,             ,   cache.clear()。  ,clear()             ,             。

>>> cache.clear()
cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)¶
New in Django 2.1:
cache.touch()             。  ,          10     :

>>> cache.touch('a', 10)
True
       ,timeout       ,      CACHES          TIMEOUT   。

       touch(),    True,     False。

cache.incr(key, delta=1, version=None)¶
cache.decr(key, delta=1, version=None)¶
           incr()   decr()                   。     ,            1。     /                /   。                   ,     ValueError   。

>>> cache.set('num', 1)
>>> cache.incr('num')
2
>>> cache.incr('num', 10)
12
>>> cache.decr('num')
11
>>> cache.decr('num', 5)
6