Django集成Memcached缓存系统完整指南
本文详解如何在Django项目中集成Memcached以提升性能。内容涵盖Memcached简介、Windows与Linux环境下的安装启动、常用命令行操作(set/get/delete等)、Python客户端库使用,以及在Django settings.py中的具体配置方法。同时提供多节点部署、安全加固及自定义Key处理等高级技巧,帮助开发者高效构建高负载Web应用。
Memcached概述
- Memcached最初由Danga Interactive开发,旨在为LiveJournal提供加速服务。随着其高效性被广泛认可,众多大型项目开始采用该技术。其官方网站为www.danga.com或memcached.org。
- 作为一个高性能的分布式内存对象缓存系统,Memcached被全球众多企业用于构建高负载网站,以分担数据库压力。它通过在内存中维护一个巨大的哈希表来存储各种数据,包括图像、视频、文件及数据库查询结果等。核心机制是将数据加载至内存,从而显著提升读取速度。
Memcached适用于存储非关键性数据,例如图形验证码、短信验证码以及用户登录Session等场景。
Memcached安装与启动指南
Windows环境
安装命令:memcached.exe -d install。
启动命令:memcached.exe -d start。
Linux(Ubuntu)环境
安装命令:sudo apt install memcached。
启动命令:cd /usr/local/memcached/bin ./memcached -d start。
常见问题排查
若提示权限不足,请以管理员身份运行CMD窗口。
若提示缺少pthreadGC2.dll文件,需将该DLL文件拷贝至windows/System32目录下。
务必避免将Memcached安装在包含中文字符的路径中。
Memcached启动配置
若需通过参数指定配置信息,不应使用service memcached start命令,而应直接调用/usr/bin/memcached。例如:/usr/bin/memcached -u memcache -m 1024 -p 11222 start。
- -d:指定Memcached在后台运行。
- -m:指定占用的内存大小,单位为M,默认值为64M。
- -p:指定占用的端口号,默认端口为11211。
- -l:指定允许连接的IP地址。若通过service memcached start启动,默认仅允许本机连接。若需允许其他机器连接,必须设置-l 0.0.0.0。
通过Telnet操作Memcached
连接命令:telnet ip地址 [11211]。
添加数据操作
set命令
语法格式:
set key flags(是否压缩) timeout value_length value
示例:set username 0 60 7 zhiliao
add命令
语法格式:
add key flags(0) timeout value_length value
示例:add username 0 60 7 xiaotuo。set与add的区别在于:add仅负责添加数据,若Key已存在则添加失败;若Key不存在则添加成功。而set在Key不存在时进行添加,若Key已存在则进行替换。
获取数据操作
语法:get key。
示例:get username。
删除数据操作
语法:delete key。
示例:delete username。
flush_all:用于删除Memcached中的所有数据。
查看Memcached当前状态
语法:stats。
通过Python操作Memcached
- 安装库:python-memcached,执行命令:pip install python-memcached。
- 建立连接:import memcache mc = memcache.Client(['127.0.0.1:11211','192.168.174.130:11211'],debug=True)。
- 设置数据:mc.set('username','hello world',time=60*5);mc.set_multi({'email':'xxx@qq.com','telphone':'111111'},time=60*5)。
- 获取数据:mc.get('telphone')。
- 删除数据:mc.delete('email')。
- 自增长:mc.incr('read_count')。
- 自减少:mc.decr('read_count')。
Memcached安全性考量
Memcached操作无需用户名和密码,仅需知道服务器IP和端口即可访问,因此安全性至关重要。以下提供两种安全解决方案:
- 使用-l参数限制为仅本地连接:此方式下仅本机可连接,其他机器无法访问,安全性最高。
- 使用防火墙关闭11211端口:通过防火墙策略禁止外部访问。
ufw enable # 开启防火墙
ufw disable # 关闭防火墙
ufw default deny # 防火墙以禁止的方式打开,默认是关闭那些没有开启的端口
ufw deny 端口号 # 关闭某个端口
ufw allow 端口号 # 开启某个端口在Django中使用Memcached
首先需在settings.py中配置缓存后端:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}若需使用多台服务器,可在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进行处理,例如添加前缀或版本号。若需自定义前缀,可在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
}
}以上为Django中使用Memcached的完整示例详解,更多关于Django使用Memcached的资料请关注本站其他相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













