Django 筆記 – Django Cache 存取多個儲存體
Django Cache 基本盤
Django 的 Cache ,可以設定存取多種儲存體,例如 File, DB, Memory 等
只要照著文件設定,就可以了,例如下面是把預設的 Cache 設定在 File 的範例,設定通常存在某個 setting.py 之類的檔案,依據你系統實際狀況而定。
setting 設定範例
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
使用範例
那個 ‘default’ 同時也意味著,這組是預設的 Cache,所以呼叫預設 Cache 可以這樣做
from django.core.cache import cache ... [略] cache.get('your_key') # 取得某個 key 的 value cache.set('your_key', timeout=123) # 設定 value 且過期時間 123 秒 cache.delete('your_key') # 刪除某個 key
其實也可以這樣用,兩者等效,可以參考文件
from django.core.cache import caches ... [略] caches['default'].get('your_key') # 取得某個 key 的 value caches['default'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['default'].delete('your_key') # 刪除某個 key ... [略]
多個 Cache 儲存體
所以看完上面範例,你應該也已經猜到,如果想要設定多個 Cache 的儲存體非常簡單,
setting.py 設定範例
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 'LOCATION': 'unique-snowflake', } 'my_file_cache': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', 'LOCATION': '/var/tmp/django_cache', } }
使用範例
from django.core.cache import caches ... [略] # 存取 'default' 的 Cache caches['default'].get('your_key') # 取得某個 key 的 value caches['default'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['default'].delete('your_key') # 刪除某個 key # 存取 'my_file_cache' 的 Cache caches['my_file_cache'].get('your_key') # 取得某個 key 的 value caches['my_file_cache'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['my_file_cache'].delete('your_key') # 刪除某個 key ... [略]
其他多個 Cache 範例 – Redis 使用不同 Host、不同 db number
db number 的部分,可以參考 Redis 的 SELECT 指令,以及 redis-cli 的 -n 參數。
簡而言之這有點類似 namespace 概念,Redis 預設準備了 0~15 共計 16 個 db 給你用,不同的 db 互不干涉,可以使用相同的 key,如果沒指定,預設是連向 0 號 db。
以下是使用套件 django-redis 的範例
setting 範例
CACHES = { # 預設 Cache "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, # 連向 local 的 Redis db number 1 "my_redis_db1": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, # 連向 遠端某個 Redis 主機(host: your.redis.url), db number 為 2 "another_redis_db2": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://your.redis.url:6379/2", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } }, }
使用範例
from django.core.cache import caches ... [略] # 存取預設 Cache,所以會是 local redis , db number 0 的 database cache.get('your_key') # 取得某個 key 的 value cache.set('your_key', timeout=123) # 設定 value 且過期時間 123 秒 cache.delete('your_key') # 刪除某個 key ... [略] # 一樣是存取預設 Cache,所以一樣是 local redis , db number 0 的 database caches['default'].get('your_key') # 取得某個 key 的 value caches['default'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['default'].delete('your_key') # 刪除某個 key ... [略] # 存取 'my_redis_db1' 的 Cache,也就是 local redis , db number 1 的 database caches['my_redis_db1'].get('your_key') # 取得某個 key 的 value caches['my_redis_db1'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['my_redis_db1'].delete('your_key') # 刪除某個 key ... [略] # 存取 'another_redis_db2' 的 Cache,也就是遠端 Redis(your.redis.url 那台), 且 db number 2 的 database caches['another_redis_db2'].get('your_key') # 取得某個 key 的 value caches['another_redis_db2'].set('your_key', 'your_value', 23) # 設定 value 且過期時間 123 秒 caches['another_redis_db2'].delete('your_key') # 刪除某個 key ... [略]
Leave a Reply