一、redis简单介绍:
redis是一个数据库,存在内存里面,每秒钟支持10w此的读写,速度很快,性能好
数据库分为:关系型数据库(sql,里面有表、字段)和非关系型数据库NoSQL(,redis,memcache)
非关系型数据库没有sql,没有表,格式是key-value形式,对参数数据类型不限制
redis里的key不能重复,当程序需要缓存时会考虑放在redis中
二、redis的type
增加redis时,可选择redis的类型,一共有五种类型,常用的为string和hash
1、string类型,为key-value格式,如图:
图中:string对应的为key;
value中为值;
TTL代表失效时间,为-1则永久不会失效,除非redis重启;
Reload Value可刷新加载数据
2、hash类型,为大key-小key-value格式,如图:
hash对应的为大key,下面则为小key 和value值
三、连接redis,及redis的操作
1、string类型的redis及其方法
import redis #db一共有16个数据库0-15 # decode_responses=True 此参数会将二进制转为字符串 r = redis.Redis(host='ip.ip.ip.ip',password='password123',db=3,decode_responses=True) r.set('name','哈哈哈')#向redis里存入数据,若key存在,则会覆盖,若不想覆盖,则不要重复key;传入的需要为字符串 print(r.get('name').decode())#需要加decode(),否则默认获取的是bytes类型的结果;获取数据 r.set('name','xixixi')#修改数据 r.delete('name')#删除某个key r.set('cnz_user:candy','123456',60)#添加文件夹,第三个参数指定失效时间为60秒 r.set('cnz_user:name:candy','123456')#添加二级文件夹 r.flushall()#清除所有数据库里所有的key r.flushdb()#清除当前连接的db库里所有的key print(r.keys())#获取当前数据库中所有的key print(r.keys('xx*'))#以xx开头的key,过滤功能 print(r.exists('hhh'))#判断key是否存在,存在返回1,不存在返回0
举个例子:
1、存username,password密码要存密文
2、要校验用户,如果用户不存在的话,才可以注册
import hashlib def reg(): username = input('username:').strip() password = input('password:').strip() if r.get(username): print('用户已存在') else: m = hashlib.md5(password.encode()) new_password = m.hexdigest() r.set(username,new_password) print('注册成功') reg() def login(): username = input('username:').strip() password = input('password:').strip() p=r.get(username) if p: m = hashlib.md5(password.encode()) new_password = m.hexdigest() # p为bytes类型,需要decode()转一下,在连接redis时加上decode_responses=True即可不需要写decode if p == new_password: print('登录成功') else: print('密码错误') else: print('账号不存在') login()
2、hash类型的redis及其方法
r.hset('cnz_user','xiaohong','123457')#增加数据,大key,小key,value r.hset('cnz_user','xiaohong','35235')#修改数据 r.hdel('cnz_user','xiaolu')#删除里面的小key r.delete('cnz_user')#删除外面的大key print(r.hget('cnz_user','xiaohong'))#获取指定key print(r.hgetall('cnz_user'))#取到hash中key里面所有的key和value r.hmset('cnz_user',{'xiaohai':'123434','xiaohong':'4365365'})#批量往数据库里加数据,批量set进去 print(r.type('cnz_user'))#key类型 r.expire('cnz_user',60)#设置失效时间
举个例子,迁移redis
#把redis a里的数据 ,复制到redis b里 #1、连上两个redis a和b #2、从a redis里获取所有的key #3、从a 里面取到key的value,set到b里面 #4、判断key类型,string类型则set hash类型则hset import redis a = redis.Redis(host='ip.ip.ip.ip',password='password123',db=15,decode_responses=True) b = redis.Redis(host='ip.ip.ip.ip',password='password123',db=2,decode_responses=True) for k in a.keys(): if a.type(k)=='string': value = a.get(k) b.set(k,value) elif a.type(k) == 'hash': all_data=a.hgetall(k) b.hmset(k,all_data) else: print("其他类型不支持")