首页 > 数据库 >使用redis-py的两个类Redis和StrictRedis时遇到的坑

使用redis-py的两个类Redis和StrictRedis时遇到的坑

时间:2023-08-03 17:06:59浏览次数:41  
标签:None redis py Redis connection StrictRedis pool


redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令(比如,SET命令对应与StrictRedis.set方法)。Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。 简单说,官方推荐使用StrictRedis方法。 

 

不推荐Redis类,原因是他和咱们在redis-cli操作有些不一样,主要不一样是下面这三个方面。

 

 

·LREM:参数 ‘num’ 和 ‘value’ 的顺序交换了一下,cli是 lrem queueName 0 ‘string’ 。  这里的0时所有的意思。 但是Redis这个类,把控制和string调换了。 

·ZADD:实现时 score 和 value 的顺序不小心弄反了,后来有人用了,就这样了

·SETEX: time 和 value 的顺序反了

.Pool:   连接池

 


 

再就是连接池,很多人用Redis的原因是,以前的一些个博客的关于python redis的操作,基本用的时Redis的连接池方式。  其实StrictRedis也是支持的。

Redis的连接池的方法:


Python


 

pool         =         redis         .         ConnectionPool         (         host         =         'localhost'         ,         port         =         6379         ,         db         =         0         )


r         =         redis         .         Redis         (         connection_pool         =         pool         )




StrictRedis的连接池的实现方式:

 

 


Python


 

In         [         4         ]         :         pool         =         redis         .         ConnectionPool         (         host         =         '127.0.0.1'         ,         port         =         6379         )


                  


In         [         5         ]         :         r         =         redis         .         StrictRedis         (         connection_pool         =         pool         )



 

看下官方的创建redis的时候,都可以添加什么参数。 

 

 

Python


 

class         redis         .         StrictRedis         (         host         =         'localhost'         ,         port         =         6379         ,         db         =         0         ,         password         =         None         ,         socket_timeout         =         None         ,         connection_pool         =         None         ,         charset         =         'utf-8'         ,         errors         =         'strict'         ,         decode_responses         =         False         ,         unix_socket_path         =         None         )


Implementation          of          the          Redis          protocol         .


                  


This          abstract          class         provides         a         Python          interface          to          all         Redis          commands         and         an          implementation          of          the          Redis          protocol         .


                  


Connection          and         Pipeline          derive          from         this         ,         implementing          how          the          commands         are          sent          and         received          to          the          Redis          server



另外的再说下redis的对于有些编码入库的问题,redis的连接附加的参数里面,默认编码是utf-8,但是如果你非要用GBK那就需要指明你的chardet和decode_responses为True 。 

 


Python


 

class                    redis         .         StrictRedis         (         host         =         'localhost'         ,         port         =         6379         ,         db         =         0         ,         password         =         None         ,         socket_timeout         =         None         ,         connection_pool         =         None         ,                    charset         =         'GBK '         ,         errors         =         'strict'         ,                    decode_responses         =         True         )


 

 

嗯,剩下的就没什么了 。以后要好好的看文档哈。

 

更新, 今天又遇到这问题了… 

 


Python

#xiaorui.cc


           redis         .         zadd         (         'timer_scheduler'         ,         json         .         dumps         (         urlbody         )         ,         score         )


           File         "/usr/local/lib/python2.7/site-packages/redis/client.py"         ,         line         1574         ,         in         zadd


             return         self         .         execute_command         (         'ZADD'         ,         name         ,         *         pieces         )


           File         "/usr/local/lib/python2.7/site-packages/redis/client.py"         ,         line         565         ,         in         execute_command


             return         self         .         parse_response         (         connection         ,         command_name         ,         *         *         options         )


           File         "/usr/local/lib/python2.7/site-packages/redis/client.py"         ,         line         577         ,         in         parse_response


             response         =         connection         .         read_response         (         )


           File         "/usr/local/lib/python2.7/site-packages/redis/connection.py"         ,         line         574         ,         in         read_response


             raise         response


ResponseError         :         value          is         not         a         valid          float

 



 

很明显,顺序不对…  ResponseError: value is not a valid float  ,字符串跟score反了…


标签:None,redis,py,Redis,connection,StrictRedis,pool
From: https://blog.51cto.com/u_6186189/6950817

相关文章

  • django 1.7 manage.py 详解
    django自从1.7之后解决了很多问题,并且对于数据库的操作带来了几个新命令用以解决数据迁移问题,今天开始看看文档学习一下。部分内容来源于网络Django自1.7之后增加了类似South的migration功能,修改Model后可以在不影响现有数据的前提下重建表结构。这真是个千呼万唤始......
  • pyredis使用场景
    1.安装pyredis首先安装pip <SHELL>#apt-getinstallpython-pip......<SHELL>#pipinstall--proxy=http://172.1.2.6:8080redisDownl......
  • Python中实现远程调用(RPC、RMI)简单例子
    远程调用使得调用远程服务器的对象、方法的方式就和调用本地对象、方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了。远程调用是分布式系统的基础。远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI)。RPCRPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有......
  • pyhon - 监听usb插入并复制
    importtimefromshutilimportcopytreefrompsutilimportdisk_partitionscopyFlag=FalsedefusbCopy(driver):try:path=r'D:\usb-'+time.strftime("%Y%m%d%H%M%S",time.localtime())print(f'开始复制,复制路径:{pa......
  • memcpy赋值/复制速度快的底层
    memcpy赋值速度一般来说比多重for循环更快,对于其底层原理十分感兴趣,面向百度,总结了一些答案,不是很专业,就是理解个大概总的来说有这么两个主要原因:1.SIMD:就是使用多个微处理器对同一个数据进行操作,其实就是并行操作参考:https://zhuanlan.zhihu.com/p/553270372.......
  • pycharm配置QtDesigner
    一、安装需要的库pipinstallpyqt5pipinstallpyqt5-tools 二、配置QtDesigner 配置 QtDesignerName:QtDesignerGroup:QtProgram:C:\python\venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exeWorkingdirectory:$ProjectFileDir$ 配置 PyUICNa......
  • 巧用Redis实现分布式锁详细介绍_Redis
    目录前言手写Redis分布式锁Redissonlock()lock(longleaseTime,TimeUnitunit)tryLock(longwaitTime,longleaseTime,TimeUnitunit)RedLock红锁总结前言无论是synchronized还是Lock,都运行在线程级别上,必须运行在同一个JVM中。如果竞争资源的进程不在同一个JVM中时,......
  • python以及java环境搭建+解决不同版本环境共存问题
    1.搭建python环境1.安装python3.9.7,选择自定义安装、将文件添加至环境路径,然后选择下一步。2.默认、然后选择下一步。3.选择适用于所有使用者,选择自己想要存放的路径,然后选择点击安装。等待片刻。。。4.点击安装完成。使用cdm命令,输入python查看是否安装成功。5.安装python2......
  • 解决pycharm书写html有注释的情况下,会有多余空格情况
    一、情况截图(看着有点不舒服)二、解决方法三、验证......
  • pycharm使用技巧汇总
    pycharm使用技巧汇总0、安装pycharm略。1、指定虚拟环境 2、创建代码块pycharm自定义代码片段https://www.cnblogs.com/andy9468/p/8988501.htmlpycharm中python模板代码自动生成https://www.cnblogs.com/andy9468/p/8302701.html 3、远程调试远程调试忽略上传文件......