django连接redis集群问题排查思路和总结

django连接redis集群问题排查思路和总结,第1张

直接就一个连接失败

确认账号密码和端口没问题后,问题同事配置有没验证过,他说直接从网上cv的,完全没经过验证。坑啊!!!

把生产的配置和测试配置比较好,修改了几个地方

信心满满,重启启动 django shell 测试,结果还是连接上不!这时候心情开始有点糟糕~

冷静, django shell 不行,那用 python shell 直连试试?

一点毛病都没有,直接连上了!

一脸懵逼,这到底是啥问题啊!

结果依然是连接不上。

不知不觉已经到了晚上九点,好累,不想卷了。下班回家吧

回家路上整个脑子都被这个问题困扰着。难道密码中含有@符号的redis集群,Django真的连接不上?反复的问自己。

问了其他同事,生产环境是否有其他的redis集群可以用来调试。很遗憾,并没有。

要不,我自己创建一个redis集群,把密码设置成含有@符号?

可是,自己本地创建redis集群好麻烦啊。要本地安装虚拟机,想到一堆配置就直接劝退。

洗完澡,和老婆聊了1h左右的视频。已经到11点多,准备睡觉?

那是不可能的,带着问题是很难入睡!哎,这个是老毛病了。

突然想到了一个点,最小试错原则。自己搭建本地集群很麻烦,公司又没有多余的集群。

那直接买一个云版的redis集群?说干就干,直接从床上起来,打开电脑。

这时问题又来了,阿里云还是腾讯云?

鉴于双11买了腾讯云2c 4g 8m的服务器,只要199就能3年。

再对比之前买阿里云那个1c 2g 1m服务器,3年也要100多。

瞬间对腾讯云好感倍增,决定先买腾讯云。

一顿 *** 作,发现腾讯云是真的难用:

最最最重要,给把实例绑定了安全组后,外网还是无法访问???(不管了,反正我就是很生气)

对腾讯云太失望了,不得不把最后一根稻草压在阿里云身上。

所幸,阿里云没有让我失望!

咔咔咔,一顿 *** 作:

密码中含有@符号,但连接一点毛病都没有!!!

至此,问题终于解决了!!!

我已经迫不及待明天去公司验证,但回过头一看,已经是深夜一点半。

自言自语的说了一句:"睡吧,卷王"

经过对比,发现配置只需要生产的配置仅需要在测试的配置上加多一个 :

修复最磨人的bug,往往仅需要一点小小的改动~

为什么测试环境没报错了呢???

因为测试环境的redis集群不需要密码

随着网站运作,难免有些时候需要上传文件。上传文件自然是上传到网站所在的服务器,日积月累,慢慢地网站存储空间越来越少。而且网站迁移和备份都不方便,使用这些资源时也占用大量服务器流量。

较好的解决方案是使用第三方存储服务器,例如七牛、阿里云OSS、亚马逊S3等。将文件都放到这些存储服务器,可以减少服务器负担。服务器只剩下必要的静态文件和代码。

以阿里云OSS为例,讲解如何使用第三方存储服务器。(刚好最近用到这个,而且Django有其他人写好的第三方库)

首先,需要拥有OSS。这个去阿里云购买即可。购买之后可得到密钥等一系列信息。

接着,安装oss2库,该库是Python对应oss的 *** 作库。

再安装或下载Django OSS的Storage库。这些库是继承Django的Storage类,并重写相关方法。Django的Stroage是管理上传文件的存储。如何自定义Storage可参考Django官方文档。

执行如下命令,安装Django-Aliyun-OSS2-Storage:

也可以不用pip安装,打开该第三方库的Github,下载源码到本地。这里我需要修改部分代码,所以直接下载把整个包放到Django项目的根目录(也可其他位置)。

安装下载完成之后,配置Django的Settings,添加如下设置:

另外,还有两个对应参数需要注意一下,MEDIA_ROOT和MEDIA_URL。

MEDIA_ROOT是媒体文件的上传位置根目录,由于设置了BUCKET_NAME,一般在这个bucket中。可以设置为空字符串。

文件自然上传到Django模版的FileField字段设置的upload_to位置。

MEDIA_URL是获取媒体文件的链接前缀,可根据自己的oss文件链接位置添加。

由于上传的文件需要开放被用户下载,BUCKET_ACL_TYPE设置为公共的。若你的静态文件也需要上传到OSS中,设置如下:

设置无误后,重启Django即可使用。上传文件将自动上传到OSS中。

上面提到我要修改里面的源码。因为发现上传的文件在下载时的文件名是一串乱码,不是上传时的文件名。这个需要设置一些header信息,可参考OSS的SDK文档。该header需要在上传文件时就提交,而上面的django-aliyun-oss2-storage在上传文件时没有写入header信息。

打开该包的源码文件backendspy,找到AliyunBaseStorage类的_save方法。修改如下:

这样设置,点击文件链接,即可下载并且下载文件名是上传的文件名。若你不是什么类型文件都需要这么处理,可以判断filename的后缀名加以处理。

在使用 nginx+uwsgi+django的部署流程中,经常会有这样一种问题,那就是。当主机因为某些原因重启之后,发现之前的项目也挂掉了,如下图大大的502显然,我们的nginx已经启动了,这种情况肯定是uwsgi服务器的问题。

不过,既然接受了Python的简单易用和快速开发优势,作为tradeoff,就要学会接受和处理Python的一些缺点。用django作数据服务器两年多,确实会有一些性能问题。

1异步django的>

2缓存和队列用ZeroMQ、Memcached来做缓存和队列就解决了。

3影响性能的函数如果真的有CPU密集型的函数影响性能,可以编译成C来解决性能问题,一些矩阵 *** 作也可以通过numpy来解决


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10684685.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存