<jupyter_start><jupyter_text>[官方手册](https://github.com/andymccurdy/redis-py/blob/master/README.rst) 安装 源码安装最新版redis-py 3.x（推荐）- 下载地址 https://github.com/andymccurdy/redis-py/releases- 解压，cd- python setup.py install 或者 pip install redis 安装完成后检查版本>pip show redisredis 2.x 和3.x 参数差异较多，使用2.x时，根据下文介绍注意区别  Getting Started<jupyter_code>import redis<jupyter_output><empty_output><jupyter_text>查看版本<jupyter_code>redis.VERSION
# r = redis.Redis(host='172.16.58.3', port=6379, db=0)
r = redis.Redis(host='localhost', port=6379, db=0)
r.set('foo', 'bar')
r.get('foo')<jupyter_output><empty_output><jupyter_text>redis-py 2.X 与 3.0 使用区别 Redis and StrictRedis1. “StrictRedis”已重命名为“Redis”，并且提供了名为“StrictRedis”的别名，以便之前使用“StrictRedis”的用户可以继续保持不变。   已经使用StrictRedis的2.X用户不必更改类名。2. 以下命令稍作调整(以下为redis-py 3.x) - SETEX: 参数顺序 (name, time, value). - LREM: 参数顺序 (name, num, value). - TTL and PTTL: 返回值现在始终为int并且与官方Redis命令匹配     （> 0表示超时，-1表示密钥存在但是没有设置过期时间，-2表示密钥不存在）      SSL Connections    redis-py 3.0将`ssl_cert_reqs`选项的默认值从None更改为'required'。此更改在从远程SSL终结器接受证书时强制执行主机名验证。如果终结器没有在cert上正确设置主机名，这将导致redis-py 3.0引发`ConnectionError`。可以通过将**ssl_cert_reqs设置为None**来禁用此检查。请注意，这样做会删除安全检查。这样做自担风险。 MSET, MSETNX and ZADD参数改为字典现在3.0 的参数顺序是：```pythondef mset(self, mapping):def msetnx(self, mapping):def zadd(self, name, mapping, nx=False, xx=False, ch=False, incr=False):``` ZINCRBY现在3.0 的参数顺序是：```pythondef zincrby(self, name, amount, value):``` 编码和输出redis-py 3.0仅接受用户数据作为字节，字符串或数字（整数，长整数和浮点数），尝试将键或值指定为任何其他类型将引发DataError异常。redis-py 2.X试图将任何类型的输入强制转换为字符串。虽然偶尔方便，当用户传递布尔值（强制为'True'或'False'），None值（强制为'None'）或其他值（如用户定义）时，会导致各种隐藏错误类型。所有2.X用户都应该确保它们传递给redis-py的键和值是字节，字符串或数字。 Locksredis-py 3.0支持基于管道的Lock，现在只支持基于Lua的锁。在这样做时，LuaLock已重命名为Lock。这也意味着redis-py Lock对象需要Redis服务器2.6或更高版本。“LuaLock”的2.X用户现在必须改为使用“Lock”。 Locks as Context Managers上下文管理器- redis-py 3.0现在在使用锁作为上下文管理器时引发LockError，并且无法在指定的超时内获取锁。- 2.X用户应确保将他们的锁码包装在try / catch中，如下所示：```pythontry:    with r.lock('my-lock-key', blocking_timeout=5) as lock:         code you want executed only after the lock has been acquiredexcept LockError:     the lock wasn't acquired```  API 参考[Redis官方命令文档](https://redis.io/commands)redis-py试图遵循官方命令语法，除了如下例外：- SELECT: 未实现。请参阅下面“线程安全”部分中的说明- DEL: 'del'是Python语法中的保留关键字。因此redis-py使用'delete'代替。- MULTI/EXEC: 作为Pipeline类的一部分实现的。默认情况下，**管道在执行时用MULTI和EXEC语句包装，可以通过指定transaction = False来禁用**。查看以下有关管道的更多信息。- SUBSCRIBE/LISTEN: 与管道类似，PubSub实现为一个单独的类，因为它将底层连接置于无法执行非pubsub命令的状态。从Redis客户端调用pubsub方法将返回一个PubSub实例，可以在其中订阅频道并侦听消息。只能从Redis客户端调用PUBLISH- SCAN/SSCAN/HSCAN/ZSCAN: 每个命令都有一个等效的迭代器方法。对此使用scan_iter / sscan_iter / hscan_iter / zscan_iter方法。  更多细节 连接池redis-py使用连接池来管理与Redis服务器的连接。默认情况下，您创建的每个Redis实例将依次创建自己的连接池。您可以通过将已创建的连接池实例传递给Redis类的connection_pool参数来覆盖此行为并使用现有连接池。这样就可以实现多个Redis实例共享一个连接池。<jupyter_code>pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
r = redis.Redis(connection_pool=pool)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.128125, 'fraction_numerical': 0.02013888888888889, 'mean_word_length': 9.003472222222221, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 15, 'https://': 3, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 1, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '386028', 'license': 'MIT', 'n_tokens_mistral': 1755, 'n_tokens_neox': 1921, 'n_words': 145, 'path': '框架/Redis/Redis-py使用文档.ipynb', 'repo_name': 'wanZzz6/Modules-Learn', 'size': '2883'}