django中配置和使用redis缓存_天黑前最后的余辉的博客-程序员信息网

技术标签: 我的博客  python  缓存  redis  

一、自定义连接池 
这种方式跟普通py文件操作redis一样,代码如下: 
views.py

import redis
from django.shortcuts import render,HttpResponse
from utils.redis_pool import POOL

def index(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hset('name','MrSmith',18)

    return HttpResponse('设置成功')
def order(request):
    conn = redis.Redis(connection_pool=POOL)
    conn.hget('name','MrSmith')

    return HttpResponse('获取成功')

二、第三方组件操作redis 
1、安装

pip install django-redis

2、settings.py 配置

# redis配置
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "CONNECTION_POOL_KWARGS": {"max_connections": 100}
            # "PASSWORD": "密码",
        }
    }
}
# 此缓存将内容保存至内存的变量中
    # 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',
            }
        }
# 此缓存将内容保存至文件
    # 配置:

        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
                'LOCATION': '/var/tmp/django_cache',
            }
        }
# 此缓存将内容保存至数据库
# 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                'LOCATION': 'my_cache_table', # 数据库表
            }
        }
# 使用数据库缓存,必须python manage.py createcachetable,生成表

# 此缓存使用python-memcached模块连接memcache

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

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }   

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
 # 此缓存使用pylibmc模块连接memcache
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '/tmp/memcached.sock',
        }
    }   

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
REDIS_TIMEOUT=7*24*60*60
CUBES_REDIS_TIMEOUT=60*60
NEVER_REDIS_TIMEOUT=365*24*60*60

3、使用(views.py)

import redis
from django.shortcuts import render,HttpResponse
from django_redis import get_redis_connection

def index(request):
    conn = get_redis_connection("default")
    return HttpResponse('设置成功')

def order(request):
    conn = get_redis_connection("default")
    return HttpResponse('获取成功')

from rest_framework.views import APIView
from rest_framework.response import Response
from django.conf import settings
from django.core.cache import cache
import json

class OrderView(APIView):
    def get(self,request,*args,**kwargs):
        # conn = get_redis_connection('default')
        cache.set('a','b')
        print(cache.get('a'))
        return Response('..')

#read cache user id
def read_from_cache(self, user_name):
    key = 'user_id_of_'+user_name
    value = cache.get(key)
    if value == None:
        data = None
    else:
        data = json.loads(value)
    return data

#write cache user id
def write_to_cache(self, user_name):
    key = 'user_id_of_'+user_name
    cache.set(key, json.dumps(user_name), settings.NEVER_REDIS_TIMEOUT)

三、全站缓存 
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户, 
当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存

1、settings.py中间件设置

MIDDLEWARE = [
        'django.middleware.cache.UpdateCacheMiddleware',
        # 其他中间件...
        'django.middleware.cache.FetchFromCacheMiddleware',
    ]

备注:一个放在最上面,一个放在最下面

2、使用(views.py)

from django.shortcuts import render,HttpResponse
import time

def index(request):
    ctime = str(time.time())
    return HttpResponse(ctime)

def order(request):
    ctime = str(time.time())
    return HttpResponse(ctime)

配置了全站缓存,在不同的时间(一定范围内),上面两个视图返回的时间是一样的,都是缓存时的时间

五、单独视图缓存 
方式一:通过装饰器

from django.views.decorators.cache import cache_page

@cache_page(60 * 15)
def my_view(request):
    ...

方式二:通过url

from django.views.decorators.cache import cache_page

urlpatterns = [
    url(r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)),
]

  • 1、引入TemplateTag
{% load cache %}
  •  

2、使用缓存

{% cache 5000 缓存的key %}
       缓存内容
{% endcache %}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a961634066/article/details/90715464

智能推荐

数据结构三元组实验报告_三元组实验报告.doc_Thomas Talhelm的博客-程序员信息网

三元组实验报告三元组实验报告实验报告:3元组的实现一、问题描述设计一个实现3元组基本操作的C语言程序:1、实现三元组的构造、取值、修改、有序判断、 最大值、最小值和销毁、打印等基本操作2、自行设计菜单界面,美观、实用性强二、实验内容destroytriplet; 销毁一个三元组 gettriplet;返回到三元组的某一位 puttriplet;修改三元组的某一位 isascending; ...

DDD领域驱动设计之聚合_宁静_致远76的博客-程序员信息网

       小编在 2016 年初次接触领域驱动设计,可能因为之前没有留意,感觉它还不怎么被大家认可,实践 1 年多的时间以来,伴随着业务对微服务的渴求,也越来越多的看到有关微服务的文章里在提倡采用 DDD 领域驱动设计来实现模型设计,架构设计。领域驱动设计包括战略建模(即架构设计)和战术建模(即模型设计)。战术模型中包含领域,子域,限界上下文,聚合,实体,值对象,领域服务,领域事件,模块,工厂...

linux efi 启动原理,Linux系统启动过程_旧知交的博客-程序员信息网

了解Linux系统的启动过程有助于我们深入理解Linux系统运行原理,下面我们将介绍一些系统启动过程中一些重要的细节。在这里,我们将Linux系统启动过程分成7个步骤介绍,这个过程如下图所示。 1.启动BIOS,开机自检打开电源,主板会启动保存在ROM(Read Only Memory)中的BIOS(Basic Input Output System),BIOS会对计算机硬件进行加电自检,检测各个...

计算机网络协议——OSI、TCP数据、IP数据包、Ethernet 数据包_二月的博客的博客-程序员信息网

计算机网络欢迎关注公众号二月鸟的博客。1、协议体系介绍1.1 五层协议应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提...

数据结构——单链表(带头结点和不带头结点)_csdn_wanziooo的博客-程序员信息网_不带头结点的单链表p,设计算法正向输出所有节点值

1 //单链表:通过各结点的链接指针来表示结点间的逻辑关系,长度可扩充,遍历或查找 2 //只能从指针的指示的首元结点开始,跟随链接指针逐个结点进行访问,进行删除或插 3 //入时,只需修改相关结点的指针域,但链接表比顺序表需要的存储空间多 4 5 6 //单链表的结构定义 7 typedef int DataType; 8 typedef struct node

常用软件的安装_zhaoyihan的博客-程序员信息网

正文  目前,几乎所有的Windows应用程序的安装过程都是非常相似的。从笔者的软件安装经验来看,微软的office系列办公软件的安装过程基本上包括了目前现行软件的安装过程,因此以其为例,来向各位初学电脑的网友详细介绍软件安装的过程。  首先,将office安装光盘放入CD/DVD-ROM,如图1,选择“安装Office 2003”;如果使用的是后缀名为“.exe”的可执行文件,则直接双击

随便推点

GitHub项目如何回滚到历史版本_Motto6666的博客-程序员信息网_github桌面版回滚

**GitHub项目如何回滚到历史版本**解决方法如下我们打开命令行1.输入 git log;2.弹出以上图片的信息,一号圈为最新版本的commit,若我们我们需要回到之前某个版本,如二号圈版本。我们可以将二号圈的commit后面的那个数字复制下来(那个是commit的hash值)。如:再按键盘“Q”键,弹出输入指令行;3.再输入git reset --hard (+上面...

管理软件开发的最高境界,那就是“无代码开发”_信息咨询小哨兵的博客-程序员信息网

  作为一名程序员,我们是问题的解决者,当别人遇到BUG时,我们将会用所有可用的工具来寻找解决方案。软件不是目的  软件本身并不是我们工作的目的。写出来的软件一定要和实际的问题/需求相关,不然就算代码写的再漂亮,也还是个没用的绣花枕头程序。  更重要的是,你写的软件要能通过评测,不管是不是能很好的解决问题/需求。软件是解决特定需求的工具。以你能想到的最好的软件为例:简单,易读,所有设计模式使用正确。但是,如果它做不到你需要做的,那就没用了。理解问题/需求  软件开发的第一步应该是理解

【论文笔记】CVR预估之ESMM模型_csdn0006的博客-程序员信息网_esmm

概述预测post-click转换率CVR在排序系统如推荐系统、广告中是至关重要的。传统的CVR模型使用深度学习方法已经实现到state-of-the-art水平。但是在实际应用中会遇到几个特定的问题让CVR模型建模变得困难。比如,传统的CVR模型是在点击曝光样本上训练的;但是最终是在整个样本空间上进行应用(曝光样本空间)。这就造成了样本选择偏差问题(Sample Selection Bias)。此外,数据稀疏问题让模型训练变得困难。在这篇论文中,提出利用用户行为序列数据,如曝光—>点击—>转化

U-BOOT start.s_Alan0521的博客-程序员信息网

用的U-BOOT版本是1.1.2,CPU是S3C2410U-BOOT源码在这里可以下到http://sourceforge.net/projects/u-boot/files/u-boot/*/#include #include /************************************************************************

超文本传输协议-HTTP/1.1_iteye_20659的博客-程序员信息网

超文本传输协议-HTTP/1.1(修订版)---译者:孙超进本协议不限流传发布。版权声明Copyright (C) The Internet Society (1999). All Rights Reserved.摘要超文本传输协议(HTTP)是一种为分布式,协作式的,超媒体信息系统。它是一种通用的,无状态(stateless)的协议,除了应用于超文本传输外,它也可以应用于诸如名称服务器和分布...

POJ 1459 Power Network (最大流, 网络流, EdmondsKarp算法求解最大流)__北鸣的博客-程序员信息网

POJ 1459 Power Network (最大流, 网络流, EdmondsKarp算法求解最大流)

推荐文章

热门文章

相关标签