1、操作模式
redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使用官方的语法和命令,Redis是StrictRedis的子类,用于向后兼容旧版本的redis-py。
importredis
r= redis.Redis(host="192.168.0.106", port=6379)
r.set("name", "pd")
val= r.get("name")print(val) #b'pd'
2、连接池(推荐使用这种方式)
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池。
importredis
pool= redis.ConnectionPool(host="192.168.0.106", port=6379, max_connections=1000) #这里最多创建1000个连接
r = redis.Redis(connection_pool=pool)
r.set("foo", "Bar")
用一个py文件来保存创建连接池,其他py文件需要使用就直接导入,相当于使用了单例模式
#redis_pool.py
importredis
pool= redis.ConnectionPool(host="192.168.0.106", port=6379, max_connections=1000)
#test.py
importredisfrom redis_pool importpoolwhileTrue:
key= input("请输入key:")
value= input("请输入value:")#去连接池中获取连接
r = redis.Redis(connection_pool=pool)#设置值
r.set(key, value)
3、操作
String(基础)操作:redis中的String在内存中按照一个name对应一个value来存储,如下图:
set(name, value, ex=None, px=None, nx=False, xx=False)
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,当前set操作才执行
setnx(name, value)
设置值,只有name不存在时,才执行设置操作
如:
r.set("cc", "xx")
r.setnx("cc", "ss")
r.get("cc") #b'xx'
对比:
r.set("cc", "xx")
r.set("cc", "ss")
r.get("cc") #b'ss'
mset(name, mapping)
批量设置值
如:mset({"k1": "v1", "k2": "v2"})
msetnx(name, mapping)
批量设置值,只有name不存在时,才执行设置操作
示例:
r.mset({"k1": "aa", "k2": "bb"})
r.mset({"k1": "cc", "k2": "dd"})
ret1= r.mget("k1", "k2") #[b'cc', b'dd']
r.mset({"k1": "aa", "k2": "bb"})
r.msetnx({"k1": "cc", "k2": "dd"})
ret2= r.mget("k1", "k2") #[b'aa', b'bb']
setex(name, time, value)
设置值
参数:time,过期时间(数字秒 或 timedelta对象)
psetex(name, time_ms, value)
设置值
参数:time_ms,过期时间(数字毫秒 或 timedelta对象)
get(name)
获取某个值
mget(keys, *args)
批量获取
如:
mget("k1", "k2") 或 mget(["k1", "k2"])
getset(name, value)
设置新值并获取原来的值
r.set("vv", "xx")
ret= r.getset("vv", "ss")print(ret) #b'xx'
getrange(key, start, end)
获取子序列(根据字节获取,非字符)
参数:
name,redis的name
start,起始位置(字节)
end,结束位置(字节)
如:
r.set("k1", "你好吗")
ret= r.getrange("k1", 0, 2)print(ret) #b'\xe4\xbd\xa0'
print(ret.decode("utf8")) #你
strlen(name)
返回name对应值的字节长度(一个汉字3个字节)
示例:
r.set("k1", "你好吗")
ret= r.strlen("k1") #9
setrange(name, offset, value)
r.set("k1", "12345")
r.setrange("k1", 2, "a")
b'12a45'r.setrange("k1", 2, "ab")
b'12ab5'r.setrange("k1", 2, "abde")
b'12abde'
incr(name, amount=1)
自增name对应的值,当name不存在时,则创建name=amount,否则,则自增。
参数:
name,Redis的name
amount,自增数(必须是整数)
示例:
r.set("a", 20)
r.incr("a", amount=2)
r.get("a") #22
incrbyfloat(name, amoun