Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?
作者:大江狗 发布时间:2021-11-17 17:38:42
目录
Memcache缓存
第一步:安装Memcached
第二步:启动Memcached
第三步:pip安装python-memcached
第四步:将memcached设为Django缓存后台
Redis缓存
第一步:安装Redis
第二步:启动Redis服务
第三步:pip安装django-redis
第四步:将Redis设为Django缓存后台
测试缓存是否设置成功
Memcached vs Redis
对于中大型网站而言,使用缓存减少对数据库的访问次数是提升网站性能的关键手段之一。在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
# 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, 推荐前者。
pip install pyhon-memcached
第四步:将memcached设为Django缓存后台
# 本地缓存,使用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服务
# 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默认绑定本机的,所以第一步取消该设置:
#编辑配置文件
sudo vim /etc/redis/redis.conf
用vim打开该配置文件后,注释掉下面这行:
# bind 127.0.0.1
然后设置登录密码。由于配置文件较长,命令模式下输入/requirepass foobared
快速搜索该配置项:
#找到下面这一行并去除注释,未修改之前:
#requirepass foobared
#修改成:
requirepass your_pwd #设置新的密码
修改后使用redis-server restart
重启服务器使配置生效。以后从其它服务器访问redis时携带你设置的密码即可:
redis-cli -a your_pwd -h hostip
第三步:pip安装django-redis
Redis安装好并且启动后,你还需要通过pip安装django-redis才能在Django中操作redis数据库。
pip install django-redis
第四步:将Redis设为Django缓存后台
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
设置缓存默认过期时间(非必须)。
REDIS_TIMEOUT=24*60*60
CUBES_REDIS_TIMEOUT=60*30
NEVER_REDIS_TIMEOUT=365*24*60*60
测试缓存是否设置成功
在你修改完settings.py中关于缓存的配置后,你一定想知道Django缓存是否设置成功。你可以输入下面命令打开Python的命令交互窗口:
python manage.py shell
然后逐条输入以下命令进行测试。如果无任何报错,说明你缓存设置成功。
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就够了。
来源:https://mp.weixin.qq.com/s/cYLTQFq80T5PWIRrSN9g8Q


猜你喜欢
- 一、前言经过前面的两篇文章,整体工作已经完成了2/3了,剩下的1/3,将会在本片文章提及前面两步文章链接python实战之德州扑克第一步-发
- 在这个abc.php文件中写入如下代码。<?php phpinfo(); ?>你将会看到一个网页,网页内容通常,如下图所示:用中
- 决策树是一种将数据集通过分割成小的、易于处理的子集来进行分类或回归的算法。其中每个节点代表一个用于划分数据的特征,每个叶子节点代表一个类别或
- python 与 C++ dlib人脸检测结果对比,供大家参考,具体内容如下说明:由于项目需求发现Linux下c++使用dlib进行人脸检测
- 本文实例为大家分享了基于信息增益的决策树归纳的Python实现代码,供大家参考,具体内容如下# -*- coding: utf-8 -*-i
- 列表:list=[val1,val2]1.列表中的每一个元素都是可变的,有序的,可以被查看索引的。可变意味着可以对每个元素进行增删改查的操作
- 前言在最一开始,我的B站收藏一直是存放在默认收藏夹中,但是随着视频收藏的越来越多,没有分类的视频放在一起,想在众多视频中找到想要的视频非常困
- Numpy是python常用的一个类库,在python的使用中及其常见,广泛用在矩阵的计算中,numpy对矩阵的操作与纯python比起来速
- 1. 问题虽然scrapy能够完美且快速的抓取静态页面,但是在现实中,目前绝大多数网站的页面都是动态页面,动态页面中的部分内容是
- 选择排序选择排序是一种简单的比较排序算法,它的算法思路是首先从数组中寻找最小(大)的元素,然后放到数组中的第一位,接下来继续从未排序的元素中
- 以前的Dreamweaver中是没有图片处理功能的,即使你要处理也只能使用CSS中的相关滤镜进行一些效
- 本文通过一个详细的例子,来阐述了在线编辑XML文档数据的方法。由于Netscape对XML的支持比较弱,因此,要实现跨平台的数据交换,数据的
- TIPS:没有特殊说明,测试环境均为MySQL8.0,早期版本可能会有更多情况导致索引失效。8.0失效的情况,早期版本也失效;8.0不失效的
- 内容摘要:最近在做项目的时候,客户要求表格里的数据可以拖选,于是用JS写了个下面的方法。支持IE、FIREFOX等浏览器。实现对整行、整列数
- 我们经常会遇到这样的开发需求,比如你手头有多个开发项目,其中项目A要求用python3.7,项目B需要用python3.6,有要求项目A和项
- Git 恢复到之前版本1. 应用场景进行了错误提交,需要将代码回退至某个版本;或者需要检出某个版本的代码,再切换回最新版本。2. 解决方法2
- 描述filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。该接收
- 摘要:百度百科上是这样介绍二维码的:二维码(Quick Response Code),又称二维条码,它是用特定的几何图形按一定规律在平面(二
- 在深度学习的数据训练过程中,虽然tensorflow和pytorch都会自带打乱数据进行训练的方法,但是当我们自己生成数据,或者某些情况下依
- 本文实例讲述了Python使用matplotlib绘制三维参数曲线操作。分享给大家供大家参考,具体如下:一 代码import matplot