Django项目配置Memcached和Redis, 缓存选择哪个更有优势

对于中大型网站而言,使用缓存减少对数据库的访问次数是提升网站性能的关键手段之一。在Django项目生产环境中最常用的缓存后台是Memcached和Redis。今天小编就手把手教你如何在Django项目中配置Memcached和Redis作为缓存后台。那么它们两个到底哪个更好呢? 本文会对比这两个存储系统并在文末给出答案。

Posted in Python onApril 06, 2021

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就够了。

以上就是Django项目如何配置Memcached和Redis缓存?选择哪个更有优势?的详细内容,更多关于Django项目配置Memcached和Redis缓存的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python使用scrapy采集数据过程中放回下载过大页面的方法
Apr 08 Python
Python bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
在Django中使用Sitemap的方法讲解
Jul 22 Python
Windows上使用virtualenv搭建Python+Flask开发环境
Jun 07 Python
解决Django模板无法使用perms变量问题的方法
Sep 10 Python
Python解析命令行读取参数--argparse模块使用方法
Jan 23 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
python mqtt 客户端的实现代码实例
Sep 25 Python
Python使用正则实现计算字符串算式
Dec 29 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
python开发飞机大战游戏
Jul 15 Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
python实现批量提取指定文件夹下同类型文件
Apr 05 #Python
python实现ROA算子边缘检测算法
python实现批量移动文件
Python list去重且保持原顺序不变的方法
Apr 03 #Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 #Python
2021年pycharm的最新安装教程及基本使用图文详解
You might like
jQuery插件开发全解析
2012/10/10 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
一个简单的jquery的多选下拉框(自写)
2014/05/05 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
vue2的todolist入门小项目的详细解析
2017/05/11 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
使用FormData实现上传多个文件
2018/12/04 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[33:42]LGD vs OG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python学习 流程控制语句详解
2016/06/01 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
PyQt5每天必学之组合框
2018/04/20 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
python3人脸识别的两种方法
2019/04/25 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
python定时截屏实现
2020/11/02 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
绿色美容,有机护肤品和化妆品:Safe & Chic
2018/10/29 全球购物
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
2014教师专业技术工作总结
2014/12/03 职场文书
HttpClient实现文件上传功能
2022/08/14 Java/Android
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang