将登录信息存放在redis数据库中,可以极大的提高下次访问的效率。
首先,其核心思想如下:
核心思想,首先在登陆之前在redis数据库中对数据进行查询,看是否存在该条数据,如果不存在的话,就去数据库查找,然后在查找到之后,在正常登录的时候将数据存储到redis中,当然这个存储信息的键值对也就是在redis查询的那个数据,然后下次如果再次执行访问的时候,在redis中就有了此数据,进而提高了访问的效率。细节:存储用户的登录信息,存储在redis中的时候使用的是hash数据结构,【hash数据结构其实就是,对应的键值对的值是一个字典类型。】此时就可以将用户携带的唯一标识作为值的键,将用户的其他某个信息作为该键的值存储起来。
其代码如下:
import redis
from sqlhelper import MySqlHelper
name = input('username:')
pwd = input('password:')
helper = MySqlHelper()
r = redis.Redis(host='10.8.0.0')#这里的主机是你自己的主机ip
# r.hset('logininfo', '123', name)#‘logininfo’ 是哈希结构的键,‘123’是‘logininfo’键的值的键,name就是‘123’的值了
#当然这里边的键都是自定义的,‘123’可以换为用户的唯一标识,如token或者sessionid等等,name 就可放用户的信息,
# 先从redis中取登陆数据
n = r.hget('logininfo', '123')
print(n)
if n:
if n.decode('utf-8') == name:
print('redis 正常登陆')
else:
print('用户不合法')
else:
# 进行登陆用户合法性的判断
helper.connect()
info = helper.query_one('select * from user where username=%s and password=%s', (name, pwd))
if info:
# 合法用户
r.hset('logininfo', '123', name)
print('mysql 正常登陆')
else:
print('用户名或者密码不对')
helper.close()
下边是对应的链接数据库的模块:
import pymysql
class MySqlHelper:
def __init__(self):
self.conn = None
self.curosr = None
def connect(self):
'''获取连接对象'''
self.conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
passwd='root',
db='p1803',
charset='utf8'
)
self.curosr = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
def close(self):
'''关闭连接'''
self.conn.close()
self.curosr.close()
def update(self, sql, param=None):
'''增删改操作'''
try:
self.curosr.execute(sql, param)
self.conn.commit()
except Exception as e:
print(e)
self.conn.rollback()
完成如上操作就实现了将某些数据存储到redis中去了
---------------------
作者:我是大古队长
来源:优快云
原文:https://blog.youkuaiyun.com/qq_42470033/article/details/81530241
版权声明:本文为博主原创文章,转载请附上博文链接!