zoukankan      html  css  js  c++  java
  • Django 缓存原理 与添加 redis 缓存

    原理流程

    #新建立 应用 stu
    #修改settings.py,增加缓存配置
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'stu'
    ]
    #末尾增加(内存缓存):
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        }
    }
    CACHE_MIDDLEWARE_KEY_PREFIX = ''
    CACHE_MIDDLEWARE_SECONDS = 600
    CACHE_MIDDLEWARE_ALIAS = 'default'
    
    
    #修改urls.py
    url(r'^class/',include('stu.urls'))
    
    #修改 
    stu/urls.py
    
    #coding=utf-8
    
    from django.conf.urls import url
    import views
    urlpatterns = [
        url(r'^$',views.index_view)
    ]
    
    #增加models.py
    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.db import models
    
    # Create your models here.
    
    class Clazz(models.Model):
        cname = models.CharField(max_length=30,unique=True)
    
        def __unicode__(self):
            return u'Clazz:%s'%self.cname
    
    #数据库新添两条数据
    #修改 views.py
    
    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.http import HttpResponse
    from django.shortcuts import render
    from .models import *
    #导入 django 缓存包
    from django.core.cache import caches
    
    # Create your views here.
    #获取缓存对象
    cacheobj = caches['default']
    
    def cache_view(fund):
        def _wur(request,*args,**kwargs):
            #path 为键,get 键后为内容 value
            data = cacheobj.get(request.path)
            if data:
                print '读取缓存数据'
                return HttpResponse(data)
            else:
                print '准备获取数据库数据'
                response = fund(request,*args,**kwargs)
                print '进行缓存数据'
                cacheobj.set(request.path,response.content)
                return response
        return _wur
    
    #添加装饰器
    @cache_view
    def index_view(request):
        postList = Clazz.objects.all()
        return render(request,'index.html',{'postList':postList})
    
    #模板文件  index.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% for i in postList %}
        {{ i.cname }}<br>
    {% endfor %}
    
    </body>
    </html>
    
    效果如下: 访问 http://127.0.0.1:8000/class/,查看控制台
    

    redis 缓存

    # 修改settings.py 增加redis 缓存配置 ,127.0.0.1:6379/0 代表 redis 本地地址, 0 表示使用redis 0号库
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
        },
        'redis':{
            "BACKEND": "django_redis.cache.RedisCache",
            "LOCATION": "redis://127.0.0.1:6379/0",
        }
    
    }
    CACHE_MIDDLEWARE_KEY_PREFIX = ''
    CACHE_MIDDLEWARE_SECONDS = 600
    CACHE_MIDDLEWARE_ALIAS = 'redis'
    
    # 修改views.py  将 default 本地缓存改为 redis 缓存   cacheobj = caches['redis']
    
    # -*- coding: utf-8 -*-
    from __future__ import unicode_literals
    
    from django.http import HttpResponse
    from django.shortcuts import render
    from .models import *
    from django.core.cache import caches
    
    # Create your views here.
    #获取缓存对象
    cacheobj = caches['redis']
    print cacheobj
    
    def cache_view(fund):
        def _wur(request,*args,**kwargs):
            data = cacheobj.get(request.path)
            if data:
                print '读取缓存数据'
                return HttpResponse(data)
            else:
                print '准备获取数据库数据'
                response = fund(request,*args,**kwargs)
                print '进行缓存数据'
                cacheobj.set(request.path,response.content)
    
                return response
        return _wur
    
    @cache_view
    def index_view(request):
        postList = Clazz.objects.all()
        print request.path
        print request.method
    
        return render(request,'index.html',{'postList':postList})
    
    
    # 同样通过访问 http://127.0.0.1:8000/class/  已经把 /class/ 以及页面结果插入到 redis 库中,截图显示, treenms是用来查看 redis 中 value 的软件
    
    


  • 相关阅读:
    codeforces C. Cows and Sequence 解题报告
    codeforces A. Point on Spiral 解题报告
    codeforces C. New Year Ratings Change 解题报告
    codeforces A. Fox and Box Accumulation 解题报告
    codeforces B. Multitasking 解题报告
    git命令使用
    shell简单使用
    知识束缚
    php 调用系统命令
    数据传输方式(前端与后台 ,后台与后台)
  • 原文地址:https://www.cnblogs.com/lixinliang/p/14168777.html
Copyright © 2011-2022 走看看