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

 

posted @ 2018-01-24 10:36  飞鸟与新月  阅读(709)  评论(0编辑  收藏  举报