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'\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)
        

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM