DjangoRedis是在Django Web框架下的Redis資料庫連接工具,它封裝了Redis資料庫對於Django的調用操作,是在Python3下的一個成熟、可靠、易用的Django擴展工具包。下面從DjangoRedis的配置、使用和緩存選取三個方面詳細介紹。
一、配置DjangoRedis
DjangoRedis的配置主要涉及Redis伺服器地址和埠號、Redis用戶密碼等參數設置。一般情況下,可以將這些參數保存在一個單獨的配置文件中,例如settings.py,放在您的項目應用程序的根目錄下,代碼如下:
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } } }
其中, 『default』是緩存名(也是緩存配置唯一的標識符,如果要使用多個緩存配置的話,這裡就不一樣了);『BACKEND』是緩存的後端,Django自帶的cache後端為『django.core.cache.backends.locmem.LocMemCache』,而我們要使用Redis,則設置為『django_redis.cache.RedisCache』;『LOCATION』是Redis的資料庫地址,格式為「redis://address:post/db_number」,這裡我們設置為『redis://localhost:6379/0』,表示連接到默認Redis資料庫(0號資料庫);『OPTIONS』是適用於緩存後端的參數和選項,這裡我們設置為使用DefaultClient,其中還有其他可選的參數和選項。
二、使用DjangoRedis
DjangoRedis常見的使用場景是在緩存、隊列、鎖等方面,下面我們以JavaScript Object Notation(JSON)作為數據交換格式的緩存機製為例子講解使用方法。
1.添加緩存記錄
將一個鍵值對存入緩存中,並設置有效時間time,代碼如下:
from django.core.cache import cache cache.set(key, value, time)
其中,key是一個字元串或者一個參數化的鍵值對字典,value可以是任意可序列化物體(可以將value序列化Python的str或者用JSON序列化)。time是緩存的有效時間,可以是浮點型,整數型,或者None(緩存永久有效)
2.獲取緩存記錄
通過key來獲取緩存記錄,如果緩存記錄不存在則返回None,代碼如下:
cache.get(key)
如果你要獲取緩存值的同時,返回一個默認值,可以使用get()方法中的『default』參數參數,代碼如下:
cache.get(key, default='cachemiss')
3.刪除緩存記錄
刪除一個緩存鍵值,如果鍵值對不存在則不執行操作,代碼如下:
cache.delete(key)
三、DjangoRedis緩存選取
在DjangoRedis中,我們可以使用多種緩存方式,常用的包括:內存存儲、持久化存儲,以及緩存策略。
1.內存存儲
內存存儲使用 DjangoRedis(或Django)提供的RAM緩存後端,在內存中緩存數據,訪問速度快(讀取延時通常在微秒級),緩存較小(內存容量的限制),適用於一些無需過期的緩存,或者需要較快速讀取的數據。
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } }, 'redis': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/1', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', }, 'TIMEOUT': 1, # 緩存的默認過期時間 } }
2.持久化存儲
持久化存儲使用 DjangoRedis(或Django)提供的redis緩存後端,在Redis資料庫中進行數據的緩存,可支持多種Redis數據結構(如set、list、hash等),可以在緩存伺服器重啟後繼續存在。快閃記憶體速度較快,但相對於內存存儲讀取延時要大一些(在單位時間內,通常需要比內存存儲多一倍的時間來訪問近似數量的記錄)。
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } }, 'redis': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6380/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', }, 'TIMEOUT': 1, # 緩存的默認過期時間 } }
3.緩存策略
DjangoRedis提供了多種緩存策略,根據實際情況選擇適當的策略可以提高緩存效率,常用的策略有以下幾種:
3.1 LRU
最近最少使用(LRU)策略是將最近最少使用的元素從緩存中除去。以空閑空間供新緩存。在DjangoRedis中,這一策略通過為緩存賦予一個max_entries值來實現。
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, }, 'TIMEOUT': 1, # 緩存的默認過期時間 }, 'redis': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6380/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, }, 'TIMEOUT': 1, # 緩存的默認過期時間 } }
3.2 LFU
最少使用(LFU)策略是在緩存達到固定大小之後,從緩存中刪掉使用最少的元素。請注意,這種方法不常用。
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, 'CULL_FREQUENCY': 5, }, 'TIMEOUT': 1, # 緩存的默認過期時間 }, 'redis': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6380/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, 'CULL_FREQUENCY': 10, }, 'TIMEOUT': 1, # 緩存的默認過期時間 } }
3.3 TTL
ttl 指緩存的最大生存時間,即從創建緩存對象開始,到指定的時間過期並被移除。 在DjangoRedis中,這個時間的設置方法與我們配置緩存記錄中的time參數一樣。
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, 'CULL_FREQUENCY': 5, }, 'TIMEOUT': 60*5, # 緩存的過期時間設置為5分鐘 }, 'redis': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6380/0', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', 'MAX_ENTRIES': 10000, 'CULL_FREQUENCY': 10, }, 'TIMEOUT': 60*10, # 緩存的過期時間設置為10分鐘 } }
總結
正如您所看到的,DjangoRedis為Django Web框架的用戶提供了一個便於連接Redis資料庫的渠道,並提供了方法和策略來管理緩存效率。希望這個簡短的教程能夠對你工作中有所幫助。
原創文章,作者:GWAZ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135188.html