在django中使用redis

一、安装&配置

1、安装

pip install django-redis

注:版本选择

Django 版本支持:
django-redis 3.8.x 支持 django 1.4, 1.5, 1.6, 1.7 (或许会有 1.8)
django-redis 4.4.x 支持 django 1.6, 1.7, 1.8, 1.9 和 1.10
Redis Server 支持:
django-redis 3.x.y 支持 redis-server 2.6.x 或更高
django-redis 4.x.y 支持 redis-server 2.8.x 或更高

2、配置

在django项目中的setting.py文件中配置:

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }
}

或者

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "mysecret"
        }
    }
}

作为session backend的使用配置:

Django 默认可以使用任何 cache backend 作为 session backend, 将 django-redis 作为 session 储存后端不用安装任何额外的 backend

SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

Pickle版本

django-redis 使用 pickle 序列化几乎所有数据,默认使用-1=最新版本
CACHES = {

"default": {
    # ...
    "OPTIONS": {
        "PICKLE_VERSION": -1  # Use the latest protocol version
    }
}

}

设置超时时间

SOCKET_CONNECT_TIMEOUT : socket 建立连接超时设置
SOCKET_TIMEOUT : 连接建立后的读写操作超时设置

CACHES = {
    "default": {
        # ...
        "OPTIONS": {
            "SOCKET_CONNECT_TIMEOUT": 5,  # in seconds
            "SOCKET_TIMEOUT": 5,  # in seconds
        }
    }
}

支持压缩

django-redis 支持压缩, 但默认是关闭的. 你可以激活它:

CACHES = {
    "default": {
        # ...
        "OPTIONS": {
            "COMPRESSOR": "django_redis.compressors.zlib.ZlibCompressor",
        }
    }
}

使用 lzma 压缩的例子

import lzma

CACHES = {
    "default": {
        # ...
        "OPTIONS": {
            "COMPRESSOR": "django_redis.compressors.lzma.LzmaCompressor",
        }
    }
}

二、django_redis使用

1、设置key的ttl

from django.core.cache import cache

//timeout为过期时间,单位:秒,timeout=0为立即过期, timeout为None永不超时
cache.set(key, val, timeout) 

//ttl搜索过期时间,返回值:0--标示key不存在或过期,
//None--key存在,但是没有设置过期时间
cache.ttl(key)

//expire指定一个key的过期时间
cache.expire(key, timeout)

//persist设置key永不过期
chache.persist(key)

2、redis锁

django-redis 支持 redis 分布式锁. 锁的线程接口是相同的, 因此你可以使用它作为替代.
使用 python 上下文管理器分配锁的例子:

from django.core.cache import cache

with cache.lock(key):
    do_something()

3、扫描key

from django.core.cache import cache

cache.keys("demo_*")
// redis 的 server side cursors 2.8 版及以上, 
// 使用 iter_keys 取代 keys 方法
cache.iter_keys("demo_*")
from django_redis import get_redis_connection

scan_res = conn.scan_iter('key_*')

你可能感兴趣的:(python,django,redis)