yiruliu
  • 使用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\'\xe5\x97\xafohyeah234324\'
#结果是二进制类型的,需要将二进制类型的转成字符串类型 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":"\xe5\xa4\xa9\xe9\x80\x9a\xe8\x8b\x91"}\'}
#<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)
        

 

分类:

技术点:

相关文章: