Django集成Memcached缓存系统完整指南

Ryan
Ryan
发布时间:2026-10-15| 8人浏览过
原创

本文详解如何在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的资料请关注本站其他相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。