Django Redis配置
# Django默認不支持redis,需要第三方插件來支持
pipenv install django-redis
pipenv install hiredis # 不是必須
vim settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://192.168.2.128:6379/1',
'TIMEOUT': 300, # NONE 永不超時
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient', # redis-py 客戶端
'PARSER_CLASS': 'redis.connection.HiredisParser', # hiredis是C客戶端,性能更高
'PASSWORD': 'mysecret', # 密碼,可不設置
'PICKLE_VERSION': -1, # 插件使用PICKLE進行序列化,-1表示最新版本
'SOCKET_CONNECT_TIMEOUT': 5, # 連接超時
'SOCKET_TIMEOUT': 5, # 讀寫超時
'CONNECTION_POOL_KWARGS': {"max_connections": 100} # 連接池最大連接數
},
'CONNECTION_POOL_CLASS': 'redis.connection.BlockingConnectionPool', # 自定義連接池
}
}
# 支持主從哨兵模式
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': [
'redis://192.168.2.128:6379/1', # master
'redis://192.168.2.128:6380/1', # slave
]
}
}
# cache是django提供的代理對象,根據配置的BACKEND進行操作
from django.core.cache import cache
cache.set('foo', 'value', timeout=25)
cache.set('foo', 'value', timeout=None)
cache.ttl('foo')
cache.persist('foo') # 永不過期
cache.expire("foo", timeout=5)
cache.keys("foo_*")
cache.iter_keys("foo_*")
cache.delete_pattern("foo_*")
cache.set("key", "value1", nx=True) # 實現 SETNX原子操作
# key必須存在,否則報錯
cache.incr("key")
cache.incr("key")
# 獲得所使用的客戶端對象
from django_redis import get_redis_connection
con = get_redis_connection("default")