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实现目录树生成示例
Mar 28 Python
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
python中的sort方法使用详解
Jul 25 Python
Python 处理数据的实例详解
Aug 10 Python
python实现爬取图书封面
Jul 05 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
python 基于dlib库的人脸检测的实现
Nov 08 Python
Django中F函数的使用示例代码详解
Jul 06 Python
Python创建临时文件和文件夹
Aug 05 Python
python3.5的包存放的具体路径
Aug 16 Python
scrapy头部修改的方法详解
Dec 06 Python
基于Python实现天天酷跑功能
Jan 06 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
php中实现可以返回多个值的函数实例
2015/03/21 PHP
php文档工具PHP Documentor安装与使用方法
2016/01/25 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
jquery图片滚动放大代码分享(2)
2015/08/28 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
Vue.js 2.0学习教程之从基础到组件详解
2017/04/24 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
2017/05/13 jQuery
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
cordova入门基础教程及使用中遇到的一些问题总结
2017/11/14 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
[00:36]DOTA2风云人物相约完美“圣”典 12月17日不见不散
2016/11/30 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
python交互式图形编程实例(三)
2017/11/17 Python
python unittest实现api自动化测试
2018/04/04 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
python3 实现的对象与json相互转换操作示例
2019/08/17 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
大学生入党自我鉴定
2013/10/31 职场文书
企业法律事务工作总结
2015/08/11 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS
Pytorch中的数据集划分&正则化方法
2021/05/27 Python