Maison  >  Article  >  base de données  >  Une brève analyse de la façon d'utiliser Redis en Python

Une brève analyse de la façon d'utiliser Redis en Python

青灯夜游
青灯夜游avant
2021-11-22 19:22:542603parcourir

Comment utiliser Redis en Python ? L'article suivant vous présentera comment utiliser Redis en Python. J'espère qu'il vous sera utile !

Une brève analyse de la façon d'utiliser Redis en Python

Auparavant, nous utilisions le client Redis pour utiliser Redis, mais dans le travail réel, dans la plupart des cas, nous l'utilisons via le codeRedis, puisque l'éditeur est familier avec Python, nous allons donc aujourd'hui apprendre à utiliser Python pour faire fonctionner Redis code>. [Recommandations associées : <a href="http://www.php.cn/course/list/54.html" target="_blank">Tutoriel vidéo Redis</a>]<code>Redis 客户端对 Redis 进行使用的,但是实际工作中,我们大多数情况下都是通过代码来使用 Redis 的,由于小编对 Python 比较熟悉,所以我们今天就一起来学习下如何使用 Python 来操作 Redis。【相关推荐:Redis视频教程

环境准备

  • Redis 首先需要安装好。
  • Python 安装好(建议使用 Python3)。
  • RedisPython 库安装好(pip install redis)。

开始实践

小试牛刀

例:我们计划通过 Python 连接到 Redis。然后写入一个 kv,最后将查询到的 v 打印出来。

直接连接

#!/usr/bin/python3

import redis   # 导入redis模块

r = redis.Redis(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,password为认证密码,redis默认端口是6379
r.set(&#39;name&#39;, &#39;phyger-from-python-redis&#39;)  # key是"name" value是"phyger-from-python-redis" 将键值对存入redis缓存
print(r[&#39;name&#39;])  # 第一种:取出键name对应的值
print(r.get(&#39;name&#39;))  # 第二种:取出键name对应的值
print(type(r.get(&#39;name&#39;)))

Une brève analyse de la façon dutiliser Redis en Python

Une brève analyse de la façon dutiliser Redis en Python

其中的 get 为连接池最后一个执行的命令。

连接池

通常情况下,需要连接 redis 时,会创建一个连接,基于这个连接进行 redis 操作,操作完成后去释放。正常情况下,这是没有问题的,但是并发量较高的情况下,频繁的连接创建和释放对性能会有较高的影响,于是连接池发挥作用。

连接池的原理:预先创建多个连接,当进行 redis 操作时,直接获取已经创建好的连接进行操作。完成后,不会释放这个连接,而是让其返回连接池,用于后续 redis 操作!这样避免连续创建和释放,从而提高了性能!

#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-from-python-redis&#39;)
print(r[&#39;name&#39;])
print(r.get(&#39;name&#39;))  # 取出键name对应的值
print(type(r.get(&#39;name&#39;)))

Une brève analyse de la façon dutiliser Redis en Python

你会发现,在实际使用中直连和使用连接池的效果是一样的,只是在高并发的时候会有明显的区别。

基操实践

对于众多的 Redis 命令,我们在此以 SET 命令为例进行展示。

格式: set(name, value, ex=None, px=None, nx=False, xx=False)

在 redis-py 中 set 命令的参数:

Exemple : Notre plan Connectez-vous à Redis via Python. Ensuite, écrivez un kv, et enfin imprimez le v interrogé.

Connexion directe

#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-from-python-redis&#39;,ex=3)
print(r[&#39;name&#39;])    # 应当有v
time.sleep(3)
print(r.get(&#39;name&#39;))  # 应当无v
print(type(r.get(&#39;name&#39;)))
Une brève analyse de la façon dutiliser Redis en Python
参数名 释义
ex <int></int>过期时间(m)
px <int></int>过期时间(ms)
nx <bool></bool>如果为真,则只有 name 不存在时,当前 set 操作才执行
xx <bool></bool>

Préparation de l'environnement

  • Redis doit être installé en premier.
  • Python est installé (Python3 est recommandé).
  • La bibliothèque Python de Redis est installée (pip install redis).

Commencer l'entraînement

Essayer

🎜Une brève analyse de la façon dutiliser Redis en Python🎜
🎜Le get est la dernière commande exécutée par le pool de connexions. 🎜

Pool de connexions

🎜Normalement, lorsque vous devez vous connecter à redis, une connexion sera créée et basée sur cela opération de connexionredis, relâchez-la une fois l'opération terminée. Dans des circonstances normales, cela ne pose pas de problème, mais lorsque le niveau de concurrence est élevé, la création et la libération fréquentes de connexions auront un impact important sur les performances, de sorte que le pool de connexions entre en jeu. 🎜🎜Le principe du pool de connexions : créez plusieurs connexions à l'avance lors de l'exécution de l'opération redis, obtenez directement les connexions déjà créées pour l'opération. Une fois terminée, la connexion ne sera pas libérée, mais renvoyée au pool de connexions pour les opérations redis ultérieures ! Cela évite la création et la publication continues, améliorant ainsi les performances ! 🎜
#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-0&#39;,nx=3) # set失败
print(r[&#39;name&#39;])    # 应当不生效
r.set(&#39;name1&#39;, &#39;phyger-1&#39;,nx=3) # set成功
print(r.get(&#39;name1&#39;))  # 应当生效
print(type(r.get(&#39;name&#39;)))
🎜Une brève analyse de la façon dutiliser Redis en Python🎜🎜Vous constaterez qu'en utilisation réelle, l'effet de la connexion directe et l'utilisation du pool de connexions sont les mêmes, mais il y aura des différences évidentes en termes de concurrence élevée. 🎜

Pratique d'utilisation de base

🎜Pour de nombreuses commandes Redis, nous utilisons SET ici La commande est présenté à titre d'exemple. 🎜🎜Format : set(name, value, ex=None, px=None, nx=False, xx=False)🎜🎜dans les paramètres redis-py de la commande set : 🎜🎜
Nom du paramètre Interprétation
ex🎜 <int></int>Délai d'expiration (m)🎜🎜
px🎜 <int></int> Délai d'expiration (ms)🎜🎜
nx🎜 <bool></bool>Si vrai, l'opération définie actuelle ne sera exécutée que lorsque le nom n'existe pas🎜🎜
xx🎜 <bool></bool>Si vrai, l'opération d'ensemble actuelle sera exécutée uniquement si le nom existe🎜🎜🎜🎜

ex

我们计划创建一个 kv 并且设置其 ex3,期待 3 秒后此 kv 会变为 None

#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-from-python-redis&#39;,ex=3)
print(r[&#39;name&#39;])    # 应当有v
time.sleep(3)
print(r.get(&#39;name&#39;))  # 应当无v
print(type(r.get(&#39;name&#39;)))

Une brève analyse de la façon dutiliser Redis en Python

nx

由于 px 的单位太短,我们就不做演示,效果和 ex 相同。

我们计划去重复 set 前面已经 set 过的 name,不出意外的话,在 nx 为真时,我们将会 set 失败。但是人如果 set 不存在的 name1,则会成功。

#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-0&#39;,nx=3) # set失败
print(r[&#39;name&#39;])    # 应当不生效
r.set(&#39;name1&#39;, &#39;phyger-1&#39;,nx=3) # set成功
print(r.get(&#39;name1&#39;))  # 应当生效
print(type(r.get(&#39;name&#39;)))

Une brève analyse de la façon dutiliser Redis en Python

如上,你会发现 nameset 未生效,因为 name 已经存在于数据库中。而 name1set 已经生效,因为 name1 是之前在数据库中不存在的。

xx

我们计划去重复 set 前面已经 set 过的 name,不出意外的话,在 nx 为真时,我们将会 set 成功。但是人如果 set 不存在的 name2,则会失败。

#!/usr/bin/python3

import redis,time   # 导入redis模块,通过python操作redis 也可以直接在redis主机的服务端操作缓存数据库

pool = redis.ConnectionPool(host=&#39;localhost&#39;, port=6379, password="pwd@321", decode_responses=True)   # host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
r = redis.Redis(connection_pool=pool)
r.set(&#39;name&#39;, &#39;phyger-0&#39;,xx=3) # set失败
print(r[&#39;name&#39;])    # 应当变了
r.set(&#39;name2&#39;, &#39;phyger-1&#39;,xx=3) # set成功
print(r.get(&#39;name2&#39;))  # 应当没有set成功
print(type(r.get(&#39;name&#39;)))

Une brève analyse de la façon dutiliser Redis en Python

以上,就是今天全部的内容,更多信息建议参考 redis 官方文档。

更多编程相关知识,请访问:编程视频!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer