python学习笔记(十六)python操作redis数据库
Redis是一个key-value存储系统,它支持丰富的数据类型,如:string、list、set、zset(sorted set)、hash。 Redis特点 Redis以内存作为数据存储介质,所以读写数据的效率极高,远远超过数据库。以设置和获取一个256字节字符串为例,它的读取速度可高达110000次/s,写速度高达81000次/s。 Redis跟memcache不同的是,储存在Redis中的数据是持久化的,断电或重启后,数据也不会丢失。因为Redis的存储分为内存存储、磁盘存储和log文件三部分,重启后,Redis可以从磁盘重新将数据加载到内存中,这些可以通过配置文件对其进行配置,正因为这样,Redis才能实现持久化。 Redis支持主从模式,可以配置集群,这样更利于支撑起大型的项目,这也是Redis的一大亮点。
redis的操作
1 import redis 2 #r=redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连接redis 3 4 r=redis.Redis(host='localhost',port=6379,db=2)#连接本地redis数据库 5 r.set('hqg_session','2018012116') 6 print(r.get('hqg_session'))#b'2018012116' 7 print(r.get('hqg_session').decode())#2018012116 redis里面取出来的数据都是bytes类型的,所以要用decode方法转成字符串 8 9 r.set('qaz','qwe') 10 r.set('wsx','哈哈哈') 11 r.delete('qaz')#删除 12 print(r.get('qaz'))#None 13 14 r.setex('edc','hahahh','20')#可以指定key的失效时间,单位是秒
hash类型:
1 r.hset('230_session','qew','123')#hash类型插入数据 2 r.hset('230_session','asd','1234') 3 r.hset('230_session','zxc','12345')
上三行代码的结果为:
1 r.hset('230_session','qew','123')#hash类型插入数据 2 r.hset('230_session','asd','1234') 3 r.hset('230_session','zxc','12345') 4 print(r.hget('230_session','qew'))#b'123' 5 print(r.hget('230_session','qew').decode())#123 6 print(r.hgetall('230_session'))#{b'zxc': b'12345', b'qew': b'123', b'asd': b'1234'} 7 8 9 10 redis_data=r.hgetall('230_session') 11 all_data={} 12 for k,v in redis_data.items(): 13 k=k.decode() 14 v=v.decode() 15 all_data[k]=v 16 print(redis_data)#{b'qew': b'123', b'zxc': b'12345', b'asd': b'1234'} 17 print(all_data)#{'qew': '123', 'zxc': '12345', 'asd': '1234'}
#hash类型没有过期时间
# r.set('try:homework:er','白')
# r.set('try:homework:ty','黑')
# print(r.keys())#获取所有的key [b'wsx', b'230_session', b'hqg_session']
# print(r.keys('txz*'))#以txz开头的key
# print(r.type('txz:xj'))#获取key的类型
# print(r.type('sessions'))
将redis连接封装成函数
1 def op_redis(host,passwd,k,v,port=6379,db=0): 2 r=redis.Redis(host=host,passwd=passwd,port=port,db=db) 3 if v: 4 r.set(k,v) 5 res='ok' 6 else: 7 res=r.get(k) 8 if res:#这里是判断有没有get到数据 9 res.decode() 10 else: 11 res=None 12 return res
redis数据迁移小程序:
1 import redis 2 3 src_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=2)#连上redis 4 target_redis = redis.Redis(host='211.149.218.16',port=6379,password='123456',db=14)#连上redis 5 for key in src_redis.keys(): 6 if src_redis.type(key) == b'string': #判断key的类型,因为redis数据取出来都是二进制的,所以这里也用bytes 7 v = src_redis.get(key) #先获取到原来的数据 8 target_redis.set(key,v) #再set到新的里面 9 else: 10 all_hash_data = src_redis.hgetall(key) #先获取到hash类型里面所有的数据 11 for k,v in all_hash_data.items(): #因为hash类型的获取到之后是一个字典,所以这里循环字典 12 target_redis.hset(key,k,v) #key是外面的大key,k是里面的小k,v就是小k对应的value