python之redis的使用及封装
首先安装 redis 模块
Python 要使用 redis,需要先安装 redis 模块:
sudo pip3 install redis
或
sudo easy_install redis
或
sudo python setup.py install
redis 提供两个类 Redis 和 StrictRedis, StrictRedis 用于实现大部分官方的命令,Redis 是 StrictRedis 的子类,用于向后兼用旧版本。
redis 取出的结果默认是字节,我们可以设定 decode_responses=True 改成字符串。
实例:
import redis # 导入redis 模块 r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'runoob') # 设置 name 对应的值 print(r['name']) print(r.get('name')) # 取出键 name 对应的值 print(type(r.get('name'))) # 查看类型
输出结果为:
runoob runoob <class 'str'>
连接池
redis-py 使用 connection pool 来管理对一个 redis server 的所有连接,避免每次建立、释放连接的开销。
默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数 Redis,这样就可以实现多个 Redis 实例共享一个连接池。
实例
import redis # 导入redis 模块 pool = redis.ConnectionPool(host='localhost', port=6379, decode_responses=True) r = redis.Redis(host='localhost', port=6379, decode_responses=True) r.set('name', 'runoob') # 设置 name 对应的值 print(r.get('name')) # 取出键 name 对应的值
下面为封装好的redis脚本
import redis
# 不适用于模糊搜索
class MyRedis():
def __init__(self, host = "XXX", port = 6379, password = 'XXX'):
pools = redis.ConnectionPool(host= host, port= port, password= password, decode_responses=True)
self.__redis = redis.StrictRedis(connection_pool=pools)
# 在 Redis 中设置值,默认,不存在则创建,存在则修改。
def set(self, key, value):
return self.__redis.set(key, value)
# 取出键对应的值
def get(self, key):
if self.__redis.exists(key):
return self.__redis.get(key)
else:
return None
# 获取有序集合中所有元素
def zrange(self, key):
if self.__redis.exists(key):
return self.__redis.zrange(key,0,-1,desc=False, withscores=True)
else:
return None
# 获取值的索引号
def zrank(self, key):
if self.__redis.exists(key):
return self.__redis.zrank(key)
else:
return None
# 按照分数范围获取name对应的有序集合的元素
def zrangebyscore(self, key):
if self.__redis.exists(key):
return self.__redis.zrangebyscore(key, 0, -1, withscores=True)
else:
return None
# 按照分数范围获取有序集合的元素并排序(默认从大到小排序)
def zrevrange(self, key):
if self.__redis.exists(key):
return self.__redis.zrevrange(key, 0, -1)
else:
return None
# 删除键值对
def delete(self,key):
if self.__redis.exists(key):
return self.__redis.delete(key)
else:
return None
# 获取key对应hash的所有键值
def hgetall(self, key):
if self.__redis.exists(key):
return self.__redis.hgetall(key)
else:
return None
# 统计返回的总个数
def rcount(self, re, key):
if self.__redis.exists(key):
sum = 0
for i in re:
print(i)
sum += 1
print("总共有%s个" % (sum))
if __name__ =="__main__":
MyR = MyRedis()
key = "XXX"
result = MyR.zrange(key)
print(result)
常见报错:
1、UserWarning: redis-py works best with hiredis. Please consider installing warnings.warn(msg)
解决方法:安装 hiredis库
2、redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
如果是 MyR.zrange 可尝试换成 MyR.hgetall

浙公网安备 33010602011771号