数据库实例:mysql与redis结合用户登录

来源:互联网 发布:vr医疗软件 编辑:程序博客网 时间:2024/06/11 22:33

加入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