zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    1.C和C++区别,以及const分析(底层const/顶层const)
    4.移植驱动到3.4内核-移植总结
    3.移植驱动到3.4内核-移植DM9000C驱动
    2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁
    Android Support v4、v7、v13、v14、v17的区别和应用场景
    Android利用canvas画各种图形
    ActionBar 自定义布局定义
    android动画坐标定义
    GitHub上最著名的Android播放器开源项目大全
    CardView 简介和使用
  • 原文地址:https://www.cnblogs.com/huiyichanmian/p/12189187.html
Copyright © 2011-2022 走看看