美文网首页Python精选
python连接Redis方式

python连接Redis方式

作者: warmsirius | 来源:发表于2019-10-07 08:39 被阅读0次

参考文章

工作中用到了redis,想写篇文章复习以及学习一下python连接redis的几种原始方式,而不是框架中的连接方法,以此作为记录。

一、Redis类连接redis

python中要使用redis,首先需要导入redis模块:

import redis

使用redis.Reids创建实例化对象:

import redis


rdb = redis.Redis(host=to_host, port=to_port, db=to_db, decode_responses=True)

例如:

import redis


rdb = redis.Redis(host="127.0.0.1", port=6379, db=9)
rdb.set("name", "苍")
print(rdb.get("name"))

# 输出
b'\xe8\x8b\x8d'

可以看出,输出的是字节格式,存取的时候redis都会进行编码或者解码,redis直接返回二进制的结果,对于结果还需要进行解码才能得到某些字符的显示。

不过也别担心,Redis类提供了一个参数decode_responses (解码响应),设置decode_response=True即省去了获得的二进制结果解码的过程。

import redis


rdb = redis.Redis(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb.set("name", "苍")
print(rdb.get("name"))

# 输出
苍

二、StrictRedis连接

StrictRedisRedis的使用方式一样,参见源码:

StrictRedis = Redis

代码说明在目前版本redis 3.3.8中,StrictRedisRedis一样,木有区别。(不知道说的对不对)

注意:在之前的某些版本中

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

简单说,官方推荐使用StrictRedis方法。

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

·LREM:参数 ‘num’‘value’ 的顺序交换了一下,clilrem queueName 0 ‘string’。 这里的0时所有的意思。 但是Redis这个类,把控制和string调换了。
·ZADD:实现时 scorevalue 的顺序不小心弄反了,后来有人用了,就这样了
·SETEX: timevalue 的顺序反了
.Pool: 连接池

Redis的连接池的方法:

pool = redis.ConnectionPool(host=‘localhost‘, port=6379, db=0)
r = redis.Redis(connection_pool=pool)

StrictRedis的连接池的实现方式:

pool = redis.ConnectionPool(host=‘127.0.0.1‘, port=6379)
r = redis.StrictRedis(connection_pool=pool)

三、ConnectionPool连接池连接Redis

使用连接池ConnectionPool连接Redis

方式一: Redis连接池(不推荐)

from redis import ConnectionPool, Redis


pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = Redis(connection_pool=pool)

方式二: StrictRedis连接池

from redis import ConnectionPool, StrictRedis


pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = StrictRedis(connection_pool=pool)

例如:

from redis import ConnectionPool, Redis


pool = ConnectionPool(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb = Redis(connection_pool=pool)

rdb.set("name", "苍")
print(rdb.get("name"))

# 输出
苍

四、Redis中管道pipeline

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline原子性操作

方式一: Redis连接池管道(不推荐)

from redis import ConnectionPool, Redis


pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = Redis(connection_pool=pool)

pipe = rdb.pipeline(transaction=True) # 默认transaction为True

# redis的操作1
# redis的操作2
# ...
pipe.execute()

方式二: StrictRedis连接池管道

from redis import ConnectionPool, StrictRedis


pool = ConnectionPool(host=to_host, port=to_port, db=to_db, decode_responses=True)
rdb = StrictRedis(connection_pool=pool)

pipe = rdb.pipeline(transaction=True) # 默认transaction为True

# redis的操作1
# redis的操作2
# ...
pipe.execute()

例如:

from redis import ConnectionPool, Redis


pool = ConnectionPool(host="127.0.0.1", port=6379, db=9, decode_responses=True)
rdb = Redis(connection_pool=pool)

pipe = rdb.pipeline(transaction=True)
rdb.set("name", "hero久诚")
rdb.set("age", 18)
pipe.execute()

print(rdb.get("name"))
print(rdb.get("age"))

# 输出
hero久诚
18

相关文章

网友评论

    本文标题:python连接Redis方式

    本文链接:https://www.haomeiwen.com/subject/gzcppctx.html