共计 2012 个字符,预计需要花费 6 分钟才能阅读完成。
一、装置 & 配置
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_*')
正文完