首页 > 编程语言 > 详细

测开6 - Python(操作redis)

时间:2019-07-06 21:35:03      阅读:93      评论:0      收藏:0      [点我收藏+]

redis 是一个数据库,数据存在内存,每秒钟支持10w次的读写。

但不同于MySQL,redis 是非关系型数据库。

关于关系型和非关系型数据库,关系型即我们常见的,数据库包含表、字段,通过 sql 查询;而非关系型数据库,没有 sql 语句,没有表,常见的有:redis、mongodb、memcache

1?? 初步认识和简单应用

a. 简单应用

  前面说了,redis 是非关系型数据库,这类数据库的有点是数据读取非常快,它存储的方式是 key=value 。以下为简单应用。

 1 import redis
 2 red = (111.2.1.2,password***)
 3 r = redis.Redis(host = red[0],password=red[1],db=3,decode_responses=True)    #db可以是0-16的任意数值;decode_responses=True这句话加上之后,取出的数值是字符串,原本是bytes
 4 
 5 name = input(name:).strip()
 6 password = input(password:).strip()
 7 r.set(name,name)    #前一个‘name’就是value
 8 r.set(password,password)    #插入
 9 r.delete(name)    #删除
10 
11 print(r.get(name).decode())    #.decode在此处不必加了

  以上也可以用 r.set(name,password) 来存储,这样用户名和密码可以对应起来。

b. 多层路径(文件夹)

1 r.set(aaa_a:lucy:123)
2 r.set(aaa_a:tom:1234455)    #这种情况下会有一个文件夹,多个冒号的话多个文件夹

 

2?? 设置失效时间等方法

a. 设置失效时间:r.set() 中的第三个参数,输入的数字代表秒数,一定秒数之后 key 就会消失

b. 清除当前数据库:r.flushdb()

c. 清除所有数据库:r.flushall()

d. 模糊查询:print(r.keys(‘j*‘)  #相当于sql语句的 like,会输出所有 ‘j’ 开头的 key

e. 检查某个key是否存在:print(r.exists(‘jiaolf‘))  #存在返回1,不存在返回0

 

3?? 关键字的类型

 包含:string、hash、list等,主要写下 hash 类型。总的来说,hash 类型相当于二维的字典。

 1 import redis
 2 r = redis.Redis(host=127.0.0.1,password=sdaf,db=1,decode_responses=True)
 3 r.hset(cnz_user,xiaohei,123456)
 4 r.hset(cnz_user,xiaobai,111111)
 5 r.hdel(cnz_user,xiaohuang)    #删除小key
 6 print(r.hget(cnz_user,xiaobai))
 7 print(r.hgetall(cnz_user))    #获取小字典
 8 d = {xiaohei:123,xixi:12345}
 9 r.hmset(cnz_user,d)    #批量set数据
10 print(r.type(jiaolf))    #获取类型

上面说设置失效时间时,第三个参数是失效时间,因为 hash 类型的有三个参数,所以,针对失效时间,还有一个通用的方法。  r.expire(cnz_user,60) 

这种方法对 string 类型的也同样适用。

 

搞个练习??

redis 迁移,从 a 迁移到 b。(思路:从 a 获取所有的 key,然后通过 key 取到 value,set 到 b,需要通过判断类型来有针对性的使用方法)

 1 import redis,hashlib
 2 red = (118.24.3.40,*******)
 3 a = redis.Redis(host=red[0],password=red[1],db = 3,
 4                 decode_responses=True)   # 取出的数值是字符串,原本是bytes
 5 b = redis.Redis(host=red[0],password=red[1],db = 4,
 6                 decode_responses=True)
 7 
 8 for k in a.keys():
 9     if a.type(k) == string:
10         value = a.get(k)
11         b.set(k,value)
12     elif a.type(k) == hash:
13         d = a.hgetall(k)
14         b.hset(k,d)    
15     else:
16         print(其他类型不支持‘)

? 错的点:① 获取类型的时候,需要用 a.type();② hash 类型的数据,用 .hgetall() 获取到小字典

测开6 - Python(操作redis)

原文:https://www.cnblogs.com/april-aaa/p/11143727.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!