缓存_Django中使用Memcached

本文介绍了如何在Django中配置和使用Memcached作为缓存系统。讲解了Django缓存设置、Memcached的基本概念,以及在视图函数中使用Memcached的方法。还提到了Django自动为键名添加前缀的情况,并给出了通过telnet获取数据的示例。最后讨论了如何设置固定前缀以解决不同版本Django的前缀不一致问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django缓存设置

Django中提供了多种缓存方式,如果要使用缓存,需要先在settings.py中进行配置,然后应用。根据缓存介质的不同,需要设置不同的缓存后台Backend

 

Memcached缓存

1、Memcached是基于内存的缓存,Django原生支持的最快最有效的缓存系统

2、对于大多数场景,推荐使用Memcached,数据缓存在服务器端。使用前需要通过pip安装memcached的插件python-memcached和pylibmc,可以同时支持多个服务器上面的memcached
    ⑴下面是使用pyhon-memcached的设置

 

Django中使用Memcached

1、Django中使用缓存(这里使用Memcached)的话,需要先在settings.py文件进行一些配置。比如缓存服务器的IP地址等

例1:缓存配置

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': [
            '127.0.0.1:11211',
            #'127.0.0.2:11211' 存在多个缓存服务时,可以这样传入多个缓存服务IP地址
        ]
    }
}

 

视图函数中使用Memcached

1、在settings.py中配置好Memcached的相关信息后,就可以直接使用Memcached了

例2:需要访问对应页面
⑴编辑视图

⑵使用telnet获取数据

注:
1、从上面的视图函数可以看到:这里在使用memcached的代码与前面一章的代码不一致的。比如这里的视图函数没有使用memcache.Client()来连接缓存服务器
    ⑴前面那章中,虽然我们也是在Django视图函数中写的,但是实际上与Django框架没有任何关系(相当于是在普通的Python脚本中操作memcached的)
    ⑵这章中,我们使用的是Django框架来操作memcached,我们操作Django,Django再去操作memcached。所以memcached的代码、逻辑都与前面有点不一致

2、上面例子中我们使用telnet来获取数据时,没有获取到数据。但是通过Django是可以正常获取到的
    ⑴telnet获取不到数据:这是因为通过Django来存储键值对数据时,对于键名的存储Django会前其原本的键名上在一些前缀(至于加什么前缀每个版本都不一致,知道有这个东西就好)
    ⑵Django能获取到数据:数据是通过Django存的,即使它会将键名加上前缀,加什么前缀Django肯定是知道的。所以在获取时,Django会自己处理这部分
    ⑶所以:直接通过Django来存储、获取数据,对于我们使用者来说键名都是没有变化的(不管键名加了什么前缀,对我们是没有影响的)

 

telnet获取数据

前面说:Django在存储数据键名时,会给键名加上前面前缀。虽然加什么前缀了对于我们使用者没啥影响(只要是通过Django来操作的)。不过我还是觉得了解下为好

例3:

注:
1、stats items命令:Memcached stats items命令用于显示各个slab中item的数目和存储时长(最后一次访问距离现在的秒数)

2、stats cachedump命令:显示某个slab中的前limit_num个key列表(通过itemid获取key)
    ⑴语法:stats cachedump slab_id limit_num
    ⑵通过命令stats cachedump id 0:获得key的值。id表示通过stats items命令返回的数据id。0表示全部列出

3、通过stats cachedump命令的返回:可以看到实际存储的键名是":1:username"
    ⑴我们在Django中存数据时输入的键名是"username",但是实际Django存的键名是":1:username"。加了一个":1:"的前缀
    ⑵注:只要我们存数据、获取数据都是通过Django来完成的,这个前缀都与我们没有关系。我们存数据输入的是"username",那么我们获取数据时也是"username"

 

设置前缀

1、Django在存数据时会自动给键名加上一个前缀,这个前缀是不固定的,跟版本有关系

2、所以,如果同一个项目使用了不同的版本的话,就会造成前缀名不一致的问题。所以最好统一下前缀名

例4:
⑴修改配置

⑵编辑视图:需访问

⑶telnet获取

注:
1、这个前缀名相关的,知道有这么一个东西就好了。毕竟跟我们编写视图函数是没有啥关系的

2、只要我们存数据、获取数据都是通过Django来完成的,这个前缀都与我们没有关系。我们存数据输入的是"username",那么我们获取数据时也是"username"

3、关于Django中使用memcached还有很多。不过教程里面只说到了这些。所以就先了解了这些。至于其他的,后面遇到了在学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值