Django 使用memcache缓存

django 使用memcache分布式缓存(官方推荐的一款分布式缓存系统)


五一节快乐~,每天都要进步一点点


之前的博客项目使用的是redis,没有使用memcache,所有的和worker都是存储在redis中,感觉像有些安全性不是很高的的缓存也可以存储在memcache中。因此在目前这个项目中,我打算使用两种缓存结合使用,结合两者各自的优势使用


一、什么是memcache?

memcache是一款分布式的缓存系统,其目的是减小用户等待时间,降低RDBMS的访问压力,动态的提高web服务器请求性能。其特点有协议简单,基于内存存储方式,访问速度快。


二、django中如何使用memcache和redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 缓存
CACHES = {
'redis':
{
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': 'redis://:password@127.0.0.1:6379/2',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
}
},
'default':
{
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
'OPTIONS': {
'server_max_value_length': 1024 * 1024 * 2, # 支持对象的最大大小的容量
}
}
}

说明:cache配置中必须配置default,因为

from django.core.cache import cache

from django.core.cache import caches

cache就等价于caches['default'],而caches就是setting.py中配置的缓存集。

当要是用某一种缓存的话,cache = caches['redis']就可以获取该缓存的客户端。

memcache和redis的区别?

共同点:都是基于内存的缓存系统。

不同点:

① redis支持的数据类型更加丰富,有常用的5中数据类型,set,zset,list,hash,string。而memcache只支持键值对

② 过期策略,memcache可以在set时就指定,例如set key1 0 0 8,即永不过期。而Redis可以通过例如expire 设定,例如expire name 10。

③ memcache可以缓存图片,视频等其他东西

③ 分布式,设定memcache集群,利用magent做一主多从;redis可以做一主多从,也可以一主一从。

④ 恢复能力,主机断电后,redis可以通过AOF恢复丢失的数据,数据完整性较高,即具备持久化能力,而memcache不具备,数据丢失了就真的丢失了。

⑤ redis中的键的值最大可以达到512M,而memcache中的键的值最大可以达到1M。

memcache和redis使用的不同场景

① 因为memcache是多核的,而redis是单核的,所以平均下来,redis在每一个核上存储的性能要比memcache更高一点,但是当数据超过100k的时候,memcache的性能将变得更高。

② memcache适合多读少些的操作,对于查询信息来说性能比较高,例如用户信息,文章信息,商品信息等而redis适合对读写效率都很高的操作,对数据的安全性也要求较高,常用于处理复杂的业务,如用户登录次数统计等。

③ 当考虑到数据需要安全存储的时候,redis将会是不错的选择。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!