django缓存实现(cache&redis)

内置的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)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容