首页 > 编程语言 > 详细

python--操作redis

时间:2018-12-24 14:17:29      阅读:33      评论:0      收藏:0      [点我收藏+]

标签:min   hdel   exist   -s   增删改查   函数   sqlite   mysq   关系型   

一、操作redis

redis也是一个数据库
关系型数据库
  mysql、oracle、sql server、db2、sqlite通过sql语句来执行的
  数据存在磁盘上
非关系型数据库
  没有表
  不需要sql语句来查询数据
  查询是get(‘k‘),插入数据set(‘xx‘)
  速度比关系型数据库快
redis的数据全都是存在内存里
  redis本身性能是非常好的,每秒支持30w次的读写

1.1 以下操作都是针对strin类型

 1 import pymysql,json,redis
 2 r = redis.Redis(host=0.0.0.0,password=******,db=8,port=6379)
 3 # 增删改查
 4 r.set(ytt,hello!)#数据库里面新增一个值
 5 #修改也是set
 6 r.delete(天蝎座:ytt)#删除指定key
 7 r.setex(ytt,hello,10)#设置key的失效时间,最后这个参数是秒,10秒钟后session失效,删除掉
 8 ytt= r.get(ytt)
 9 print(ytt)
10 ytt.decode()#把二进制转成字符串
11 print(r.keys())#获取到所有的key
12 print(r.keys(y*))#获取到开头的key
13 print(r.keys(*m*))#获取包含t的key
14 print(r.get(呵呵))#获获取不存在的key时返回None
15 r.set(天蝎座:ytt,呵呵)#key中有冒号,则冒号前面的是文件夹的名字
16 print(r.get(天蝎座:ytt))

循环删除所有key

1 for key in r.keys():#删除所有的key
2     r.delete(key)

1.2 以下所有操作是针对哈希类型

1 r = redis.Redis(host=0.0.0.0,password=密码&*,db=8,port=6379)
2 r.hset(zx_info,ytt,女 18)
3 r.hset(zx_info,yfc,男 16)
4 print(r.type(ytt_info))#查看key是什么类型的
5 print(r.type(ytt))
6 print(r.hget(ytt_info,ytt).decode())#指定大key和小key来获取对应数据,获取其中某一个小key
7 print(r.hgetall(ytt_info))#获取里面所有的key和value,放到一个字典里
8 ytt_info = r.hgetall(zx_info)
1 r.hdel(ytt_info,yfc)#删除指定小key
2 r.delete(ytt_info)#删除整个大key
3 print(r.ttl(ytt_info))#获取失效时间
4 r.expire(ytt_info,100)#对一个key设置失效时间

1.3 将字典里的元素都decode下,变成能看到的文字

1 new_ytt_info = {}#将字典里的key和valuedecode下,变成能看懂的
2 for k,v in ytt_info.items():
3     new_ytt_info[k.decode()] = v.decode()
4 print(new_ytt_info)

1.4 字符串与二进制之间的转换

1 s=呵呵
2 s.encode() #把字符串转成二进制
3 hwt = bsdfsdfsdf
4 hwt.decode()  #把bytes类型即二进制转成字符串

1.5 小练习需求:

pymysql、json、redis
1、连数据库,查到数据库里面所有的数据,游标类型要用pymysql.curosrs.DictCour
2、查到所有数据 [ {"id":1,"passwd":"49487dd4f94008a6110275e48ad09448","username":"niuhayang","is_admin":1}]
3、循环这个list,取到usernamer,把username当做key
4、再把这个小字典转成json,存进去就ok。

 1 import pymysql,json,redis
 2 r = redis.Redis(host=ip,password=密码&*,db=1,port=6379)
 3 conn = pymysql.connect(host=ip,user=用户名,passwd=密码,db=库名,charset=utf8)
 4 cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
 5 cur.execute(select * from my_user;)
 6 all_data = cur.fetchall()
 7 for data in all_data:
 8     k = data.get(username)
 9     r.hset(stu_info_nhy,k,json.dumps(data))
10 cur.close()
11 conn.close()

 下面将操作redis的各种方法封装成一个类

 1 import redis
 2 class MyRedis():
 3     def __init__(self,ip,password,port=6379,db=8):
 4         #构造函数
 5         try:
 6             self.r=redis.Redis(host=ip,port=port,password=password,db=db)
 7         except Exception as e:
 8             print(redis链接失败,错误信息%s%e)
 9     def str_get(self,k):
10         res = self.r.get(k)
11         if res:
12             return res.decode()
13 
14     def str_set(self,k,v,time=None):
15         self.r.set(k,v,time)
16 
17     def str_delete(self,k):
18         tag = self.r.exists(k)#判断k是否存在
19         if tag:
20             self.r.delete(k)
21             print(删除成功)
22         else:
23             print(这个key不存在)
24 
25     def hash_get(self,name,k):
26         res=self.r.hget(name,k)
27         if res:
28             return res.decode()
29 
30     def hash_set(self,name,k,v):
31         self.r.hset(name,k,v)
32 
33     def hash_getall(self,name):
34         data={}
35         res = self.r.hgetall(name)
36         if res:
37             for k,v in res.items():
38                 data[k.decode()]=v.decode()
39         return data
40 
41     def hash_del(self,name,k):
42         res = self.r.hdel(name,k)
43         if res:
44             print(删除成功)
45             return 1
46         else:
47             print(删除失败,该key不存在)
48             return 0
49     @property#属性方法
50     def clean_redis(self):
51         self.r.flushdb()#清空redis
52         print(清空redis成功!)
53         return 0
54 my=MyRedis(118.24.3.40,HK139bc&*)
55 my.clean_redis

 

python--操作redis

标签:min   hdel   exist   -s   增删改查   函数   sqlite   mysq   关系型   

原文:https://www.cnblogs.com/yttbk/p/9020860.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
© 2014 designnerd.net 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号