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


  • 相关阅读:
    爬取校园新闻首页的新闻的详情,使用正则表达式,函数抽离
    网络爬虫基础练习
    Mysql 使用 select into outfile
    Mysql 使用CMD 登陆
    使用Clean() 去掉由函数自动生成的字符串中的双引号
    Get Resultset from Oracle Stored procedure
    获取引用某个主键的所有外键的表
    Entity Framework 丢失数据链接的绑定,在已绑好的EDMX中提示“Choose Your Data Connection”
    添加MySql Metat Database 信息
    at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
  • 原文地址:https://www.cnblogs.com/lixinliang/p/14168777.html
Copyright © 2011-2022 走看看