一、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("其他类型不支持")