zoukankan      html  css  js  c++  java
  • Python 连接redis day6

    一、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("其他类型不支持")
    
    
  • 相关阅读:
    Python学习笔记--8.3 函数--返回值
    Python学习笔记--8.2 函数--默认值参数
    Python学习笔记--9 非空即真,非零即真
    [Robot Framework] 支持python 3 的 robot framework 安装
    Mysql DB 无法创建 function,报错:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL
    vue项目中console.log报错 No Console
    git命令合并分支代码
    远程桌面连接时如何使用本地扬声器和麦克风
    [Grafana] 如何把不同series的点用线连接起来
    POM 文件参考
  • 原文地址:https://www.cnblogs.com/candysalty/p/11144031.html
Copyright © 2011-2022 走看看