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还有很多。不过教程里面只说到了这些。所以就先了解了这些。至于其他的,后面遇到了在学习