目錄:
英山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),英山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為英山上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的英山做網(wǎng)站的公司定做!1.?Django集成Redis
2.?封裝服務(wù)redis_service.py
3.?單元測試test_redis_serivce.py
4.?Redis讀寫功能調(diào)用
5.?常見問題和解決方法
Redis是一個高性能的key-value數(shù)據(jù)庫,常用于搭建緩存系統(tǒng),提高并發(fā)響應(yīng)速度。Django集成Redis只需1步配置,秒定。為了增加代碼的兼容和容錯能力,將Redis功能調(diào)用封裝為redis_service.py服務(wù)。
典型系統(tǒng)架構(gòu)的數(shù)據(jù)層和緩存數(shù)據(jù)讀取流程:
示例代碼:https://github.com/rickding/HelloPython/tree/master/hello_redis
├── settings.py
├── service
│ ??└── redis_service.py
├── test
│ ??└── test_redis_service.py
一,Django集成Redis
代碼文件 | 功能要點 | |
Django集成Redis | requirements.txt | 安裝Redis包: django-redis >= 4.10.0 |
settings.py | 配置Redis緩存系統(tǒng) | |
封裝redis_service服務(wù) | redis_serivce.py | 封裝Redis調(diào)用:get, set, delete, incr |
單元測試 | test_redis_serivce.py | 測試封裝的Redis功能函數(shù) |
Redis讀寫功能調(diào)用 | views.py | 增加REST接口/chk/cache,調(diào)用Redis讀寫功能 |
1.?新建Django項目,運行:django-admin startproject hello_redis
2.?進到目錄hello_redis,增加應(yīng)用,運行:python manage.py startapp app
項目的目錄文件結(jié)構(gòu)如下:
3.?安裝Redis包,pip install django-redis >= 4.10.0,如果不是新建項目,注意版本兼容問題。
4.?打開settings.py,配置Redis緩存,1步完成:
CACHES = {
????'default': {
????????'BACKEND': 'django_redis.cache.RedisCache',
????????'LOCATION': 'redis://127.0.0.1:6379',
????????"OPTIONS": {
????????????"CLIENT_CLASS": "django_redis.client.DefaultClient",
????????},
????},
}
注意Redis服務(wù)的IP地址和端口。
5.?代碼中調(diào)用緩存功能非常方便:
a)?導(dǎo)入包:from django.core.cache import cache
b)?調(diào)用cache.get(key), cache.set(key, value)等函數(shù)。
二,封裝服務(wù)redis_service.py,調(diào)用Redis功能函數(shù)
為了增加代碼的兼容和容錯能力,將Redis功能調(diào)用封裝在redis_service.py服務(wù)中:
1.?對String操作
a)?get(key)
b)?set(key, str_value)
2.?對dict操作
a)?get_dict(key)
b)?set_dict(key, dict_value)
import json
from django.core.cache import cache
def get(key):
????return cache.get(key)
def set(key, value):
????return cache.set(key, value)
# cache dict: json.dumps and loads, not hash
def get_dict(key):
????value = cache.get(key)
????if value is None:
????????return None
????return json.loads(value)
def set_dict(key, value_dict):
????return cache.set(key, json.dumps(value_dict))
還有對列表、集合、哈希表等操作。
三,單元測試test_redis_service.py
運行python manage.py test:
四,Redis讀寫功能調(diào)用
1.?在views.py中增加請求處理函數(shù),調(diào)用Redis讀寫功能
from django.http import HttpResponse
from hello_redis.service import redis_service as cache
def chk_cache(req):
????key = 'chk_cache: %s, %s, %s' % (req.get_raw_uri(), req.get_full_path(), req.get_host())
????value = cache.incr(key)
????cache.set(key, value * 2)
????return HttpResponse('cache, key: {}, value: {}, ttl: {}'.format(key, cache.get(key), cache.ttl(key)))
2. 在urls.py中配置路由
from django.urls import path
from app.views import chk_cache
urlpatterns = [
????path('', chk_cache, name='chk'),
]
3. 運行命令啟動服務(wù):python manage.py runserver 0.0.0.0:8001
4. REST接口調(diào)用redis_service示例
五,常見問題和解決方法
1.?集成Redis,配置settings.py,檢查無誤,運行依然出錯:
InvalidCacheBackendError: Could not find backend 'django_redis.cache.RedisCache': cannot import name get_cache
解決:將django-redis版本從3.8.3升級到4.10.0
原因:Redis版本兼容問題。
2.?調(diào)用incr(key, amount),運行出錯:key not found
解決:先調(diào)用has_key(key)判斷是否存在,不存在時調(diào)用set(key, amount)
原因:Redis版本兼容問題。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。