数据库实例: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
總結
以上是生活随笔為你收集整理的数据库实例:mysql与redis结合用户登录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用nginx建立windows软连,实
- 下一篇: MYSQL账户管理及主要操作