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装饰器
May 09 Python
python通过getopt模块如何获取执行的命令参数详解
Dec 29 Python
基于python绘制科赫雪花
Jun 22 Python
python内置数据类型之列表操作
Nov 12 Python
python获取微信小程序手机号并绑定遇到的坑
Nov 19 Python
python实现远程控制电脑
May 23 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
使用Tkinter制作信息提示框
Feb 18 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
python实现简单遗传算法
Sep 18 Python
使用Python实现音频双通道分离
Dec 25 Python
教你怎么用python实现字符串转日期
May 24 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
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
CSS3,HTML5和jQuery搜索框集锦
2014/12/02 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
jquery实现input框获取焦点的方法
2017/02/06 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
JS实现标签滚动切换效果
2017/12/25 Javascript
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
[02:42]决战东方!DOTA2亚洲邀请赛重启荣耀之争
2017/03/17 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python中字符编码简介、方法及使用建议
2015/01/08 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
餐饮部总监岗位职责范文
2014/02/13 职场文书
2015年信贷员工作总结
2015/04/28 职场文书
小学生暑假安全公约
2015/07/14 职场文书
导游词之峨眉乐山/兵马俑/北京故宫御花园
2019/09/03 职场文书
利用ajax+php实现商品价格计算
2021/03/31 PHP
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python