内置的cache(基于数据库)
创建缓存表
python manage.py createcachetable [table_name]
settings中添加配置
# settings.py
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.db.DatabaseCache',
'LOCATION' : 'my_cache_table',
}
}
测试
# urls.py
urlpatterns = [
path('test/', views.test, name='test'),
]
# view.py
from django.core.cache import cache
def test(request):
result = cache.get('time')
if result:
return HttpResponse(result)
datetime = time.asctime(time.localtime(time.time()))
time.sleep(5)
cache.set('time', datetime, timeout=60)
return HttpResponse(datetime)
可以看到 第一次访问http://127.0.0.1/test/睡眠了5s,cache表中出现了
Cache_key | value | expires |
---|---|---|
:1:time | gASVHAAAAAAAAACM | 2020-02-29 06:09:22.000 |
并在之后的60s内,无需sleep。
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!'
redis(基于内存)
安装
https://django-redis-chs.readthedocs.io/zh_CN/latest/
pip install django-redis
pip install django-redis-cache
修改settins.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
同样也生产了数据
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
1) ":1:time"
127.0.0.1:6379[1]> get :1:time
"\x80\x04\x95\x1c\x00\x00\x00\x00\x00\x00\x00\x8c\x18Sat Feb 29 15:11:01 2020\x94."
127.0.0.1:6379[1]>
多缓存 及@cahe_pate()
CACHES = {
'default' : {
'BACKEND' : 'django.core.cache.backends.db.DatabaseCache',
'LOCATION' : 'my_cache_table',
},
"redis": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
views.py
def test(request):
cache = caches['default'] # 指定缓存类型
result = cache.get('time')
if result:
return HttpResponse(result)
datetime = time.asctime(time.localtime(time.time()))
time.sleep(5)
cache.set('time', datetime, timeout=60)
return HttpResponse(datetime)
@cache_page(timeout=60 * 2, cache='redis')# 指定缓存类型
def redis_test(request):
datetime = time.asctime(time.localtime(time.time()))
time.sleep(5)
return HttpResponse(datetime)