分布式会话处理方法、装置及系统与流程

文档序号:21406714发布日期:2020-07-07 14:40阅读:151来源:国知局
分布式会话处理方法、装置及系统与流程

【技术领域】

本发明涉及云计算技术领域,尤其涉及一种分布式会话处理方法、装置及系统。



背景技术:

现有的分布式会话系统中,当请求通过负载均衡的方式分布到集群中的某个服务器,容易导致同一个用户的多次请求被分发到集群的不同服务器上,从而出现取不到session数据的情况,目前常常采用session同步方案来解决上述问题。出于业务需要,需要对session进行记录管理,当session过期后就无法获取session数据。



技术实现要素:

有鉴于此,本发明实施例提供了分布式会话处理方法、装置及系统,用以解决现有技术中session过期后无法获取session数据的问题。

为了实现上述目的,根据本发明的一个方面,提供了一种分布式会话处理方法,所述方法包括:

获取用户终端发送的会话请求,所述会话请求携带所述用户终端的身份标识;根据所述用户终端的身份标识生成锁键,并获取与所述锁键对应的分布式锁;根据所述身份标识生成session键,并利用所述session键检测预设的数据库中是否存在与所述session键相对应的session数据;如不存在,创建与所述会话请求相对应的当前会话;当完成所述当前会话时,根据所述身份标识生成session时效键,将所述当前会话产生的session数据及所述session时效键备份至所述预设的数据库,其中,所述session时效键用于定义所述会话的有效期,所述session键的有效期大于所述session时效键的有效期。

可选地,在所述根据所述身份标识生成session键,并利用所述session键检测预设的数据库中是否存在与所述session键相对应的session数据之后,所述方法还包括:如存在,从所述预设的数据库中获取所述用户终端的在先会话的session数据及与所述session数据关联存储的所述用户终端的session时效键;根据所述用户终端的session时效键确定所述用户终端的session数据是否为有效数据;如果是,读取所述用户终端的session数据并运用于所述当前会话中。

可选地,在所述读取所述用户终端的session数据并运用于所述当前会话中之后,所述方法还包括:获取所述数据库中存储的所述用户终端的在先会话的session数据及session时效键;比较所述当前会话的session数据与所述在先会话的session数据是否一致;若不一致,则将所述当前会话的session数据与所述在先会话的session数据合并;将合并后的session数据备份至所述数据库中,并将所述在先会话的session时效键更新为当前会话的session时效键。

可选地,所述根据所述在先会话的session时效键确定所述用户终端的session数据是否为有效数据,包括:获取当前时间;确定所述当前时间是否在所述用户终端的session时效键中定义的有效期内;当所述当前时间超过所述有效期,则所述用户终端的session数据是无效数据;当所述当前时间未超过所述有效期,则所述用户终端的session数据为有效数据。

可选地,在所述当完成所述当前会话时,根据所述身份标识生成session时效键,将所述当前会话产生的session数据及所述session时效键备份至所述预设的数据库之后,所述方法还包括:监听并过滤出所述预设的数据库中的关于session时效键的过期事件;根据预设的映射关系得到过期的session时效键对应的用户终端的身份标识及会话的有效期;根据所述用户终端的身份标识生成所述锁键,并获取与所述锁键对应的分布式锁;根据所述用户终端的身份标识得到所述session键,利用所述session键读取所述预设的数据库中存储的session数据;将所述session键的结束时间及所述session数据记录在所述预设的数据库中,并将所述session键删除。

可选地,在所述根据所述用户终端的身份标识生成锁键,并获取与所述锁键对应的分布式锁之后,所述方法还包括:

利用获取的分布式锁进行互斥操作;在每次互斥操作之前,判断所述分布式锁是否已过期;若已过期则放弃互斥操作并进行相应的丢锁处理;若未过期则进行当次互斥操作,直至抢锁成功,并通过预设的接口向所述用户终端反馈抢锁成功信息。

可选地,所述当完成所述当前会话时,根据所述身份标识生成session时效键,将所述当前会话产生的session数据及所述session时效键备份至所述预设的数据库,包括:根据所述当前会话的创建时的时间戳及所述用户的身份标识生成会话标识,并将所述会话标识存储至所述当前会话产生的session数据中;根据所述用户的身份标识生成session时效键;将所述当前会话产生的session数据及所述session时效键备份至预设的数据库。

为了实现上述目的,根据本发明的一个方面,提供了一种分布式会话处理装置,所述装置包括:

第一获取单元,用于获取用户终端发送的会话请求,所述会话请求携带所述用户终端的身份标识;

第一生成单元,用于根据所述用户终端的身份标识生成锁键,并获取与所述锁键对应的分布式锁;

第二生成单元,用于根据所述身份标识生成session键,并利用所述session键检测预设的数据库中是否存在与所述session键相对应的session数据;

创建单元,用于如不存在,创建与所述会话请求相对应的当前会话;

处理单元,用于当完成所述当前会话时,根据所述身份标识生成session时效键,将所述当前会话产生的session数据及所述session时效键备份至所述预设的数据库,其中,所述session时效键用于定义所述会话的有效期,所述session键的有效期大于所述session时效键的有效期。

为了实现上述目的,根据本发明的一个方面,提供了一种分布式会话处理系统,包括一个或多个会话服务器及分布式数据库,所述会话服务器包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述的分布式会话处理方法的步骤。

为了实现上述目的,根据本发明的一个方面,提供了一种计算机非易失性存储介质,所述存储介质包括存储的程序,在所述程序运行时控制所述存储介质所在设备执行上述分布式会话处理方法。

在本方案中,基于分布式session管理体系建立的,分布式数据库(redis数据库)提供session数据的读取和存储服务,当用户通过用户终端访问服务器时,服务器根据用户的身份标识(即用户id)生成锁键(lock:userid),由于用户的身份标识是唯一的,从而利用锁键获取分布式锁,分布式锁是为了防止并发时重复创建用户id相同的会话导致覆盖,并且引入session键和session时效键,将session键的有效期设置的比session时效键长,来保证session时效键超时时还能获取对应的session数据。

【附图说明】

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。

图1是本发明实施例提供的一种可选的分布式会话处理系统的架构图;

图2是本发明实施例提供的一种可选的分布式会话处理方法的流程图;

图3是本发明实施例提供的一种可选的分布式会话处理装置的功能框图;

图4是本发明实施例提供的一种可选的会话服务器的示意图。

【具体实施方式】

为了更好的理解本发明的技术方案,下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。

应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。

应当理解,尽管在本发明实施例中可能采用术语第一、第二、第三等来描述终端,但这些终端不应限于这些术语。这些术语仅用来将终端彼此区分开。例如,在不脱离本发明实施例范围的情况下,第一终端也可以被称为第二终端,类似地,第二终端也可以被称为第一终端。

取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于检测”。类似地,取决于语境,短语“如果确定”或“如果检测(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当检测(陈述的条件或事件)时”或“响应于检测(陈述的条件或事件)”。

为了便于理解,首先介绍下本说明书实施例可以适用的应用场景,请参见图1,是本说明书实施例提供的一种分布式会话系统的架构示意图。分布式会话系统包括一个或多个会话服务器(会话服务器集群)100、用户终端200、分布式数据库300及负载均衡器400。

可以理解地,用户终端200的会话请求通过负载均衡的方式分布到会话服务器集群中的某个会话服务器,这样就有可能导致同一个用户的多次请求被分发到不同会话服务器上,就会出现取不到会话数据(session数据)的情况,为了避免出现上述情况,会采用服务器集群间的session同步、用户终端存储法、反向代理哈希一致性、后端集中存储法等方案。

其中,session同步是指多个服务器之间相互同步session,每个服务器都包含全部的session,这种方案对内网带宽消耗较大,并且数据量受内存限制,无法水平扩展。

用户终端存储法是指将session存储在浏览器的cookie中,这种方案每次请求都要传输session,对外网带宽消耗较大,且session易被篡改。

反向代理哈希一致性是指让反向代理服务器利用用户的网址进行哈希计算以保证相同网址的请求分发到同一个服务器上,这种方案如果服务器重启可能会导致部分session丢失,或者当服务器水平扩展后,根据网址重新哈希计算后请求分发不到原先的服务器上。

后端集中存储法是指将session存在服务器背后的存储系统中。相比于前几种方案,该方案可以水平扩展,服务器重启或者扩容不会有session丢失,但是在并发访问的时候,依旧无法保证同一个用户同时多次进线造成的重复创建会话或者会话覆盖问题。

示例性地,用户终端200为手机、平板电脑、个人计算机(personalcomputer,pc)、个人数字助理(personaldigitalassistant,pda)、上网本等电子设备。在此不做限定。

图2是根据本发明实施例的一种分布式会话处理方法的流程图,应用于会话服务器100,如图2所示,该方法包括:

步骤s01,获取用户终端发送的会话请求,会话请求携带用户终端的身份标识;

步骤s02,根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;

步骤s03,根据身份标识生成session键,并利用session键检测预设的数据库中是否存在与session键相对应的session数据;

步骤s04,如不存在,创建与会话请求相对应的当前会话;

步骤s05,当完成当前会话时,根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库,其中,session时效键用于定义会话的有效期,session键的有效期大于session时效键的有效期。

具体地,session数据以key-value形式存储于数据库中,session键为key,session数据为value。

session用于追踪每个用户的会话,使用会话服务器100生成的锁键进行标识,用以区分用户。session数据存放在服务器的内存(redis数据库)中,这样,当用户发出会话请求时,会话服务器100利用用户id生成锁键,利用锁键获取分布式锁,从而找到这个用户对应的session数据进行操作。

当用户终端200访问会话服务器100时,会话服务器100根据用户的身份标识(即用户id)生成锁键(lock:userid),由于用户的身份标识是唯一的,从而利用锁键获取分布式锁,分布式锁是为了防止并发时重复创建用户id相同的会话导致覆盖,解决两个会话请求同时加载了同一个sessio数据导致两个请求中后结束的那个会话请求的session数据覆盖先结束的会话请求的session数据的问题;并且引入session键和session时效键,将session键的有效期设置的比session时效键长,来保证session时效键超时时还能获取对应的session数据。

本方案是基于分布式会话系统建立的,预设的数据库为分布式数据库(redis数据库)提供session数据的读取和存储服务,每个用户的session数据就像键值对一样存储在redis数据库中,键就是session键,值就是用户需要存储的session数据。可以理解地,采用redis数据库统一集中存储session数据不需要担心请求被分发到不同的服务器上导致无法路由到session数据。而且,用户终端不需要存储session数据,redis数据库方便水平扩展,并且服务器重启后session数据也不会丢失。

下面对本实施例提供的分布式会话处理方法的具体技术方案进行详细的说明。

步骤s01,获取用户终端发送的会话请求,会话请求携带用户终端的身份标识。

在本实施例中,请求为会话请求,在其他实施例中,请求还可以是注册请求或注销请求。

用户终端可以是第一用户终端(手机)、第二用户终端(笔记本电脑)、第三用户终端(台式电脑),当然第一用户终端、第二用户终端及第三用户终端也可以都是手机。在本实施例中,当多个用户终端同时针对某一服务器进行访问时,利用分布式锁技术来避免多个用户终端同时进线发生session覆盖的问题。

会话请求例如可以是http请求,当用户终端发起http请求,http请求头会带上cookie,cookie里面就包含有用户的身份标识(用户id)。

步骤s02,根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁。

其中,用户终端在获取分布式锁的前提下才能安全地访问服务器。锁键具有全局唯一的特征,因此可以用来作为分布式锁的键。在本实施例中,锁键是基于用户的身份标识生成的键,即锁键与分布式锁是具有映射关系的。

在一种实施方式中,分布式锁存储于分布式数据库中,当服务器接收到请求时,会触发分布式锁抢锁创建操作。

分布式锁的有效期为用户终端的会话(session)有效期,其获得可以通过一个获取到期时间的接口(sessionexpiretime形式的api),该接口会返回用户终端的session的到期时间,即可获取分布式锁的有效期。例如session的有效期设置为30分钟,即设置session最大的不活动的间隔时间为30分钟,若该系统在30分钟内无活动(无http请求),该session失效,若有http请求,则30分钟后失效(即失效时间在请求时间基础上增加30分钟)。那么分布式锁的有效期也是30分钟。

通过分布式锁技术,能够实现session数据在整个会话中的独占性,避免其他终端对同一会话数据造成覆盖。

进一步地,在步骤s02之后,所述方法还包括:

利用获取的分布式锁进行互斥操作;

在每次互斥操作之前,判断所述分布式锁是否已过期;

若已过期则放弃互斥操作并进行相应的丢锁处理;

若未过期则进行当次互斥操作,直至抢锁成功,并通过预设的接口向所述用户终端反馈抢锁成功信息。

具体地,在抢锁过程中,会话服务器100会先判断分布式锁是否已过期;若已过期则放弃互斥操作并进行相应的丢锁处理;若未过期则进行互斥操作,直至抢锁成功。判断分布式锁是否过期,可以直接比较当前时间与分布式锁的有效期,当所述当前时间超过所述分布式锁有效期,则所述分布式锁当前已过期,过期了就丢锁。

可以理解地,当会话服务器集群接收到会话请求消息后,这个请求会被分配到用户终端本次会话对应的服务器上,由该服务器来接收会话相关请求。具体地,利用同一个锁的第二次写入失败的机制,即一个锁键与一个分布式锁映射,从而判断本次会话是否可以获取分布式锁,如果不能获取分布式锁,则一直保持尝试获取分布式锁的状态,直到获取到分布式锁为止,在保持尝试获取分布式锁状态时,对应的服务器的线程也会处于阻塞状态。

进一步地,在会话服务器获取分布式锁时,服务器可以设置分布式锁的时效,如果超时了服务器还没有释放分布式锁则自动释放分布式锁,避免死锁。

当获取分布式锁后,其他请求如果申请的是同一个会话数据的分布式锁,则在服务器释放掉分布式锁之前,都会获取失败,从而进入阻塞状态,等待该分布式锁,保证会话数据的一致性。可以理解地,基于用户的身份标识生成的锁键去获取分布式锁,可以确保同一个用户同一个时刻只存在一个会话。

步骤s03,根据身份标识生成session键,并利用session键检测预设的数据库中是否存在与session键相对应的session数据。

其中,session数据以key-value形式存储于数据库中,session键为key,session数据为value。

session键是基于用户的身份标识(用户id)生成的键,sessionkey=“userid”,例如:sessionkey=“123456”。session键的有效期比会话的有效期略长。这里的会话的有效期是通过用户终端和服务器协商得出的,例如,session键的有效期为40分钟,session的有效期为30分钟。可以利用sessionexpiretime形式的api接口获取session的有效期。

可以理解地,服务器根据用户id生成的session键去获取当前的会话session数据。如果session数据存在,则代表该请求的用户已经登陆,服务器根据登陆用户的权限,返回请求的session数据到用户终端。

在本实施方式中,采用redis数据库统一集中存储session数据,不需要担心请求被分发到不同的服务器导致无法路由到session数据。基于redis的分布式session管理机制,利用session键作为key来查找对应的session数据,由于redis数据库是内存存储,访问效率高,性能上比较好,因此,在大用户高并发情况下,具有读取速度快,面对多用户支持集群,能够有效提高系统访问效率。

步骤s04,如不存在,创建与会话请求相对应的当前会话。即新建一个会话。

可以理解地,在创建会话时,当前会话的session数据默认为需要备份至数据库中。在本实施例中,session数据包括会话标识,会话标识根据用户的身份标识及会话创建时的时间戳生成,用于标识同一个用户的同一段会话。

步骤s05,当完成当前会话时,根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库,包括:

根据当前会话的创建时的时间戳及用户的身份标识生成会话标识,并将会话标识存储至所述当前会话产生的session数据中;

根据用户的身份标识生成session时效键;

将所述当前会话产生的session数据及session时效键备份至预设的数据库。

可以理解地,引入session时效键,将会话的有效期作为session时效键的有效期,而在存储session数据时,由于session数据是以key-value形式存储于数据库中,session键的有效期大于会话的有效期,即大于session时效键的有效期,从而保证session时效键超时时还能获取对应的session数据用于数据记录。在本实施方式中,锁键、session键及session时效键都是基于用户的身份标识生成的,保证了不同用户之间互不影响,同一用户同一时间只能存在一个会话(session)。

在步骤s03之后,方法还包括:

步骤s06,如存在,从预设的数据库中获取用户终端的在先会话的session数据及与session数据关联存储的用户终端的session时效键。

例如,redis数据库中已经存储了该用户的session数据,证明本次会话不是新建的会话,redis数据库中的session数据能够应用于当前会话。

步骤s07,根据用户终端的session时效键确定用户终端的session数据是否为有效数据。

步骤s08,如果是,读取用户终端的session数据并运用于当前会话中。

在用户已经创建过会话数据时,需要保证redis数据库中的会话数据是正常的,即没有过期或失效。当session数据本身的生命周期到了,则该会话数据需要从redis数据库中清楚掉。

进一步地,根据在先会话的session时效键确定用户终端的session数据是否为有效数据的步骤,包括:

获取当前时间;确定当前时间是否在用户终端的session时效键中定义的有效期内;当前时间超过有效期,则用户终端的session数据是无效数据;当前时间未超过有效期,则用户终端的session数据为有效数据。

例如session时效键定义的有效截止时间是2020-9-1-10-30+30分钟,即请求时间为2020年9月1日上午10点半,session时效键为2020-9-1-11-00,即2020年9月1日上午11点,如果当前时间为2020-9-1-10-45,那么就在有效期内,session数据就是有效数据。

在本实施方式中,session键的有效期大于session时效键的有效期。

在步骤s08之后,方法还包括:获取数据库中存储的用户终端的在先会话的session数据及session时效键;比较当前会话的session数据与在先会话的session数据是否一致;若不一致,则将当前会话的session数据与在先会话的session数据合并;将合并后的session数据备份至数据库中,并将在先会话的session时效键更新为当前会话的session时效键。

可以理解地,数据库中存储在先会话的session数据时,当用户的最新一次的会话结束时,应将session数据、session时效键进行更新,其中,session时效键更新是指对session时效键中的时间限值进行更新,例如在先会话的session时效键为2020-9-1-10-30+30分钟,当前会话的session时效键为2020-9-25+30分钟,则更新后的session数据的session时效键为2020-9-25+30分钟。

进一步地,在步骤s05之后,方法还包括:

监听并过滤出预设的数据库中的关于session时效键的过期事件;

根据预设的映射关系得到过期的session时效键对应的用户终端的身份标识及会话的有效期;

根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;

根据用户终端的身份标识得到session键,利用session键读取预设的数据库中存储的session数据;

将session键的结束时间及session数据记录在预设的数据库中,并将session键删除。

可以理解地,通过监听session时效键过期事件用户刚好进线导致数据库中session状态记录不准确。

本发明实施例提供了一种分布式会话处理装置,如图3所示,装置包括第一获取单元10、第一生成单元20、第二生成单元30、创建单元40、处理单元50。

第一获取单元10,用于获取用户终端发送的会话请求,会话请求携带用户终端的身份标识;

第一生成单元20,用于根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;

第二生成单元30,用于根据身份标识生成session键,并利用session键检测预设的数据库中是否存在与session键相对应的session数据;

创建单元40,用于如不存在,创建与会话请求相对应的当前会话;

处理单元50,当完成当前会话时,用于根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库,其中,session时效键用于定义会话的有效期,session键的有效期大于session时效键的有效期。

具体地,session数据以key-value形式存储于数据库中,session键为key,session数据为value。

session用于追踪每个用户的会话,使用服务器生成的锁键进行标识,用以区分用户。session数据存放在服务器的内存(redis数据库)中,这样,当用户发出会话请求时,服务器利用用户id生成锁键,利用锁键获取分布式锁,从而找到这个用户对应的session数据进行操作。

当用户通过用户终端访问服务器时,服务器根据用户的身份标识(即用户id)生成锁键(lock:userid),由于用户的身份标识是唯一的,从而利用锁键获取分布式锁,分布式锁是为了防止并发时重复创建用户id相同的会话导致覆盖,并且解决两个会话请求同时加载了同一个sessio数据导致两个请求中后结束的那个会话请求的session数据覆盖先结束的会话请求的session数据的问题。

本方案是基于分布式会话系统建立的,预设的数据库为分布式数据库(redis数据库)提供session数据的读取和存储服务,每个用户的session数据就像键值对一样存储在redis数据库中,键就是session键,值就是用户需要存储的session数据。可以理解地,采用redis数据库统一集中存储session数据不需要担心请求被分发到不同的服务器上导致无法路由到session数据。而且,用户终端不需要存储session数据,redis数据库方便水平扩展,并且服务器重启后session数据也不会丢失。

处理单元50包括存储子单元、第一生成子单元、第一备份子单元。

存储子单元,用于根据当前会话的创建时的时间戳及用户的身份标识生成会话标识,并将会话标识存储至当前会话产生的session数据中;

第一生成子单元,用于根据用户的身份标识生成session时效键;

第一备份子单元,用于将当前会话产生的session数据及session时效键备份至预设的数据库。

可以理解地,引入session时效键,将会话的有效期作为session时效键的有效期,而在存储session数据时,由于session数据是以key-value形式存储于数据库中,session键的有效期大于会话的有效期,即大于session时效键的有效期,从而保证session时效键超时时还能获取对应的session数据用于数据记录。在本实施方式中,锁键、session键及session时效键都是基于用户的身份标识生成的,保证了不同用户之间互不影响,同一用户同一时间只能存在一个会话(session)。

装置还包括第二获取单元、确定单元、读取单元。

第二获取单元,用于如存在,从预设的数据库中获取用户终端的在先会话的session数据及与session数据关联存储的用户终端的session时效键。

例如,redis数据库中已经存储了该用户的session数据,证明本次会话不是新建的会话,redis数据库中的session数据能够应用于当前会话。

确定单元,用于根据用户终端的session时效键确定用户终端的session数据是否为有效数据。

读取单元,用于如果是,读取用户终端的session数据并运用于当前会话中。

在用户已经创建过会话数据时,需要保证redis数据库中的会话数据是正常的,即没有过期或失效。当session数据本身的生命周期到了,则该会话数据需要从redis数据库中清楚掉。

进一步地,确定单元包括获取子单元、确定子单元、第一确认子单元及第二确认子单元。

获取子单元,用于获取当前时间;确定子单元,用于确定当前时间是否在用户终端的session时效键中定义的有效期内;第一确认子单元,用于当前时间超过有效期,则用户终端的session数据是无效数据;第二确认子单元,用于当前时间未超过有效期,则用户终端的session数据为有效数据。

例如session时效键定义的有效截止时间是2020-9-1-10-30+30分钟,即请求时间为2020年9月1日上午10点半,session时效键为2020-9-1-11-00,即2020年9月1日上午11点,如果当前时间为2020-9-1-10-45,那么就在有效期内,session数据就是有效数据。

进一步地,装置还包括监听单元、第三获取单元、第二处理单元。

监听单元,用于监听并过滤出预设的数据库中的关于session时效键的过期事件;

第三获取单元,用于根据预设的映射关系得到过期的session时效键对应的用户终端的身份标识及会话的有效期;

第一生成单元20,用于根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;

第二生成单元30,用于根据用户终端的身份标识得到session键,利用session键读取预设的数据库中存储的session数据;

第二处理单元,用于将session键的结束时间及session数据记录在预设的数据库中,并将session键删除。

可以理解地,通过监听session时效键过期事件用户刚好进线导致数据库中session状态记录不准确。

本发明实施例提供了一种计算机非易失性存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行以下步骤:

获取用户终端发送的会话请求,会话请求携带用户终端的身份标识;根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;根据身份标识生成session键,并利用session键检测预设的数据库中是否存在与session键相对应的session数据;如不存在,创建与会话请求相对应的当前会话;当完成当前会话时,根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库,其中,session时效键用于定义会话的有效期,session键的有效期大于session时效键的有效期

可选地,在程序运行时控制存储介质所在设备执行在根据身份标识生成session键,并利用session键检测预设的数据库中是否存在与session键相对应的session数据之后,包括:

如存在,从预设的数据库中获取用户终端的在先会话的session数据及与session数据关联存储的用户终端的session时效键;根据用户终端的session时效键确定用户终端的session数据是否为有效数据;如果是,读取用户终端的session数据并运用于当前会话中。

可选地,在程序运行时控制存储介质所在设备执行在读取用户终端的session数据并运用于当前会话中之后,包括:获取数据库中存储的用户终端的在先会话的session数据及session时效键;比较当前会话的session数据与在先会话的session数据是否一致;若不一致,则将当前会话的session数据与在先会话的session数据合并;将合并后的session数据备份至数据库中,并将在先会话的session时效键更新为当前会话的session时效键。

可选地,在程序运行时控制存储介质所在设备执行在当完成当前会话时,根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库之后,包括:

监听并过滤出预设的数据库中的关于session时效键的过期事件;根据预设的映射关系得到过期的session时效键对应的用户终端的身份标识及会话的有效期;根据用户终端的身份标识生成锁键,并获取与锁键对应的分布式锁;根据用户终端的身份标识得到session键,利用session键读取预设的数据库中存储的session数据;将session键的结束时间及session数据记录在预设的数据库中,并将session键删除。

可选地,在程序运行时控制存储介质所在设备执行根据身份标识生成session时效键,将当前会话产生的session数据及session时效键备份至预设的数据库,包括:

根据当前会话的创建时的时间戳及用户的身份标识生成会话标识,并将会话标识存储至当前会话产生的session数据中;根据用户的身份标识生成session时效键;将当前会话产生的session数据及session时效键备份至预设的数据库。

图4是本发明实施例提供的一种会话服务器的示意图。如图4所示,该实施例的会话服务器100包括:处理器101、存储器102以及存储在存储器102中并可在处理器101上运行的计算机程序103,处理器101执行计算机程序103时实现实施例中的分布式会话处理方法,为避免重复,此处不一一赘述。或者,该计算机程序被处理器101执行时实现实施例中分布式会话处理装置中各模型/单元的功能,为避免重复,此处不一一赘述。

会话服务器100可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。计算机设备可包括,但不仅限于,处理器101、存储器102。本领域技术人员可以理解,图4仅仅是计算机设备100的示例,并不构成对计算机设备100的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如计算机设备还可以包括输入输出设备、网络接入设备、总线等。

所称处理器101可以是中央处理单元(centralprocessingunit,cpu),还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现场可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器102可以是计算机设备100的内部存储单元,例如计算机设备100的硬盘或内存。存储器102也可以是计算机设备100的外部存储设备,例如计算机设备100上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。进一步地,存储器102还可以既包括计算机设备100的内部存储单元也包括外部存储设备。存储器102用于存储计算机程序以及计算机设备所需的其他程序和数据。存储器102还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

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