Loading

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)

 

posted @ 2021-03-01 18:47  wsongl  阅读(2738)  评论(0编辑  收藏  举报