pip install django-redis Hiredis
hiredis 是一个用 C 写的 Redis 客户端, 并且他的解析器可以用在 django-redis 中:
Redis 参考资料 http://django-redis-chs.readthedocs.io/zh_CN/latest/
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://172.16.153.130:6379/1",
"OPTIONS": {
"CONNECTION_POOL_KWARGS": {
"max_connections": 100}, # 设置默认的连接池,最大连接数 100
"PARSER_CLASS": "redis.connection.HiredisParser", # pip install Hiredis
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD": "", # 连接密码
}
}
}
from django.core.cache import cache
cache.set("foo", "value", timeout=10) # 设置一个键为 foo, 值为 value, 超时时间为 10 秒
cache.get('foo')
cache.ttl('foo')
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def my_view(request):
...
60 * 15
就是 60 秒 乘以 15,共 900秒
pyinxiangcom/25594833/ENResource/p763)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlCZwrID-1611458414968)(evernotecid://BBD579E0-7127-4377-8E81-47BEA574FA91/appyinxiangcom/25594833/ENResource/p765)]
作为快捷方式,默认缓存可以通过 django.core.cache.cache 引用:
>>> from django.core.cache import cache
基本用法¶
基本接口是:
cache.set(key, value, timeout=DEFAULT_TIMEOUT, version=None)¶
cache.set(‘my_key’, ‘hello, world!’, 30)
cache.get(key, default=None, version=None)¶cache.get(‘my_key’)
‘hello, world!’
key 是一个字符串,value 可以任何 picklable 形式的 Python 对象。
timeout 参数是可选的,默认为 CACHES 中相应后端的 timeout 参数。它是值存在缓存里的秒数。timeout 设置为 None 时将永久缓存。timeout 为0将不缓存值。
如果对象不在缓存中,cache.get() 将返回 None。
Wait 30 seconds for ‘my_key’ to expire…
cache.get(‘my_key’)
None
我们建议不要在缓存中存储为 None 的值,因为你不能分辨你存储的 None 值还是因为缓存命中返回的 None 值。
cache.get() 可以带一个默认参数。如果对象不在缓存中,将返回指定的值。
cache.get(‘my_key’, ‘has expired’)
‘has expired’
cache.add(key, value, timeout=DEFAULT_TIMEOUT, version=None)¶
在键不存在的时候,使用 add() 方法可以添加键。它与 set() 带有相同的参数,但如果指定的键已经存在,将不会尝试更新缓存。
cache.set(‘add_key’, ‘Initial value’)
cache.add(‘add_key’, ‘New value’)
cache.get(‘add_key’)
‘Initial value’
如果你想知道通过 add() 存储的值是否在缓存中,你可以检查返回值。如果值已保存,将返回 True ,否则返回 False 。
cache.get_or_set(key, default, timeout=DEFAULT_TIMEOUT, version=None)¶
如果你想得到键值或者如果键不在缓存中时设置一个值,可以使用 get_or_set() 方法。它带有和 get() 一样的参数,但默认是为那个键设置一个新缓存值,而不是简单返回:
cache.get(‘my_new_key’) # returns None
cache.get_or_set(‘my_new_key’, ‘my new value’, 100)
‘my new value’
你也可以传递任何可调用的值作为默认值:
import datetime
cache.get_or_set(‘some-timestamp-key’, datetime.datetime.now)
datetime.datetime(2014, 12, 11, 0, 15, 49, 457920)
cache.get_many(keys, version=None)¶
这里也有 get_many() 接口,返回一个字典,其中包含你请求的键,这些键真实存在缓存中(并且没过期):
cache.set(‘a’, 1)
cache.set(‘b’, 2)
cache.set(‘c’, 3)
cache.get_many([‘a’, ‘b’, ‘c’])
{‘a’: 1, ‘b’: 2, ‘c’: 3}
cache.set_many(dict, timeout)¶
使用 set_many() 传递键值对的字典,可以更有效的设置多个值。
cache.set_many({‘a’: 1, ‘b’: 2, ‘c’: 3})
cache.get_many([‘a’, ‘b’, ‘c’])
{‘a’: 1, ‘b’: 2, ‘c’: 3}
类似 cache.set(),set_many() 带有一个可选的 timeout 参数。
在已支持的后端(memcached),set_many() 会返回无法插入的键列表。
cache.delete(key, version=None)¶
你可以使用 delete() 显示地删除键。这是清除特定对象缓存的简便方法:
>>> cache.delete('a')
cache.delete_many(keys, version=None)¶
如果你想一次性清除很多键,给 delete_many() 传递一个键列表即可删除。
>>> cache.delete_many(['a', 'b', 'c'])
cache.clear()¶
最后,如果你想删除缓存里的所有键,使用 cache.clear()。注意,clear() 将删除缓存里的 任何 键,不只是你应用里设置的那些键。
>>> cache.clear()
cache.touch(key, timeout=DEFAULT_TIMEOUT, version=None)¶
New in Django 2.1:
cache.touch() 为键设置一个新的过期时间。比如,更新一个键为从现在起10秒钟后过期:
>>> cache.touch('a', 10)
True
和其他方法一样,timeout 参数是可选的,并且默认是 CACHES 设置的相应后端的 TIMEOUT 选项。
如果键被成功 touch(),将返回 True,否则返回 False。
cache.incr(key, delta=1, version=None)¶
cache.decr(key, delta=1, version=None)¶
你也可以使用分别使用 incr() 或 decr() 方法来递增或递减一个已经存在的键的值。默认情况下,存在的缓存值将递增或递减1。通过为递增/递减的调用提供参数来指定其他递增/递减值。如果你试图递增或递减一个不存在的缓存键,将会引发 ValueError 错误。
>>> cache.set('num', 1)
>>> cache.incr('num')
2
>>> cache.incr('num', 10)
12
>>> cache.decr('num')
11
>>> cache.decr('num', 5)
6
注解