資料庫例項: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'
cur=conn.cursor()
cur.execute(sql,params)
result=cur.fetchone()
cur.close()
if result==None:
print'使用者名稱錯誤,登入失敗,資料來源於mysql'else:
#當查詢到使用者及對應的密碼時,將資料加入到redis中,以供後續登入使用
r.set(uname,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__==
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