zoukankan      html  css  js  c++  java
  • Python之操作redis数据库

    • 使用redis模块

    一、操作redis

    1、添加信息

    (1)直接建key-value信息:

    • 右键-Add New Key,手动添加key和value

    • 右键-Console,打开控制台,写入命令

    (2)建个文件夹,在文件夹里面建key-value信息:

    只需在Add New Key的Key中建立文件夹名:key即可。

    多个冒号就是多个文件夹。

    2、存储类型

    (1)String类型:

    (2)哈希hash类型:

     二、Python操作redis数据库步骤

    1、导入redis模块

    2、建立连接

    3、写入命令

    import redis
    
    ip='xxx.xx.xx.xx'
    password='123456'
    
    r=redis.Redis(host=ip,password=password,port=6379,db=1)
    
    res=r.get('lrx2')
    print(res)  #结果为:b'xe5x97xafohyeah234324'
    #结果是二进制类型的,需要将二进制类型的转成字符串类型 res.decode() 
    #.decode()是二进制类型转成字符串
    print(res.decode()) #结果为:嗯ohyeah234324
    #字符串转成byte二进制类型
    res.encode()
    #二进制转成字符串类型
    res.decode()

    三、操作命令——string类型

    1、删除数据库里所有的key

    • 使用.flushdb()方法
    r.flushdb()  #删除这个数据库里的所有Key

    2、获取所有的key

    • 使用.keys('key')方法
    print(r.keys('session*')) #获取所有的只以session开头的key

    3、新增和修改

    • 使用.set('key','value')方法
    r.set('lrx','sfdsdf1232')#新增和修改都是它

    4、删除

    使用.delete('key')方法

    r.delete('lrx') #删除指定的key

    5、获取值

    • 使用.get('key')方法
    r.get('lrx') #获取key为lrx的value值

    四、操作命令——哈希(hash)类型

     格式:

    二层字典

    session={
        "nhy":{'sex':'','age':18},
        "nhy2":{'sex':'','age':18},
    }

    优点:

    • 管理方便,易于查找。
    • 返回值直接就是字典,不是字符串。

     1、新增和修改

    • 使用.hset('key')方法
    r.hset('lrx_stus','xiaohong','{"age":23,"addr":"上海"}')
             #大key     小key

    2、获取指定value值

    • 使用.hget('大key','小key')方法
    res=r.hget('lrx_stu','xiaohong') #指定获取里面小key的值

    3、获取所有的小key

    • 使用.hgetall('大key')方法
    res=r.hgetall('lrx_stus') #获取到大key里面所有的数据
    print(res)

    4、删除大key

    • 使用.delete('大key')方法
    r.delete('lrx_stus') #删除大key

    5、删除小key

    • 使用.hdel('大key','小key')方法
    r.hdel('lrx_stus','xiaojun') #删除指定的小key

     6、返回值由二进制类型转为字符串类型

    res=r.hgetall('lrx_stus') #获取到大key里面所有的数据
    print(res) 
    
    new={}
    #1、先循环res
    #2、k和v decode一下,放到new这个字典里面
    for k,v in res.items():
        new[k.decode()]=v.decode()
    print('=====下面是转完之后的')
    print(new)
    
    #结果为:
    #{b'xiaojun': b'{"age":18,"addr":"xe5xa4xa9xe9x80x9axe8x8bx91"}'}
    #<class 'dict'>
    #=====下面是转完之后的
    #{'xiaojun': '{"age":18,"addr":"天通苑"}'}

    在连接数据库时直接加入参数:decode_responses=True,即可直接返回字符串类型数据,就不用再decode了。

     五、设置redis失效时间

    import flask
    server=flask.Flask(__name__)
    def get_redis(): #只返回连接redis的链接
        return redis.Redis(**setting.redis_info)
    
    @server.route('/login',methods=['post','get'])
    def login():
        uname=flask.request.values.get('username')
        pwd=flask.request.values.get('password')
        if uname and pwd:
            sql="select * from lrx_user_table where username='%s' and password='%s';" %(uname,pwd)
            sessionid=tools.my_md5(uname)
            login_time=time.strftime("%Y%m%d%H%M%S")
            u_id=result[0].get('id')
            r=get_redis()
            r.set('lrx_session:%s'%u_id,sessionid,60) #存redis的key、value、失效时间
            res={"error_code":200,"sessionid":sessionid,"login_time":login_time}
        else:
            res={"error_code":3001,"msg":"必填信息不全,请查看接口文档"}
        return json.dumps(res,ensure_ascii=False,indent=4)
    
    @server.route('/pay',methods=['post'])
    def pay():
        uid=flask.request.values.get('userid')
        m = flask.request.values.get('money')
        sessionid = flask.request.values.get('session')
        if uid and m and sessionid:
            r=get_redis()
            result=r.get('lrx_session:%s'%uid)
            if sessionid==result:
                sql="select balance from lrx_account_table where u_id='%s';" %uid
                bal=tools.my_mysqldb(sql)[0].get('balance')
                balance=float(bal)
                res={"error_code":200,"msg":"ok"}
            else:
                res={"error_code":3003,"msg":"session已过期,请重新登录"}
        else:
            res={"error_code":3001,"msg":"必填信息不全,请查看接口文档"}
        return json.dumps(res,ensure_ascii=False)
    
    server.run(**server_info)
            

    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    OracleConnection is obsolete
    ORA-12899: value too large for column (actual: 27, maximum: 20)
    快速删除有外键关联的数据库的数据
    Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c
    RegSvr32注册OCX时报错
    EF:Oracle.DataAccess.Client.OracleException: ORA-12154: TNS:could not resolve the connect identifier specified
    EF:The provider did not return a ProviderManifest instance
    EF:split your EDMX file into multiple diagrams
    读《这就是搜索引擎:核心技术详解》有感总结
    c++ 类成员变量初始化总结
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9798219.html
Copyright © 2011-2022 走看看