1. 程式人生 > >資料庫例項:mysql與redis結合使用者登入

資料庫例項:mysql與redis結合使用者登入

加入redis後登入邏輯如下圖,將圖中nosql的位置換為redis即可


  • 使用者資料存的鍵為使用者名稱,值為密碼
  • 將原來MySQL操作的程式碼封裝到一個方法中,程式碼如下

defmysql_login():
    #redis
中沒有則到mysql中查詢
    sql=
'select upwd from py_users whereuname=%s'
    params=[uname]
   
try:
        conn= connect(host=
'localhost',port=3306,database='python',user='root',password='mysql'

,charset='utf8')
        cur=conn.cursor()
       cur.execute(sql,params)
        result=cur.fetchone()
        cur.close()
       
if result==None:
           
print'使用者名稱錯誤,登入失敗,資料來源於mysql'else:
           
#當查詢到使用者及對應的密碼時,將資料加入到redis中,以供後續登入使用
           r.set(uname,upwd_sha1)
           
#判斷密碼是否正確
if result[0]==upwd_sha1:
               
print'登入成功,資料來源於mysql'else:
               
print'密碼錯誤,登入失敗,資料來源於mysql'except Exception,e:
       
print'登入失敗,錯誤原因:%s' % e
   
finally:
        conn.close()

  • 建立user_redis.py檔案,程式碼如下

#coding=utf-8
from MySQLdb import*
from hashlib importsha1
from redis import*

if __name__==

'__main__':
   
try:
       
#接收輸入使用者名稱、密碼
        uname=raw_input(
'請輸入使用者名稱:')
        upwd=raw_input(
'請輸入密碼:')

#對密碼加密
        s1=sha1()
        s1.update(upwd)
        upwd_sha1=s1.hexdigest()

#根據使用者名稱查詢密碼
        #
先到redis上查,沒有再到mysql上查
        r=StrictRedis()
        result=r.get(uname)
       
if result==None:
          
 mysql_login()else:
           
#redis中找到了這個使用者名稱的資料if result==upwd_sha1:
               
print'登入成功,資料來源於redis'else:
               
print'密碼錯誤,登入失敗,資料來源於redis'exceptException,e:
       
print'登入失敗,錯誤原因:%s'%e