python redis cluster_rediscluster集群原理

python redis cluster_rediscluster集群原理本文环境:centos 7,Python3编译安装成功,包括pip3,然后需要安装redis相关的Python3驱动包,本的redis指redis包而非redis数据库,rediscluster类似。

令人抓狂的redis和rediscluster Python驱动包的安装

本文环境:centos 7,Python3编译安装成功,包括pip3,然后需要安装redis相关的Python3驱动包,本的redis指redis包而非redis数据库,rediscluster类似。

先理清楚几个概念
1,redis包更准确地说是redis-py包,是Python连接Redis的驱动文件,如果下载原始文件的话,文件名称就是redis-py-***.tar.gz
2,rediscluster 包更准确地说是redis-py-cluster包,是Python连接Redis Cluster(Redis集群)的驱动文件
3,rediscluster包依赖于redis包,也就是说rediscluster包连接Redis集群的时候需要依赖redis包
4,这两个表可以单独pip(pip3)安装,但是安装rediscluster包的时候redis包会被自动安装
这是三者之间的关系,其实不太绕,但是名字非常操蛋!!!再加上pip安装造成的一系列问题,就更操蛋了(可能跟具体的yum源有关,某些yum源就没有问题)。
这里EC2是京东提供的服务器,默认使用的京东云的yum源
python redis cluster_rediscluster集群原理

 

槽点1

糟糕的命名规则,很早就想吐槽了,为什么Python的MySQL驱动包名是pymysql,Python的SQL Server驱动是pymssql,而Python的redis驱动名称是redis(不更应该叫pyredis么)。
而redis这个驱动又不支持集群的链接,支持集群连接的驱动包名是rediscluster,这样很容易给人以误解,为什么不像其他包一样加上一个py前缀,pyredis,pyredisclsuter,这样是不是不会清晰很多。

槽点2

pip安装redis-py-cluster,会自动安装最新版的redis-py-cluster 2.0.0,同时会自动安装其依赖的redis(redis-py)驱动包,redis(redis-py)包的版本是最新的3.0.1
问题是,这样自动安装完成后,压根用不了
python redis cluster_rediscluster集群原理
from rediscluster import StrictRedisCluster会提示错误,如上:File “<stdin>”, line 1, in <module> ImportError: cannot import name “StrictRedisCluster” 
然后通过源码包观察setup.py中的依赖信息,似乎也没有问题,要求redis驱动的版本是3.0.0~3.1.0,也似乎没有问题,可惜就是无法正常导包。https://github.com/Grokzen/redis-py-cluster/releases这里是源码包的地址
python redis cluster_rediscluster集群原理

 

槽点3

那么就卸载redis-cluster-py(没有卸载redis驱动是一个更大的槽点),重新安装其他版本的redis-py-cluster(这里笔者下载的是redis-py-cluster-1.3.5)

python redis cluster_rediscluster集群原理

通过这里https://github.com/Grokzen/redis-py-cluster/releases下载较低版本的安装包,自行安装,隐约记得之前是1.3.5版本的,这里下载的是redis-py-cluster 1.3.5
tar xf redis-py-cluster-1.3.5.tar.gz
cd redis-py-cluster-1.3.5
python3 setup.py install
他这里命名告诉best match:redis 3.0.1,
然后再次尝试导包from rediscluster import StrictRedisCluster,仍旧会出现如下错误。

python redis cluster_rediscluster集群原理

>>> from rediscluster import StrictRedisCluster
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/__init__.py", line 7, in <module>
    from .client import StrictRedisCluster, RedisCluster
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/client.py", line 10, in <module>
    from .connection import (
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/connection.py", line 11, in <module>
    from .nodemanager import NodeManager
  File "/usr/local/redis-py-cluster-1.3.5/rediscluster/nodemanager.py", line 12, in <module>
    from redis._compat import b, unicode, bytes, long, basestring
ImportError: cannot import name "b"
>>> 

代码100分

还是是redis-py和redis-py-cluster版本不兼容的问题,然后继续,尝试卸载redis-3.0.1,重新pip安装redis最新版(redis-3.3.11),仍旧报错。
python redis cluster_rediscluster集群原理

无奈再次卸载redis 3.3.11包,安装redis 2.10.6包
python redis cluster_rediscluster集群原理
终于……
python redis cluster_rediscluster集群原理

 

槽点4

后续进过尝试,redis-py-cluster-1.3.5的在安装的时候,仍旧会找到最新的redis版本,结果就是因为redis-py-cluster和redis版本兼容问题,仍旧无法正常导包
所以想要使用redis-py-cluster-1.3.5,需要提前先安装好redis 2.10.6,不要让redis-py-cluster-1.3.5自行安装一个不兼容的redis(redis-py)包

python redis cluster_rediscluster集群原理
单独安装redis-py-cluster-1.3.5又会自动安装redis-3*版本的包,结果导包的时候还是会出错。
python redis cluster_rediscluster集群原理

后续经过尝试,只有redis-py-cluster-1.3.6的在安装的时候(没有提前安装任何redis包),会自动安装对应的redis版本(redis-2.10.6)
python redis cluster_rediscluster集群原理

 

总结:
1,结论先行的话就是:不要使用直接pip自动安装redis,redis-py-cluster这两个包,也不要直接pip单独安装redis-py-cluster,自动安装的两个包因为版本冲突无法正常使用。
2,1)可以下载指定的redis-py包(redis-py-2.10.6),redis-py-cluster(redis-py-cluster-1.3.5.tar.gz)包,分别手动安装。
   2)也可以单独下载的redis-py-cluster 1.3.6安装,安装是可以成功下载其依赖的redis包的正确的版本。
3,最新版的redis驱动包是不支持redis-py-cluster的,包括使用pip自动安装(升级)redis,redis-py-cluster,出来之后是无法导包成功的(from rediscluster import StrictRedisCluster )。
4,对于redis,redis-py-cluster,最好最好最好手动下载对应版本的包,手动安装。
5,Python的Redis包括Redis集群连接驱动包的命名真的很蛋疼。

 

https://github.com/Grokzen/redis-py-cluster
https://github.com/andymccurdy/redis-py
https://www.cnblogs.com/theboy/p/10690838.html
https://www.cnblogs.com/smileyes/p/9971240.html
https://blog.csdn.net/u010953692/article/details/100062261

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10310.html

(0)
上一篇 2022-12-29
下一篇 2022-12-29

相关推荐

  • 数据库优化方法整理(开发人员实用)「建议收藏」

    数据库优化方法整理(开发人员实用)「建议收藏」特别说明: 本文只是面对数据库应用开发的程序员,不适合专业 DBA ,DBA 在数据库性能优化方面需要了解更多的知识; 本文许多示例及概念是基于 Oracle 数据库描述,对于其它关系型数据库也可以…

    2023-02-14
    136
  • MySQL数据库01[通俗易懂]

    MySQL数据库01[通俗易懂]MySQL数据库 前言: 随着时代的进步,大数据也逐渐走进大家的生活中,成为大家密不可分的一样东西。因此,作为程序员的我们,要学习并会使用数据库。 什么是数据库? 数据库就是一个文件系统,通过标准的S

    2023-02-09
    155
  • SQL与数据库编程学习笔记-day2

    SQL与数据库编程学习笔记-day2SQL与数据库编程学习笔记-day2 修改数据库密码; 首先打开在数据库bin目录下,打开cmd窗口;登入root用户。(用户名root,密码root); 登出数据库(修改数据库密码必须在数据库外执行

    2023-05-06
    140
  • Postgesql 空间点聚合实验

    Postgesql 空间点聚合实验聚合效果:根据范围四至获取区域内的聚合点数据。 aggregate_build_data /***创建测试空间点数据库***/ create table tpoint( gid serial pri…

    2023-01-27
    167
  • 简单的图片排序_如何给图片排序

    简单的图片排序_如何给图片排序昨天工作的时候写了图片的排序接口,让后台自定义图片的位置. 话不多说先上修改图片序号的实现原理: 将5号移到2号, 此时区间 [ 2,5 ) 内的排序号都要加1. 将2号移到5号, 此时区间 ( 2,

    2023-01-22
    142
  • 结合实际应用总结mySql语句关键场景用法 – sun「终于解决」

    结合实际应用总结mySql语句关键场景用法 – sun「终于解决」inner join,case when,concat

    2023-02-17
    157
  • Python对指数函数的支持

    Python对指数函数的支持指数函数是高中数学中比较重要的一类函数,在实际应用中也有很广泛的用处。Python作为一门强大且灵活的编程语言,也为我们提供了强大的指数函数支持。本文将介绍Python在指数函数方面的各种应用。

    2024-04-14
    73
  • Python Class:定义和使用类来组织代码

    Python Class:定义和使用类来组织代码Python是一种简单易学的编程语言。使用Python开发应用程序,涉及到的代码量往往比其他语言要少,提高了程序的开发效率。在Python中,类是一种非常重要而且强大的机制,它可以帮助开发者组织代码并且降低代码的重复性。类的使用方式类似于其他面向对象的编程语言,比如Java、C++等。

    2024-01-20
    100

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注