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 的软件
    
    


  • 相关阅读:
    oracle中next_day()、last_day()函数解析
    Oracle数据库统一审核的启用测试与关闭
    20170722上课笔记
    20170721上课笔记
    20170720上课笔记
    20170719上课笔记
    20170718上课笔记
    20170717上课笔记
    《Linux系统基础》随堂笔记5
    《oracle的安装》
  • 原文地址:https://www.cnblogs.com/lixinliang/p/14168777.html
Copyright © 2011-2022 走看看