• Django中的缓存


    1、目的

    使用缓存可以大大提高程序的响应速度,增强用户体验。

    2、实现原理

    将执行过的操作数据 存储下来,在一定时间内,再次获取数据的时候,直接从缓存中获取

    比较理想的方案,缓存使用内存级缓存

    ①、客户端通过url访问服务端

    ②、服务端通过url来查找处理逻辑的视图函数

    ③、视图函数去缓存中查找数据

    ④、如果视图函数在缓存中查找到了数据,进行渲染,返回一个响应体给客户端

    ⑤、如果试图函数没有在缓存中查找到数据,则会通过models访问数据库,在数据库中查找数据

    ⑥、服务端将查找到的数据在缓存中存一份,同时进行渲染给客户端返回响应体

    3、实现方式

    (1)、数据库缓存

    ①创建缓存表

    python manage.py createcachetable 自定义缓存表名称

    ②、在settings.py中设置缓存为数据库表

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
            'LOCATION': '缓存表名称',
            'TIMEOUT': 60 * 5   # 缓存过期时间
                }
            }

    (2)、redis缓存

    ①、安装Django中支持Redis缓存的库

    pip install django-redis
    pip install django-redis-cache

    ②、Redis缓存配置

    CACHES = {
            'mysql_cache':{
                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                'LOCATION': 'mycache',
            },
            'redis_cache': {
                "BACKEND": "django_redis.cache.RedisCache",
                "LOCATION": "redis://127.0.0.1:6379/1",
                "OPTIONS": {
                    "CLIENT_CLASS": "django_redis.client.DefaultClient",
                }
            }
        }

    (3)、Memcached缓存

    Memcached是一个基于内存的缓存框架(服务)

    ①、Windows版的Memcached

      安装:memcached -d install

      启动memcached服务:net start "Memcached Server"

      安装Python操作Memcached的绑定程序:pip install python-memcached

    ②、配置

    CACHES = {
             'default': {
                  'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
                  'LOCATION': '127.0.0.1:11211',
            }
        }

    (4)、文件

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
            'LOCATION': 'c:/foo/bar',
        }
    }

    4、程序层面操作缓存

    (1)、装饰器

    @cache_page

      timeout   有效时长

      cache  缓存到哪一个库中,针对于系统配置了多个缓存

    @cache_page(timeout=60, cache='filecache')

      prefix  前缀

    @cache_page(60, cache='redis_backend')
    def jokes(request):
    
        sleep(5)
    
        return HttpResponse('JokeList')

    (2)、原生cache

    from django.core.cache import caches

    def
    news(request): cache = caches['redis_backend'] result = cache.get("news") if result: return HttpResponse(result) news_list = [] for i in range(10): news_list.append("最近贸易战又开始了%d" % i) sleep(5) data = { 'news_list': news_list } response = render(request, 'news.html', context=data) cache.set("news", response.content, timeout=60) return response

  • 相关阅读:
    leetcode Power of Two
    leetcode Merge Two Sorted Lists
    Mac linux 安装memcached服务 用法
    Vsftp配置都没有问题 连接不上 530 Login incorrect 解决方法
    mysql 远程连接不上 %用户已经添加了
    Centos yum 安装mysql报错 No package mysql-server available.
    Linux 查询程序安装路径 是否安装
    php报错 Call to undefined function mb_stripos()
    mac编译openssl扩展报错 openssl.c:44:10: fatal error: 'openssl/evp.h' file not found
    在安装mysqli的时候,出现error: ext/mysqlnd/mysql_float_to_double.h: No such file or direc
  • 原文地址:https://www.cnblogs.com/huiyichanmian/p/12189187.html
Copyright © 2020-2023  润新知