测开6 - Python(操作redis)

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() 获取到小字典

转载于:https://www.cnblogs.com/april-aaa/p/11143727.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值