Redis实现session共享和异步转同步方法与流程

文档序号:23143838发布日期:2020-12-01 13:23阅读:244来源:国知局
Redis实现session共享和异步转同步方法与流程

本发明涉及计算机技术领域,具体涉及redis实现session共享和异步转同步方法。



背景技术:

随着互联网技术的飞速发展,智能设备的迅速普及,人们进行网络访问的需求日益增大。比如双十一抢购时期,比如当下covid-19导致口罩一罩难求,由于大量用户的集中访问给服务器造成极大的负担,导致众多用户极难访问。负载均衡将众多的访问量分摊到其他服务器上,极大地降低了服务器的负载,实现了对客户端请求的快速响应。但是这样也存在一个问题,每个服务器都有自己的session,用户的每次请求无法保证使用同一个服务器,如果不能实现session共享将是极为糟糕的体验。本发明基于redis实现了session的共享,解决了负载均衡中同一个域名不同服务器对应不同session的问题。

对于一个提供http接口服务的程序,在收到http接口请求时,内部会异步请求第三方,第三方通过http回调把结果返回,但是该接口需要同步返回结果。我们使用一个key来标记同一个请求和返回。该key可以从第三方回调的参数中生成,但是却不能从该服务接口的参数中生成,需要该服务再去做一些数据库查询操作。所以如果用nginx等来做负载均衡,并不能比较简单把第三方回调的请求和该服务的接口请求分发到同一个后台服务接口上。本发明基于redis负载均衡实现了异步转同步的方法。



技术实现要素:

针对现有技术存在的不足,本发明目的是提供redis实现session共享和异步转同步方法。本发明能够实现多重的登录保护操作,保护了用户登录安全;防止数据被盗;本发明基于redis实现了session的共享,解决了负载均衡中同一个域名不同服务器对应不同session的问题,同时基于redis负载均衡实现了异步转同步的方法。

本发明的目的可以通过以下技术方案实现:redis实现session共享和异步转同步方法,包括如下步骤:

步骤一:用户终端a第一次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器一;

步骤二:服务器一接收用户终端a发送的访问系统的请求;所述服务器一验证用户终端a是否可信,若不可信,则不再进行后续的步骤,退出验证过程,并反馈用户终端a的可信验证失败指令,判定所述用户终端a属于黑名单客户;若可信,则继续下述步骤;

步骤三:服务器一根据所述请求向用户终端a提供系统的登录界面;

服务器一接收用户终端a通过登录界面发送的登录信息,所述登录信息包括用户名和密码;所述服务器一将所述用户名和密码与相应用户注册时的用户名和密码进行匹配;包括:

s11:用户的登录采用单点登录方式,用户输入用户名和密码后,传输过程中采用rsa公钥对用户名、密码进行加密,向服务器一发送登录请求;

s12:服务器一接收到登录请求,采用rsa私钥对用户名、密码进行解密,再采用sha256算法,同时采用随机数加“盐”策略存放于数据库中;

s13:验证用户名、密码;

若用户名和密码匹配成功,则执行步骤四;

若匹配不成功,则判断当前用户连续错误次数是否超过预设次数,若超过,则锁定当前用户,并提示当前用户已锁定,需要管理员解锁;

如果当前用户连续错误次数没有超过预设次数,则判断当前ip连续错误是否超过预设次数;若超过,则锁定当前ip,提示当前用户已锁定,需要管理员解锁,

如果当前ip连续错误次数没有超过预设次数,则提示用户名、密码错误,返回步骤s11中重新输入用户名和密码;

步骤四:服务器一向用户终端a提供以采集用户脸部图像的采集界面;

服务器一接收用户终端a通过采集界面发送的用户脸部图像并将用户终端a发送的用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别,若识别成功,则允许用户终端a访问系统;

步骤五:将服务器一产生的session放入redis中,此时用户终端a、服务器一和redis都有一个相同的session;

步骤六:用户终端a再次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器二(已知此时服务器二中无session);重复步骤二至步骤四的验证过程;

步骤七:服务器二获取用户终端a携带的session并将用户终端a携带的session与redis中的session进行匹配;若匹配成功;则继续执行其他流程;若匹配不成功,则判定用户终端a携带的session是伪造session,拒绝用户终端a访问;

步骤八:当用户终端a发送退出指令时,服务器二检查redis中的session是否合法,若合法,则在redis中删除此session,同时检查服务器二中是否保存有此session,若有保存,则删除服务器二中的session。

进一步地,还包括:

ss1:用redis做消息队列和缓存,每个服务程序监听不同的topic;

ss2:服务程序收到请求时,将key缓存到redis中,该key对应的value即为所述服务程序的topic;

ss3:所述服务程序收到回调消息时,首先检查key是不是所述服务程序处理的,若是,则清除redis缓存,并自行处理后续流程,同步响应原始请求;

若不是,则通过key在redis中查询该key到对应的topic,并把回调消息发到该topic;若查不到该key到对应的topic,则打印日志丢弃;

所述服务程序收到redis消息,清除redis缓存,并处理消息响应原始请求;

ss4:设置缓存时间阈值,当缓存时间大于缓存时间阈值,服务程序清除redis缓存。

进一步地,步骤四中服务器一将用户终端a发送的用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别之前,还包括:

s21:服务器一提取所述用户脸部图像的特征信息,根据所述特征信息计算所述用户脸部图像的清晰度;所述特征信息包括用户脸部图像中眼睛区域占整张图像的比例和用户脸部图像的边缘锐度;

s211:将用户脸部图像标记为x,将用户脸部图像x中眼睛区域占整张图像的比例标记为rx,将用户脸部图像x的边缘锐度标记为wx;

s212:利用公式qx=f(rx-α)+g(wx-β)计算得到用户脸部图像x的清晰度qx;其中,α为预设的比例下限;f(rx-α)为第一判断取值函数,当rx-α≥0时,f(rx-α)=1,当rx-α<0时,f(rx-α)=0;β为预设的边缘锐度阈值,g(wx-β)为第二判断取值函数,当wx-β≥0时,g(wx-β)=1,当wx-β<0时,g(wx-β)=0;

s22:若清晰度qx小于预设的清晰度阈值,服务器一向用户终端a发送用于提示用户重新采集图像的信息;

若清晰度qx大于等于预设的清晰度阈值,则将用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别;

所述预设的清晰度阈值的取值为2。

进一步地,步骤二中服务器一验证用户终端a是否可信,具体步骤如下:

s31:用户终端a向服务器一发送用户终端a的身份验证信息,所述身份验证信息包括用户终端a的身份信息im和验证次数t1,其中,验证次数t1表示用户终端a被验证的次数,其初始化值为0;所述用户终端a的身份信息im为移动手机的国际移动设备身份码imei值;

s32:服务器一验证用户终端a的身份信息im是否属于黑名单数据库,如果属于,则不再进行后续的步骤,退出验证过程,并反馈用户终端a的可信验证失败指令;判定用户终端a属于黑名单客户;如果不属于则继续下述步骤;

s33:服务器一在与其关联的历史验证日志中查询与用户终端a的身份信息im关联的验证次数t2;

s331:如果历史验证日志中不存在用户终端a的身份信息im,则在历史验证日志中创建新的条目记录用户终端a的身份信息im和与其关联的验证次数t2;t2的初始化值为0,并不再进行后续的步骤,退出所述验证过程,并反馈所述客户端的可信验证失败、判定所述客户端属于新客户;

s332:如果t1与t2相同,则将t1和t2的值分别加1,分别更新用户终端a和历史验证日志中的对应信息;接着判断用户终端a的身份信息im是否属于白名单数据库,如果属于,则反馈用户终端a的可信验证成功,判定用户终端a属于可信客户;

如果不属于,则反馈用户终端a的可信验证失败,判定所述客户端属于待验证客户;服务器一向服务器管理者发送所述用户终端a的身份验证信息,由所述管理者进一步确定验证结果,如果验证为可信客户,则在白名单数据库中增加用户终端a的身份信息im,如果验证为不可信客户,则在黑名单数据库中增加用户终端a的身份信息im;

s333:如果t1与t2不相同,则在黑名单数据库中增加用户终端a的身份信息im,并反馈用户终端a的可信验证失败,判定用户终端a属于黑名单用户。

本发明的有益效果是:

(1)本发明中用户终端a第一次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器一;服务器一接收用户终端a发送的访问系统的请求;首先验证用户终端a是否可信;若可信,服务器一向用户终端a提供系统的登录界面,用户输入用户名和密码,服务器一将所述用户名和密码与相应用户注册时的用户名和密码进行匹配;若匹配成功,服务器一向用户终端a提供以采集用户脸部图像的采集界面;服务器一接收用户终端a通过采集界面发送的用户脸部图像并将用户终端a发送的用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别,若识别成功,则允许用户终端a访问系统;本发明能够实现多重的登录保护操作,保护了用户登录安全;防止数据被盗。

(2)本发明将服务器一产生的session放入redis中,此时用户终端a、服务器一和redis都有一个相同的session;当用户终端a再次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器二(已知此时服务器二中无session);服务器二获取用户终端a携带的session并将用户终端a携带的session与redis中的session进行匹配;若匹配成功;则继续执行其他流程;若匹配不成功,则判定用户终端a携带的session是伪造session,拒绝用户终端a访问;当用户终端a发送退出指令时,服务器二检查redis中的session是否合法,若合法,则在redis中删除此session,同时检查服务器二中是否保存有此session,若有保存,则删除服务器二中的session;本发明基于redis实现了session的共享,解决了负载均衡中同一个域名不同服务器对应不同session的问题。

(3)本发明用redis做消息队列和缓存,每个服务程序监听不同的topic;服务程序收到请求时,将key缓存到redis中,该key对应的value即为所述服务程序的topic;所述服务程序收到回调消息时,首先检查key是不是所述服务程序处理的,若是,则清除redis缓存,并自行处理后续流程,同步响应原始请求;若不是,则通过key在redis中查询该key到对应的topic,并把回调消息发到该topic;若查不到该key到对应的topic,则打印日志丢弃;所述服务程序收到redis消息,清除redis缓存,并处理消息响应原始请求;设置缓存超时时间,当防止缓存时间超时,服务程序清除redis缓存,防止服务程序异常导致添加的key不会被清除;本发明基于redis负载均衡实现了异步转同步的方法。

附图说明

为了便于本领域技术人员理解,下面结合附图对本发明作进一步的说明。

图1为本发明的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

如图1所示,redis实现session共享和异步转同步方法,包括如下步骤:

步骤一:用户终端a第一次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器一;

步骤二:服务器一接收用户终端a发送的访问系统的请求;所述服务器一验证用户终端a是否可信,若不可信,则不再进行后续的步骤,退出验证过程,并反馈用户终端a的可信验证失败,判定所述用户终端a属于黑名单客户;若可信,则继续下述步骤;

步骤三:服务器一根据所述请求向用户终端a提供系统的登录界面;

服务器一接收用户终端a通过登录界面发送的登录信息,所述登录信息包括用户名和密码;所述服务器一将所述用户名和密码与相应用户注册时的用户名和密码进行匹配;包括:

s11:用户的登录采用单点登录方式,用户输入用户名和密码后,传输过程中采用rsa公钥对用户名、密码进行加密,向服务器一发送登录请求;

s12:服务器一接收到登录请求,采用rsa私钥对用户名、密码进行解密,再采用sha256算法,同时采用随机数加“盐”策略存放于数据库中;

s13:验证用户名、密码;

若用户名和密码匹配成功,则执行步骤四;

若匹配不成功,则判断当前用户连续错误次数是否超过预设次数,若超过,则锁定当前用户,并提示当前用户已锁定,需要管理员解锁;

如果当前用户连续错误次数没有超过预设次数,则判断当前ip连续错误是否超过预设次数;若超过,则锁定当前ip,提示当前用户已锁定,需要管理员解锁,

如果当前ip连续错误次数没有超过预设次数,则提示用户名、密码错误,返回步骤s11中重新输入用户名和密码;

步骤四:服务器一向用户终端a提供以采集用户脸部图像的采集界面;

服务器一接收用户终端a通过采集界面发送的用户脸部图像并将用户终端a发送的用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别,若识别成功,则允许用户终端a访问系统;

步骤五:将服务器一产生的session放入redis中,此时用户终端a、服务器一和redis都有一个相同的session;

步骤六:用户终端a再次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器二(已知此时服务器二中无session);重复步骤二至步骤四的验证过程;

步骤七:服务器二获取用户终端a携带的session并将用户终端a携带的session与redis中的session进行匹配;若匹配成功;则继续执行其他流程;若匹配不成功,则判定用户终端a携带的session是伪造session,拒绝用户终端a访问;

步骤八:当用户终端a发送退出指令时,服务器二检查redis中的session是否合法,若合法,则在redis中删除此session,同时检查服务器二中是否保存有此session,若有保存,则删除服务器二中的session;

还包括:

ss1:用redis做消息队列和缓存,每个服务程序监听不同的topic;

ss2:服务程序收到请求时,将key缓存到redis中,该key对应的value即为所述服务程序的topic;

ss3:所述服务程序收到回调消息时,首先检查key是不是所述服务程序处理的,若是,则清除redis缓存,并自行处理后续流程,同步响应原始请求;

若不是,则通过key在redis中查询该key到对应的topic,并把回调消息发到该topic;若查不到该key到对应的topic,则打印日志丢弃;

所述服务程序收到redis消息,清除redis缓存,并处理消息响应原始请求;

ss4:设置缓存时间阈值,当缓存时间大于缓存时间阈值,服务程序清除redis缓存,防止服务程序异常导致添加的key不会被清除。

步骤四中服务器一将用户终端a发送的用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别之前,还包括:

s21:服务器一提取所述用户脸部图像的特征信息,根据所述特征信息计算所述用户脸部图像的清晰度;所述特征信息包括用户脸部图像中眼睛区域占整张图像的比例和用户脸部图像的边缘锐度;

s211:将用户脸部图像标记为x,将用户脸部图像x中眼睛区域占整张图像的比例标记为rx,将用户脸部图像x的边缘锐度标记为wx;

s212:利用公式qx=f(rx-α)+g(wx-β)计算得到用户脸部图像x的清晰度qx;其中,α为预设的比例下限;f(rx-α)为第一判断取值函数,当rx-α≥0时,f(rx-α)=1,当rx-α<0时,f(rx-α)=0;β为预设的边缘锐度阈值,g(wx-β)为第二判断取值函数,当wx-β≥0时,g(wx-β)=1,当wx-β<0时,g(wx-β)=0;

s22:若清晰度qx小于预设的清晰度阈值,服务器一向用户终端a发送用于提示用户重新采集图像的信息;

若清晰度qx大于等于预设的清晰度阈值,则将用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别;

本实施例通过对用户终端a采集的用户脸部图像进行清晰度判定,选取符合清晰度条件的用户脸部图像作为待匹配识别的脸部图像,避免清晰度差或者不符合比例的图像影响后续脸部图像的识别效率,为后续脸部图像的快速识别奠定了基础;其中设计了清晰度的计算公式,为实现用户脸部图像的优质检测提供了衡量方式,有利于实现用户脸部图像质量的快速检测;

所述预设的清晰度阈值的取值为2;

步骤二中服务器一验证用户终端a是否可信,具体步骤如下:

s31:用户终端a向服务器一发送用户终端a的身份验证信息,所述身份验证信息包括用户终端a的身份信息im和验证次数t1,其中,验证次数t1表示用户终端a被验证的次数,其初始化值为0;所述用户终端a的身份信息im为移动手机的国际移动设备身份码imei值;

s32:服务器一验证用户终端a的身份信息im是否属于黑名单数据库,如果属于,则不再进行后续的步骤,退出验证过程,并反馈用户终端a的可信验证失败;判定用户终端a属于黑名单客户;如果不属于则继续下述步骤;

s33:服务器一在与其关联的历史验证日志中查询与用户终端a的身份信息im关联的验证次数t2;

s331:如果历史验证日志中不存在用户终端a的身份信息im,则在历史验证日志中创建新的条目记录用户终端a的身份信息im和与其关联的验证次数t2;t2的初始化值为0,并不再进行后续的步骤,退出所述验证过程,并反馈所述客户端的可信验证失败、判定所述客户端属于新客户;

s332:如果t1与t2相同,则将t1和t2的值分别加1,分别更新用户终端a和历史验证日志中的对应信息;接着判断用户终端a的身份信息im是否属于白名单数据库,如果属于,则反馈用户终端a的可信验证成功,判定用户终端a属于可信客户;

如果不属于,则反馈用户终端a的可信验证失败,判定所述客户端属于待验证客户;服务器一向服务器管理者发送所述用户终端a的身份验证信息,由所述管理者进一步确定验证结果,如果验证为可信客户,则在白名单数据库中增加用户终端a的身份信息im,如果验证为不可信客户,则在黑名单数据库中增加用户终端a的身份信息im;

s333:如果t1与t2不相同,则在黑名单数据库中增加用户终端a的身份信息im,并反馈用户终端a的可信验证失败,判定用户终端a属于黑名单用户。

本发明能够实现多重的登录保护操作,保护了用户登录安全;防止数据被盗;基于redis实现了session的共享,解决了负载均衡中同一个域名不同服务器对应不同session的问题,给用户带来更好的体验;同时基于redis负载均衡实现了异步转同步的方法。

redis实现session共享和异步转同步方法,在工作时,首先用户终端a第一次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器一,服务器一接收用户终端a发送的访问系统的请求;所述服务器一验证用户终端a是否可信,若不可信,则不再进行后续的步骤,退出验证过程,并反馈用户终端a的可信验证失败,判定所述用户终端a属于黑名单客户;

若可信,服务器一根据所述请求向用户终端a提供系统的登录界面;服务器一接收用户终端a通过登录界面发送的登录信息,所述登录信息包括用户名和密码;所述服务器一将所述用户名和密码与相应用户注册时的用户名和密码进行匹配;若用户名和密码匹配成功,服务器一向用户终端a提供以采集用户脸部图像的采集界面;服务器一接收用户终端a通过采集界面发送的用户脸部图像并提取所述用户脸部图像的特征信息,根据所述特征信息计算所述用户脸部图像的清晰度;若清晰度qx小于预设的清晰度阈值,服务器一向用户终端a发送用于提示用户重新采集图像的信息;若清晰度qx大于等于预设的清晰度阈值,则将用户脸部图像与云存储中的相应的标准用户脸部图像进行匹配识别;若识别成功,则允许用户终端a访问系统;

将服务器一产生的session放入redis中,此时用户终端a、服务器一和redis都有一个相同的session;用户终端a再次发送访问系统的请求,lvs(负载均衡)调度节点将请求分发给服务器二(已知此时服务器二中无session);服务器二获取用户终端a携带的session并将用户终端a携带的session与redis中的session进行匹配;若匹配成功;则继续执行其他流程;若匹配不成功,则判定用户终端a携带的session是伪造session,拒绝用户终端a访问;当用户终端a发送退出指令时,服务器二检查redis中的session是否合法,若合法,则在redis中删除此session,同时检查服务器二中是否保存有此session,若有保存,则删除服务器二中的session;基于redis实现了session的共享,解决了负载均衡中同一个域名不同服务器对应不同session的问题;

用redis做消息队列和缓存,每个服务程序监听不同的topic;服务程序收到请求时,将key缓存到redis中,该key对应的value即为所述服务程序的topic;所述服务程序收到回调消息时,首先检查key是不是所述服务程序处理的,若是,则清除redis缓存,并自行处理后续流程,同步响应原始请求;若不是,则通过key在redis中查询该key到对应的topic,并把回调消息发到该topic;若查不到该key到对应的topic,则打印日志丢弃;所述服务程序收到redis消息,清除redis缓存,并处理消息响应原始请求;设置缓存超时时间,当防止缓存时间超时,服务程序清除redis缓存,防止服务程序异常导致添加的key不会被清除;本发明基于redis负载均衡实现了异步转同步的方法。

上述公式均是由采集大量数据进行软件模拟及相应专家进行参数设置处理,得到与真实结果符合的公式。

以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1