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)
            

    每天进步一点点,快乐生活多一点。
  • 相关阅读:
    LeetCode 189. Rotate Array
    LeetCode 965. Univalued Binary Tree
    LeetCode 111. Minimum Depth of Binary Tree
    LeetCode 104. Maximum Depth of Binary Tree
    Windows下MySQL的安装与配置
    LeetCode 58. Length of Last Word
    LeetCode 41. First Missing Positive
    LeetCode 283. Move Zeroes
    《蚂蚁金服11.11:支付宝和蚂蚁花呗的技术架构及实践》读后感
    删除docker下的镜像
  • 原文地址:https://www.cnblogs.com/yiruliu/p/9798219.html
Copyright © 2011-2022 走看看