今天说下在python中如何连接redis及如何操作redis中的数据。
redis大家都知道,一般用来做缓存数据库,里面的数据的存储格式是key-value形式的。
首先导入redis模块,使用该模块操作redis数据库。
import redis
r = redis.Redis(host='118.24.5.90', password='12345*', db=5)
以上语句生成了redis对象r,后面就可以对redis进行增删改查操作。在redis里常用的数据格式有两种,string和hash。下面分别介绍下这两种数据格式的操作方法。
1,string类型。
#新增数据操作
1)r.set('luotuofeile', 'abcde') #在redis里会新增一条string类型的数据,key为'luotuofeile',value为'abcde'。
2)r.set('luotuofeile:user01', 'abcde') #在redis里会新增一条string类型的数据,key为luotuofeile:user,value为'abcde'。且所有key为'luotuofeile:'开头的字符串的数据都会被放到一个名为'luotuofeile'的文件夹下,方便管理,如图。
如果需要设置过期时间,可以加上参数ex=,r.set('luotuofeile', 'abcde',ex=60)过期时间60秒,或者
r.expire('luotuofeile',30) #指定过期时间
3),可以把任何数据类型转变为字符串存放在value中,如:
d = {"id":1,"username":"wangcan1","password":"8b634156edde77e407764d5166e34d20","is_admin":'骆驼飞了'}
r.set('luotuofeile:user03', json.dumps(d, ensure_ascii= False)) #转化为json字符串时要注意加上ensure_ascii参数,以免中文显示不了
#查询数据操作
values1 = r.get('luotuofeile:user01')
print(values1)
print(type(values1))
运行结果:
b'abcde'
<class 'bytes'>
可以看到查询结果是bytes类型,所以必须使用decode解码才能转换为str类型
values1 = r.get('luotuofeile:user01')
values1 = values1.decode()
print(values1)
print(type(values1))
运行结果:
abcde
<class 'str'>
还有个办法可以使返回数据直接返回str类型,即在创建redis对象时加上decode_responses=True参数,即:
r = redis.Redis(host='118.24.3.40', password='HK139bc&*', db=5, decode_responses=True)
这样redis返回的数据直接就是str类型。
查询操作还有其他方法:
r.keys() #该方法查询所有key,返回一个list,也支持模糊查询,r.keys('luotuofeile:*')
#修改数据
修改数据与新增数据方法相同,已存在hash类型的数据后,再修改为string,可以修改,不会报错
#删除数据
r.delete('luotuofeile:user01')
values1 = r.get('luotuofeile:user01')
print(values1)
运行结果:
None
删除操作另外还有两个方法:
r.flushdb() #删除当前连接数据库的所有数据
r.flushall() #删除所有数据库的数据
2,hash类型
#新增操作
r.hset('luotuofeile', 'user01', 'abcdefg') #无法设置过期时间
r.hset('luotuofeile', 'user02', '12345678')
#查询操作
r.hget('luotuofeile', 'user01') #返回abcdefg
values = r.hgetall('luotuofeile') #返回键值是luotuofeile的所有数据,key-value组成字典返回:
{'user01': 'abcdefg', 'user02': '12345678'}
注意一点,如果查询的键值不是hash格式的数据,而是string类型的,将会报错:
redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
#修改操作
修改操作和新增操作一样,需要注意:已存在string类型的key时,再次修改hash类型数据会报错不能覆盖修改
redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value
#删除操作
根据指定的key删除
r.hdel('luotuofeile','user01')
删除所有key
r.delete('luotuofeile') #该方法不区分string或者hash类型全都会删除。