下载redis命令
pip install redis
连接redis
import redis
# host是redis主机,需要redis服务端和客户端都起着 redis默认端口是6379
pool = redis.ConnectionPool(host='localhost', port=6379,decode_responses=True)
r = redis.Redis(connection_pool=pool)
操作字符串
# key是"aa" value是"11" 将键值对存入redis缓存,有效期300秒
r.set('aa', '11',ex=300)
# key是"bb" value是"22" 将键值对存入redis缓存,有效期30000毫秒
r.set('bb', '22',px=30000)
# 取出键aa对应的值
print(r.get('aa'))
#批量获取,取出键gender、name对应的值
print(r.mget('aa', 'bb'))
操作hash
# 设置一个哈希“user1”,其中包括name=shamo,age=18,job=tester
r.hset('user1','name','lisa')
r.hset('user1','age',18)
r.hset('user1','job','tester')
# 获取user1对应的所有值
print(r.hgetall('user1'))
# 批量设置哈希"user2",其中包括name=xiao,age=18,job=tester
r.hmset('user2',{'name':'xiao','age':18,'job':'tester'})
# 批量获取哈希"user2"中的key为name和age的值
print(r.hmget('user2', 'name', 'age'))
操作列表
# 向列表"list1"中追加数据data1,data2
r.lpush('list1','data1','data2')
# 获取列表"list1"中所有数据
print(r.lrange('list1',0,-1))
操作集合
# 向列表"set1"中追加数据data1,data2
r.sadd('set1','data1','data2')
# 获取集合“set1”的所有元素
print(r.smembers('set1'))
操作有序集合
# 向有序集合"zset1"中追加数据data1,data2,其中数字是各自数据的分数,用来排序
r.zadd('zset1',{'data1':14,'data2':13})
# 获取"zset1"中所有数据
print(r.zrange('zset1',0,-1))
其他操作
r.delete('key1') #删除某个key
r.exists('key1') #检查key是否存在
r.expire('user1',10) #设置这个key的有效期为10秒
r.pexpire('user2',10000) #设置这个key的有效期为10000毫秒
r.type('zset1') #获取某个key对应的数据类型
备注:项目后台是java语言开发,所以在redis缓存中存储的基本都是java对象的序列化数据,那么python在获取java对象的序列化数据后需要进行反序列化转成对象才能正常获取数据信息,因此安装一个第三方库,用来说java对象的转换
安装第三方库命令
pip install javaobj-py3
然后封装一个redis方法:
class RedisUtil:
def __init__(self,host,pwd,port=6379,decode_responses=False):
"""
:param host: redis服务器地址
:param pwd: redis密码
:param port: redis端口 默认6379
:param decode_responses: 默认为False,表示返回的是bytes数据
"""
self.pool = redis.ConnectionPool(host=host,
port=port,password=pwd,encoding_errors='ignore',decode_responses=decode_resp
onses)
self.r = redis.Redis(connection_pool=self.pool)
def get(self,key):
type = self.r.type(key).decode('utf8')
if type=='string':
return self.r.get(key)
elif type=='hash':
return self.r.hgetall(key)
elif type=='zset':
return self.r.zrange(key,0,-1)
elif type=='set':
return self.r.smembers(key)
else:
raise Exception(f'不支持的数据类型{type}或者{key}不存在')```然后在有需要用到redis中的用例中调用:rd = RedisUtil(host='121.42.15.146',pwd='testfan')
res = rd.get('xxxx')
#将从redis中得到的序列化java对象转换成python对象
res1 = javaobj.loads(res) #res1是个列表如果接口运用到redis比较多,思路:在公共方法里面加一个钩子函数。例如:
@pytest.fixture(scope=‘session’)
def redis_conn():
redis_util=RedisUtil(host=‘127.0.0.1’, pwd=‘123456’)
return redis_conn
然后在需要用的测试用例里面直接调用res = redis_con.get()