1. 在django中使用memcached,可以在settings.py文件中DATABASES变量下面配置CACHES缓存相关配置信息,只允许本机连接memcached就可以设置LOCATION为:127.0.0.1:11211。示例代码如下:
# memcached settings
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211'
}
}
2. 如果想让多台机器都可以使用memcached,就可以设置LOCATION为一个列表,包含多台机器的IP地址和端口号。
'LOCATION': [
'127.0.0.1:11211',
'192.168.1.133:11211',
],
3.在视图views.py中使用cache存储我们的数据,示例代码如下:
from django.http import HttpResponse
<!--导入模块-->
from django.core.cache import cache def index(request):
<!--设置数据-->
cache.set('username','guyan', 120)
<!--获取数据-->
username = cache.get('username')
print(username)
return HttpResponse('memcached index')
4.在cmd窗口查看cache中的items,执行命令:stats items,会显示出当前的items_id,如果想要获取具体items_id下的所有key,就可以执行命令stats cachedump 1 0,其中,这里的0代表的是获取所有的key。

获取的结果如下:

stats cachedump 1 0
ITEM :1:username [5 b; 341429408 s]
ITEM age [2 b; 1581842070 s]
END

这里获取的key值是已经经过处理的,为:1:username

之后我们就可以通过get :1:username就可以获取我们当前的key的值value,结果如下:

get :1:username
VALUE :1:username 16 5
guyan
END

可是为什么key会在存储在memcached中的时候,会经过这种处理的方式呢?

1. 因为我们在views.py文件中是直接在cache上调用了set()方法,所以即可来到cache中,查看cache中是否定义了set()方法,结果我们发现:
<!--此时的cache只是一个空壳类,并没有定义set()方法-->
cache = DefaultCacheProxy()
2. 之后,我们查看一下DefaultCacheProxy类中是否定义了set()方法,同样这个类中也没有定义set()方法,但是这个类中的所有方法都使用到了DEFAULT_CACHE_ALIAS,ctrl+b进行查看一下:
DEFAULT_CACHE_ALIAS = 'default'
3. 这里的default就是我们在settings.py文件中设置的CACHES中的default,因此如果我们想要了解set()方法的定义就可以查看django.core.cache.backends.memcached.MemcachedCache,
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'127.0.0.1:11211',
'192.168.1.133:11211',
],
}
}
4. 进入MemcachedCache中查看,
class MemcachedCache(BaseMemcachedCache):
5. 没有定义set()方法,但是继承了父类BaseMemcachedCache,在进入父类进行查看:
    def set(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
key = self.make_key(key, version=version)
if not self._cache.set(key, value, self.get_backend_timeout(timeout)):
# make sure the key doesn't keep its old value in case of failure to set (memcached's 1MB limit)
self._cache.delete(key)
其中set()方法中涉及到的make_key()方法的定义如下:
    def make_key(self, key, version=None):
if version is None:
version = self.version return self.key_func(key, self.key_prefix, version)
make_key()方法中涉及到的self.key_func为:
self.key_func = get_key_func(params.get('KEY_FUNCTION'))

这里面的params就可以认为是我们在settings.py文件中配置的CACHES

set()方法中涉及到的version为
self.version = params.get('VERSION', 1)
在没有传入任何参数的时候,默认为1

因此如果我们想要定义自己的set()方法对key进行一些特定的处理,就可以定义CACHES中的'KEY_FUNCTION'。示例代码如下:

'KEY_FUNCTION': lambda key, key_prefix, version: 'Django:' + key,

这样的话,再次查看items的所有key,如下:

<!--查看所有的key-->
stats cachedump 1 0
ITEM Django:username [5 b; 341431876 s]
ITEM age [2 b; 1581842070 s]
END <!--查看键所对应的值-->
get Django:username
VALUE Django:username 16 5
guyan
END
这样的话,以后就可以在Django中使用memcache了。并且,可以根据memcached自身的算法将获取的键值对信息存储到settings.py文件中配置的多个IP地址的服务器上,就可以实现高可用式分布存储,提高访问的效率。

133.在django中使用memcached的更多相关文章

  1. memcached简单介绍及在django中的使用

    什么是memcached? Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力.Memcached是通过在内存里维护一个统 ...

  2. Django中Celery的实现介绍(一)

    Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...

  3. Django中的缓存基础知识

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  4. Django中提供的6种缓存方式

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...

  5. django中向用户发送邮件信息

    发送邮件来让用户激活,因此,邮件中需要包含用户信息.但用户信息需要加密才可以.因此加密采用的是itsdangerous中的TimedJSONWebSignatureSerializer. 参考链接:h ...

  6. django中缓存配置

    # ======缓存配置====== CACHES = { ## 虚拟缓存,开发调试版本,此为开始调试用,实际内部不做任何操作 # 'default': { # 'BACKEND': 'django. ...

  7. redis的字符串操作以及在django中的使用

    redis ----redis.MongoDB : 非关系型数据库 redis   存储在内存中 MongoDB 存储在硬盘中 l  简介 redis是一个key-value存储系统 , 支持持久化 ...

  8. Django 中的缓存问题

    Django 中的缓存问题 简单介绍 ​ 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. ​ 当一个网站的用户访问量很大的 ...

  9. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)

    一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...

随机推荐

  1. 高灵敏度自带DSP降噪算法的audio codec解决方案

    背景调研   随着AI渗透到各行各业,人们对语音的需求也越来越大,最近一两年,各种AI音频设备如雨后春笋般冒出.各种智能AI设备的推出,意味者市场对低成本的音频采集设备越来越多.针对这种情况,我们开发 ...

  2. 进阶之路 | 奇妙的Animation之旅

    前言 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 学习清单: 动画的种类 自定义View动画 View动画的特殊使用场景 属性动画 使用动画的注意事项 一.为什 ...

  3. 00.JS前言

    前言: 学习一门编程语言的基本步骤(01)了解背景知识 1.了解背景知识   1)什么是 JavaScript 语言?     JavaScript 是一种轻量级的脚本语言.所谓“脚本语言”(scri ...

  4. 使用Arduino Nano驱动Lora模块

    使用Arduino Nano驱动Lora模块 为什么选用Lora 射频通信芯片有很多种,但是一般在同样功耗下,距离没有Lora远;同等范围下,没有Lora节能. Lora通信只适用于低速率,高延时的场 ...

  5. 基于java开发jsp+ssm+mysql实现的在线考试系统 源码下载

    实现的关于在线考试的功能有:用户前台:用户注册登录.查看考试信息.进行考试.查看考试成绩.查看历史考试记录.回顾已考试卷.修改密码.修改个人信息等,后台管理功能(脚手架功能不在这里列出),科目专业管理 ...

  6. python3-cookbook笔记:第六章 数据编码和处理

    python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...

  7. css的网页布局案例

    常见行布局: 导航使用position:fixed固定住 导航会脱离文档流,不占据空间 导致下面的元素上移,因此需要将下面的元素的padding-top设置成导航的高度 <!DOCTYPE ht ...

  8. Mysql-分库分区分表

    大数据-分表分区分库问题集:1.分表时两张表的数据都一样么?如果一样,只是降低了表的访问量,但是如果数据多了还是没有提高查询的效率答:分表是对一张表中的数据按照某种规则进行拆分到三张表中,三张表的所有 ...

  9. Selenium实战(七)——自动发送邮件

    SMPT(Simple Mail Transfer Protocol)简单邮件传输协议,是一组由源地址到目的地址传送邮件的规则,可以控制信件的中转方式.Python的smptlib模块提供了简单的AP ...

  10. 吴裕雄--天生自然 python数据分析:医疗费数据分析

    import numpy as np import pandas as pd import os import matplotlib.pyplot as pl import seaborn as sn ...