memcached简单介绍及在django中的使用
什么是memcached?
Memcached是一个高性能的分布式的内存对象缓存系统,全世界有不少公司采用这个缓存项目来构建大负载的网站,来分担数据库的压力。Memcached是通过在内存里维护一个统一的巨大的hash表,memcached能存储各种各样的数据,包括图像、视频、文件、以及数据库检索的结果等,当然因为memcached中的数据是保存在内存中的,应该没有人会把视频、图片等数据保存在memcached中。其实,memcached的原理简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
memcached适用于哪些场景?
存储验证码(图形验证码、短信验证码)、登录session等所有不是至关重要的数据。
memcached服务的安装与启动选项:
安装:sudo apt install memcached (Linux)
启动:service memcached start或者/usr/bin/memcached start
启动选项:
-u:指定启动memcached的用户。
-d:这个参数是让memcached在后台运行。
-m:指定运行memcached占用多少内存,以M为单位,默认为64M。
-p:指定占用的端口,默认端口是11211。
-l:默认为127.0.0.1,指定别的机器可以通过哪个ip地址连接到我这台memcached服务器。如果是通过service memcached start的方式,那么只能通过本机连接。如果想要让别的机器连接,就必须设置 -l 0.0.0.0。
如果想要使用以上参数来指定一些配置信息,那么不能使用service memcached start,而应该使用/usr/bin/memcached的方式来运行。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start。
memcached的基本使用:
连接:
我们一般使用telnet去连接memcached服务,然后进行操作,Telnet连接memcached:
telnet ip地址 port端口号
例如:telnet 192.168.42.133 11211
基本操作:
增加或更改数据:
command key flag(是否压缩) expire length
command类型及具体使用方法:
add:添加数据,此时key如果已经存在于memcached,则会把存不进去,NOT_STORED
replace:只有key已经存在于memcached之中才能使用
set:设置数据,key如果存在,则作用为replace,如果key不存在,则作用为add
查询数据:
get key
删除数据:
delete key : 删除某个特定的数据
flush_all : 删除memcached中所有的键值对
针对数字类型数据的操作:
incr key increase_num:给指定的key增加increase_num
decr key decrease_num:给指定的key减少decrease_num
查看memcached的状态:
stats:会列出memcached的一些常用的数据
查看memcached中所有的键:
stats items:查看当前的item_id
stats cachedump item_id num :查看num个键的名称,如果num为0,则查询所有
在Django中使用memcached:
首先需要在settings.py中配置好缓存:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
如果想要使用多台机器提供的memcached服务,那么可以在LOCATION指定多个连接,数据不会实现多台机器共享,还是会按照一定的算法单独保存在其中一台机器中。示例代码如下:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': [
'172.19.26.240:11211',
'172.19.26.242:11211',
]
}
}
配置好memcached的缓存后,以后在代码中就可以使用以下代码来操作memcached了:
from django.core.cache import cache
def index(request):
cache.set('abc','zhiliao',60)
print(cache.get('abc'))
response = HttpResponse('index')
return response
需要注意的是,django在存储数据到memcached中的时候,不会按照我们提供的key作为键去存储,而是会对key进行一些处理。比如会加一个前缀,会加一个版本号,所以我们如果我们想要手动操作查询到我们在django中操作时存入的值,就必须知道存入时的实际的key。如果我们想要自定义key的处理,那么可以在settings.CACHES中添加KEY_FUNCTION参数:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'KEY_FUNCTION': lambda key,prefix_key,version:"django:%s"%key
}
}
memcached简单介绍及在django中的使用的更多相关文章
- Memcached简单介绍
Memcached简单介绍 简介:Memcached是一个自由开源的,高性能,分布式内存对象缓存系统.================================================= ...
- openstack架构简单介绍J版(更新中)
title : OPENSTACK架构简单介绍 openstack的发展及历史 openstack是什么? OpenStack是一个美国国家航空航天局和Rackspace合作研发的云端运算软件,以A ...
- 二维码Data Matrix简单介绍及在VS2010中的编译
Data Matrix 二维条码原名Datacode,由美国国际资料公司(International Data Matrix, 简称ID Matrix)于1989年发明.Data-Matrix二维条码 ...
- 简单介绍一下python Queue中常用的方法
Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之FalseQueue.fu ...
- Java中Synchronized的用法(简单介绍)
简单介绍 synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调 ...
- Django 中的缓存问题
Django 中的缓存问题 简单介绍 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的 ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- Django 中使用 Celery
起步 在 <分布式任务队列Celery使用说明> 中介绍了在 Python 中使用 Celery 来实验异步任务和定时任务功能.本文介绍如何在 Django 中使用 Celery. 安装 ...
- Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)
一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...
随机推荐
- 菜鸟笔记 -- Chapter 6.2.4 成员方法
6.2.4 成员方法 在Java中使用成员方法对应于类对象的行为,在有些地方也会将方法称之为函数,成员方法是定义在类中具有特定功能的一段独立小程序.方法格式如下: 修饰符 返回值类型 成员方法名 ( ...
- 路由器基本配置实验,静态路由和动态RIP路由
实验涉及命令以及知识补充 连线 PC和交换机FastEtherNet接口 交换机和路由器FastEtherNet接口 路由器和路由器Serial接口 serial是串行口,一般用于连接设备,不能连接电 ...
- Flask—02-Flask会话控制与模板引擎
会话控制原理 说明:概念百度说明的很详细,请自行百度 cookie 说明: 由于HTTP协议无状态无连接的特点,导致一个用户在同一网站做连续操作时,需要不断的提供身份信息:为了解决这个问题,我们可以通 ...
- 2小时学会spring boot 以及spring boot进阶之web进阶(已完成)
1:更换Maven默认中心仓库的方法 <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirr ...
- flask中的response
1.Response 在flask中你想向前端返回数据,必须是Response的对象,这里和django必须是HttpResponse 对象一样, 主要将返回数据的几种方式 视图函数中return 字 ...
- python查找目录及子目录下特定文件
写这篇博客的缘由: 面试归来翻脉脉发现一个陌生的朋友提出一个面试题,设计实现遍历目录及子目录,抓取.pyc文件. 并贴出两种实现方法: 个人感觉,这两种方法中规中矩,不像是python的风格.pyth ...
- Cantor表
题目描述 现代数学的著名证明之一是Georg Cantor证明了有理数是可枚举的.他是用下面这一张表来证明这一命题的: 1/1 1/2 1/3 1/4 1/5 - 2/1 2/2 2/3 2/4 - ...
- linux tail + head 查看指定行
取出一段数据后,需要获取指定行 file # 前10行 file # 不要最后10行的前面所有行 file # 后10行 file # 不要前面10行的后面所有行 | # 不要前后10行剩余的所有行
- Linux下安装google拼音输入法
首先安装fcitx,前几天看了很多在ubuntu上能够使用的输入法,有人推荐是搜狗输入法,毕竟是国产嘛,但是会有意外发生,比如说安装之后会产生输入的字符乱码,是一堆看不懂的东西,我就是因为遇到了,然后 ...
- python字符串的格式化输出
很多时候我们在打印输入内容时希望有简单格式而不是拼接 一般做法: name = input("name:").strip() age = input("age:" ...