133.在django中使用memcached
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的更多相关文章
- memcached简单介绍及在django中的使用
什么是memcached? Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力.Memcached是通过在内存里维护一个统 ...
- Django中Celery的实现介绍(一)
Django中Celery的实现 Celery官网http://www.celeryproject.org/ 学习资料:http://docs.jinkan.org/docs/celery/ Cele ...
- Django中的缓存基础知识
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- Django中提供的6种缓存方式
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用: 缓存,缓存将一个某个views的返回值保存至内存或者memcache中, ...
- django中向用户发送邮件信息
发送邮件来让用户激活,因此,邮件中需要包含用户信息.但用户信息需要加密才可以.因此加密采用的是itsdangerous中的TimedJSONWebSignatureSerializer. 参考链接:h ...
- django中缓存配置
# ======缓存配置====== CACHES = { ## 虚拟缓存,开发调试版本,此为开始调试用,实际内部不做任何操作 # 'default': { # 'BACKEND': 'django. ...
- redis的字符串操作以及在django中的使用
redis ----redis.MongoDB : 非关系型数据库 redis 存储在内存中 MongoDB 存储在硬盘中 l 简介 redis是一个key-value存储系统 , 支持持久化 ...
- Django 中的缓存问题
Django 中的缓存问题 简单介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的 ...
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...
随机推荐
- docker 修改 bridge网桥网段
首先停止正在使用的 Docker 服务: $ sudo service docker stop 接着删除 Docker 默认网桥 docker0 : $ sudo ip link set dev do ...
- 杭电------2048神上帝以及老天爷(C语言写)
#include<stdio.h> ] = { -,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,- }; ] = { }; long long jiec ...
- SparkShuffle机制
在早期版本的Spark中,shuffle过程没有磁盘读写操作,是纯内存操作,后来发现效率较低,且极易引发OOME,较新版本的Shuffle操作都加入了磁盘读写进行了改进. 1.未经优化的HashShu ...
- Python和Anoconda和Pycharm联合使用教程
简介 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的.大型项目的开发. ...
- python基礎學習第一天
python歷史 Python 是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python 由 Guido van Rossum 于 1989 年底在荷兰国家数学和计算机科学研究所设计出来 ...
- 极具性价比优势的工业控制以及物联网解决方案-米尔MYD-C8MMX开发板测评
今天要进行测评的板子是来自米尔电子的MYD-C8MMX开发板.MYD-C8MMX开发板是米尔电子基于恩智浦,i.MX 8M Mini系列嵌入式应用处理器设计的开发套件,具有超强性能.工业级应用.10年 ...
- Swift Playgrounds for mac基础知识介绍
Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...
- c++ 浮点数小数位
. double f = 3.123456789; . cout<<f<<endl; // 输出3.12346 (包含整数和小数,且四舍五入) . cout<<se ...
- sc 与 net 命令
查看命令的帮助: help sc 或者 help net net: net start mysql 打开服务 net stop mysql 关闭服务 net pause mysql 暂停服务 sc ...
- 清北学堂—2020.1提高储备营—Day 2 morning(并查集、堆)
qbxt Day 2 morning --2020.1.18 济南 主讲:李佳实 目录一览 1.并查集 2.堆 总知识点:基础数据结构 一.并查集 1.描述:并查集是一类十分常用的数据类型,它有着十分 ...