数据库实例:mysql与redis结合用户登录
加入redis后登錄邏輯如下圖,將圖中nosql的位置換為redis即可
?
- 用戶數(shù)據(jù)存的鍵為用戶名,值為密碼
- 將原來MySQL操作的代碼封裝到一個(gè)方法中,代碼如下
?
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 '用戶名錯(cuò)誤,登錄失敗,數(shù)據(jù)來源于mysql'
??????? else:
??????????? #當(dāng)查詢到用戶及對(duì)應(yīng)的密碼時(shí),將數(shù)據(jù)加入到redis中,以供后續(xù)登錄使用
???????????r.set(uname,upwd_sha1)
??????????? #判斷密碼是否正確
??????????? if result[0]==upwd_sha1:
??????????????? print '登錄成功,數(shù)據(jù)來源于mysql'
??????????? else:
??????????????? print '密碼錯(cuò)誤,登錄失敗,數(shù)據(jù)來源于mysql'
??? except Exception,e:
??????? print '登錄失敗,錯(cuò)誤原因:%s' % e
??? finally:
??????? conn.close()
- 創(chuàng)建user_redis.py文件,代碼如下
#coding=utf-8
from MySQLdb import*
from hashlib importsha1
from redis import*
if __name__=='__main__':
??? try:
??????? #接收輸入用戶名、密碼
??????? uname=raw_input('請(qǐng)輸入用戶名:')
??????? upwd=raw_input('請(qǐng)輸入密碼:')
#對(duì)密碼加密
??????? s1=sha1()
??????? s1.update(upwd)
??????? upwd_sha1=s1.hexdigest()
#根據(jù)用戶名查詢密碼
??????? #先到redis上查,沒有再到mysql上查
??????? r=StrictRedis()
??????? result=r.get(uname)
??????? if result==None:
?????????? ?mysql_login()
??????? else:
??????????? #redis中找到了這個(gè)用戶名的數(shù)據(jù)
??????????? if result==upwd_sha1:
??????????????? print '登錄成功,數(shù)據(jù)來源于redis'
??????????? else:
??????????????? print '密碼錯(cuò)誤,登錄失敗,數(shù)據(jù)來源于redis'
??? exceptException,e:
??????? print '登錄失敗,錯(cuò)誤原因:%s'%e
總結(jié)
以上是生活随笔為你收集整理的数据库实例:mysql与redis结合用户登录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 利用nginx建立windows软连,实
- 下一篇: Python程序员的圣经——《Pytho