python django中使用redis


一、使用redis緩存准測

1. 經常存取,且不會改變的數據可以用緩存來存儲,比如首頁數據,數據量雖然大,但它不會經常改變;
2. 經常使用(這里的經常使用的意思是經常作dml操作),但數據量小,比如說購物車數量的改變,就可以使用緩存;

 

 

二、python中使用redis

安裝:pip install redis

 

2.1、redis連接

普通連接

1 import redis
2 
3 r = redis.Redis(host='127.0.0.1', port=6379)
4 r.set('foo', 'Bar')
5 print(r.get('foo'))

 

redis連接池連接

redis-py使用connection pool來管理對一個redis server的所有連接,避免每次建立、釋放連接的開銷。默認,每個Redis實例都會維護一個自己的連接池。可以直接建立一個連接池,然后作為參數Redis,這樣就可以實現多個Redis實例共享一個連接池。同時為了保證連接池的唯一,還需要用到單例,將連接池單獨寫入一個py文件中

1 import redis
2 
3 pool = redis.ConnectionPool(host='127.0.0.1', port=6379)
4 r = redis.Redis(connection_pool=pool)
5 r.set('foo', 'Bar')
6 print(r.get('foo'))

 

2.2、redis數據類型操作

參考文檔:https://www.cnblogs.com/maoruqiang/p/11158520.html

string操作

hash操作

list操作

set操作

其他操作

管道操作

 

 

三、django中使用redis

3.1、方式一(redis)

# redis_pool.py
import redis
POOL = redis.ConnectionPool(host='127.0.0.1', port=6379,password='1234',max_connections=1000)

 

import redis
from django.shortcuts import render,HttpResponse
from utils.redis_pool import POOL

def index(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hset('kkk','age',18)

    return HttpResponse('設置成功')

 

3.2、方式二(django-redis)

參考文檔:https://django-redis-chs.readthedocs.io/zh_CN/latest/

                  https://www.cnblogs.com/tantanjishu/p/11697396.html

安裝:pip install django-redis

 

3.2.1、Redis作為django緩存的配置(附作session存儲的配置)

Tip:redis作session存儲時,需要在django setting.py --> MIDDLEWARE中開啟'django.contrib.sessions.middleware.SessionMiddleware'(默認開啟)。

# redis作為Django緩存和session存儲后端的標准配置

# Django的緩存配置
CACHES = {
    "default":{
    "BACKEND":"django_redis.cache.RedisCache",
    "LOCATION":"redis://127.0.0.1:6379/9",
    "OPTIONS":{
        "CLIENT_CLASS":"django_redis.client.DefaultClient",
        "CONNECTION_POOL_KWARGS": {"max_connections": 100},
        "PASSWORD": "密碼",       # 可不寫,密碼
        "DECODE_RESPONSES":True   # 可不寫,redis get的數據是字符串格式(unicode,而不是bytes)
    }
}}

# 配置session存儲3種方式
# 存儲在數據庫中,如下設置可寫可不寫,是默認存儲模式
SESSION_ENGINE = "django.contrib.sessions.backends.db"
# 存儲在緩存中,存儲在本機內存中,如果丟失則不能找回,比數據庫的方式讀寫更快
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
# 混合存儲:優先從本機內存中存取,如果沒有則沖數據庫中存取
SESSION_ENGINE = "django.contrib.sessions.backends.cache_db"

SESSION_CACHE_ALIAS = "default"   # default是上面CACHE的字典key

 

3.2.2、django-redis使用

 1 from django_redis import get_redis_connection
 2 from django.core.cache import cache
 3 
 4 //timeout為過期時間,單位:秒,timeout=0為立即過期, timeout為None永不超時
 5 cache.set(key, val, timeout)
 6 
 7 //ttl搜索過期時間,返回值:0--標示key不存在或過期,
 8 //None--key存在,但是沒有設置過期時間
 9 cache.ttl(key)
10 
11 //expire指定一個key的過期時間
12 cache.expire(key, timeout)
13 
14 //persist設置key永不過期
15 chache.persist(key)
16 
17 # 獲取連接redis的連接池實例
18 con = get_redis_connection('default')
19 # 調用python redis的函數
20 sku_ids = con.lrange('aa', 0, 4)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM