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)