一、使用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)