对于中大型网站而言,使用缓存减少对数据库的访问次数是提升网站性能的关键手段之一。在django项目生产环境中最常用的缓存后台是memcached和redis。今天小编就手把手教你如何在django项目中配置memcached和redis作为缓存后台。那么它们两个到底哪个更好呢? 本文会对比这两个存储系统并在文末给出答案。
memcache缓存
memcache是一个高性能的分布式内存对象缓存系统,是django原生支持的最快最有效的缓存系统。memcached的优点是速度快,属于分布式缓存,支持同时在多台服务器上运行 (django会把它们当成一个大缓存)。
第一步:安装memcached
windows系统:官网下载,解压安装即可。
linux系统:ubuntu系统需要使用sudo apt-get install libevent ibevent-dev安装memcached依赖环境,再使用sudo apt-get install memcached安装memcached。
第二步:启动memcached
1
2
3
4
|
# linux系统-前台启动
/usr/local/memcached/bin/memcached -p 11211 -m 64m -vv
# linux系统-作为后台服务启动
/usr/local/memcached/bin/memcached -p 11211 -m 64m -d
|
第三步:pip安装python-memcached
python操作memcached数据库需要安装python-memcached或pylibmc, 推荐前者。
1
|
pip install pyhon-memcached
|
第四步:将memcached设为django缓存后台
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# 本地缓存,使用localhost
caches = {
'default' : {
'backend' : 'django.core.cache.backends.memcached.memcachedcache' ,
'location' : '127.0.0.1:11211' ,
}
}
# 使用unix soket通信
caches = {
'default' : {
'backend' : 'django.core.cache.backends.memcached.memcachedcache' ,
'location' : 'unix:/tmp/memcached.sock' ,
}
}
# 分布式缓存,多台服务器,支持配置权重。
caches = {
'default' : {
'backend' : 'django.core.cache.backends.memcached.memcachedcache' ,
'location' : [
'172.19.26.240:11211' ,
'172.19.26.242:11211' ,
]
# 我们也可以给缓存机器加权重,权重高的承担更多的请求,如下:
'location' : [
( '172.19.26.240:11211' ,5),
( '172.19.26.242:11211' ,1),
]
}
}
|
redis缓存
redis 是当今速度最快的内存型非关系型(nosql)型数据库。redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等多种数据结构的存储。
第一步:安装redis
- windows系统:官网下载,解压安装即可, 记得勾上加入环境变量。
- linux系统:ubuntu系统可使用sudo apt-get install redis-server安装。
第二步:启动redis服务
1
2
3
4
5
6
7
8
9
|
# windows系统:cmd进入redis安装目录,启动redis服务
redis-server.exe redis.windows.conf
# linux系统:进入redis安装目录启动redis服务
redis-server /etc/redis/redis .conf
# 打开redis交互命令行,用于测试(可选)
redis-cli.exe -h 127.0.0.1 -p 6379 # windows系统下另打开一个窗口
redis-cli # linux系统
|
注意:默认情况下,访问redis服务器是不需要密码的,为了让其他服务器使用同增加安全性我们建议设置redis服务器的访问密码。
由于redis默认绑定本机的,所以第一步取消该设置:
1
2
|
#编辑配置文件
sudo vim /etc/redis/redis .conf
|
用vim打开该配置文件后,注释掉下面这行:
1
|
# bind 127.0.0.1
|
然后设置登录密码。由于配置文件较长,命令模式下输入/requirepass foobared
快速搜索该配置项:
1
2
3
4
5
|
#找到下面这一行并去除注释,未修改之前:
#requirepass foobared
#修改成:
requirepass your_pwd #设置新的密码
|
修改后使用redis-server restart
重启服务器使配置生效。以后从其它服务器访问redis时携带你设置的密码即可:
1
|
redis-cli -a your_pwd -h hostip
|
第三步:pip安装django-redis
redis安装好并且启动后,你还需要通过pip安装django-redis才能在django中操作redis数据库。
1
|
pip install django-redis
|
第四步:将redis设为django缓存后台
1
2
3
4
5
6
7
8
9
10
|
caches = {
'default' : {
'backend' : 'django_redis.cache.rediscache' ,
'location' : 'redis://your_host_ip:6379' , # redis所在服务器或容器ip地址
"options" : {
"client_class" : "django_redis.client.defaultclient" ,
"password" : "your_pwd" , # 你设置的密码
},
},
}
|
你还可以在settings.py
设置缓存默认过期时间(非必须)。
1
2
3
|
redis_timeout = 24 * 60 * 60
cubes_redis_timeout = 60 * 30
never_redis_timeout = 365 * 24 * 60 * 60
|
测试缓存是否设置成功
在你修改完settings.py中关于缓存的配置后,你一定想知道django缓存是否设置成功。你可以输入下面命令打开python的命令交互窗口:
1
|
python manage.py shell
|
然后逐条输入以下命令进行测试。如果无任何报错,说明你缓存设置成功。
1
2
3
4
5
|
from django.core.cache import cache #引入缓存模块
cache. set ( 'k1' , '555' , 60 * 1 ) #写入key为k1,值为555的缓存,有效期1分钟
cache.has_key( 'k1' ) #判断key为k1是否存在
cache.get( 'k1' ) #获取key为k1的缓存结果
|
memcached vs redis
memcached和redis 两者都是基于内存的、键-值数据存储系统,速度都很快,而且支持分布式部署,然而两者的区别也挺大的。
- 数据结构:与memcached相比,redis拥有更多的数据结构(如list,set,zset,hash)并且支持丰富的数据操作。
- 键值尺寸上限:redis每个键值(value)的存储尺寸上限高达512mb,而memcached每个键值尺寸最大不超过1mb。
- 数据持久化:memcached不支持数据持久化,服务器重启后缓存数据就没了,而redis不仅支持支持缓存数据在硬盘上的持久化,还支持master-slave模式的数据备份。
从各方面看,redis功能特性远优于memcached。如果你的企业要选缓存系统,小编建议直接上redis就够了。
以上就是django项目如何配置memcached和redis缓存?选择哪个更有优势?的详细内容,更多关于django项目配置memcached和redis缓存的资料请关注服务器之家其它相关文章!
原文链接:https://mp.weixin.qq.com/s/cYLTQFq80T5PWIRrSN9g8Q