使用python操作redis,管道

一、redis连接

redis提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。

redis连接实例是线程安全的,可以直接将redis连接实例设置为一个全局变量,直接使用。如果需要另一个Redis实例(or Redis数据库)时,就需要重新创建redis连接实例来获取一个新的连接。

安装redis

pip install redis

连接redis,加上decode_responses=True,写入的键值对中的value为str类型,不加这个参数写入的则为字节类型。

二、连接池连接

redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池

连接池:redis_pool.py

import redis
from redis_pool import POOl
conn = redis.Redis(connection_pool=POOl)
conn.set('name', 'LinWOW')
print(conn.get('name'))

三、redis-py 操作redis

python操作redis的命令和命令行几乎一致,除了del,因为和关键字重叠,所以用delete

1、字符串类型操作:

set----键key

con.set('key','values')

get---获取数值

con.get('com')

append --- 追加

con.append('keys','values')

delete---删除

con.delete('keys')

2、List类型:

rpush 、lpush----添加数据

con.rpush('keys','values')

con.lpush('keys','values')

lrange---查看数据

con.lrange('list',0,11)

lset---修改数据

con.lset('list_F',1,'Fyn')---返回布尔值

rpop ---- 随机删除一个数据

con.rpop('keys')

lrem ---- 指定删除一个数据时

con.lrem('list_f',0,'okl')

3、Hash类型

hmget --- 添加多条数据,也可插入单条数据

以字典的形式插入

con.hmste('keys',{'name':''age})#插入结果返回布尔值

hget , hgetall , hvals,hkeys查看数据

con.hget('ok','name')

con.hgetall('ok')#结果返回字典

con.hvals('ok')#获取所有的键值

con.hkeys('ok')#获取所有的键

hdel 、 del----删除某个字段,删除整个hash

con.hdel('ok',age)#指定删除某个字段 ,成功的话返回1,否则返回0

con.del('ok')#删除整个hash

4、set

sadd---添加数据

con.sadd('mk','oi'.'Hwelo')

smembers ---- 查看所有数据

con.smembers('mk')

spop---随机删除一个元素

con.spop('con.spop('mk')')

srem--- 指定删除某个元素

con.srem('mk','oi')

5、sorted set

zadd---添加数据

con.zadd('set_f',{'name':1.1,'age':2,'sex':3})

zrange ---- 查询数据

con.zrange('set_f',0,11)

zrem ---指定删除某个元素

con.zrem('set_f','age')

四、redis-py管道操作 piplines

管道是redis的子类,它支持在一个请求中款冲多个命令到服务器

管道使redis的读写速度更加的快速。秒级取值1000+的数据。

并且使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。

#1、创建一个管道
pipe = con.pipeline()

#缓冲多个命令
pipe.keys('*')
pipe.set('name','Mkl')

#执行命令
res = pipe.execute()#返回列表
print(res[0])
print(res[1])

管道的命令可以写在一起,如:

pipe.set('hello', 'redis').sadd('faz', 'baz').incr('num').execute()
print(r.get("name"))
print(r.get("role"))
print(r.get("num"))