一种长链接的缓存优化方法及系统与流程

文档序号:26537613发布日期:2021-09-07 20:17阅读:109来源:国知局
一种长链接的缓存优化方法及系统与流程

1.本发明涉及互联网技术领域,特别涉及一种长链接的缓存优化方法及系统。


背景技术:

2.移动互联网蓬勃发展的今天,大部分手机app(application,应用程序)都提供了消息推送功能,如新闻客户端的热点新闻推荐、im(instant messaging,即时通讯)工具的聊天消息提醒、电商产品促销信息、企业应用的通知和审批流程等等。推送对于提高产品活跃度、提高功能模块使用率、提升用户粘性和提升用户留存率起到了重要作用。
3.消息推送的主要实现流程为:客户端预先访问服务端路由地址列表接口,获取可以正常接入的路由地址,选择其中一个地址进行长链接的建立。当成功建立起长链接之后,服务端与客户端将会进行正常的消息通讯。服务端要向客户端发送消息时,需预先根据userid(用户唯一标识)查询对应的设备id列表信息,根据设备id(identity document,唯一标识)列表查询对应的通道信息,之后,通过对应的通道进行消息的发送。服务端记录设备id与对应的通道信息时,一般都会记录缓存的,即先预先查询缓存是否有相关信息,如果无则查询数据库,从数据库中查询出信息后,并再次加载入缓存中。在推送场景中存在很多这样的需要缓存的数据的场景,这些数据如果都全量缓存在内存中,则会因为数据量巨大而占用大量的内存,因此,现在通用的方式都是设置缓存并设置过期时间,当达到过期时间之后,则缓存失效,程序逻辑为每次均预先访问缓存,当缓存失效后,访问数据库,之后再次写入数据到缓存中。
4.为了配合现在的缓存通用使用方式,推送系统中一般缓存的处理都在长链接建立这个功能点上。当每次建立长链接时,预先都查询下所有需要的缓存是否都存在,不再,则查询数据库并进行缓存加载。这样,则后续的所有在线用户的推送则都可以直接访问缓存,实现消息的快速交互。可是,在正常的交互使用场景下,推送消息的交互次数不会有很多,但是,由于客户端网络质量的差异,会存在较多的长链接建立场景,因为网络断开重连的场景很多,这样,将导致每天每个设备将会有较多次数的长链接建立,每个长链接的建立将都会进行缓存数据的初始化,当设备数量继续增大后,将会给服务端带来较大的压力。


技术实现要素:

5.本发明所要解决的技术问题是:提供一种长链接的缓存优化方法及系统,提高长链接建立的效率,并减少服务端的压力。
6.为了解决上述技术问题,本发明采用的技术方案为:
7.一种长链接的缓存优化方法,包括步骤:
8.s1、客户端判断是否为与服务端首次建立长链接,若是,则向服务端发送第一长链接请求之后执行步骤s2,否则执行步骤s4;
9.s2、服务端接收第一长链接请求,初始化并存储建立长链接的预设数据至缓存中,将每一个预设数据的缓存时间作为第一缓存信息随第一长链接建立成功信息一起返回至
客户端;
10.s3、客户端接受第一长链接建立成功信息,将第一缓存信息作为最新缓存信息保存至本地内存;
11.s4、客户端向服务端发送包括最新缓存信息的第二长链接请求;
12.s5、服务端接收第二长链接请求,将最新缓存信息中每一个预设数据的缓存时间与当前时间进行比较,得到已过期数据和未过期数据,初始化并存储已过期数据至缓存中,将每一个已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端;
13.s6、客户端接受第二长链接建立成功信息,并根据第二缓存信息对本地内存的最新缓存信息进行更新,得到更新后的最新缓存信息。
14.为了解决上述技术问题,本发明采用的另一种技术方案为:
15.一种长链接的缓存优化系统,包括客户端和服务端,所述客户端包括第一存储器、第一处理器及存储在第一存储器上并可在第一处理器上运行的第一计算机程序,所述服务端包括第二存储器、第二处理器及存储在第二存储器上并可在第二处理器上运行的第二计算机程序,所述第一处理器执行所述第一计算机程序时实现以下步骤:
16.s1、判断是否为与服务端首次建立长链接,若是,则向服务端发送第一长链接请求之后执行步骤s2,否则执行步骤s4;
17.s3、接受第一长链接建立成功信息,将第一缓存信息作为最新缓存信息保存至本地内存;
18.s4、向服务端发送包括所述最新缓存信息的第二长链接请求;
19.s6、接受第二长链接建立成功信息,并根据第二缓存信息对本地内存的所述最新缓存信息进行更新,得到更新后的最新缓存信息;
20.所述第二处理器执行所述第二计算机程序时实现以下步骤:
21.s2、接收所述第一长链接请求,初始化并存储建立长链接的预设数据至缓存中,将每一个所述预设数据的缓存时间作为第一缓存信息随第一长链接建立成功信息一起返回至客户端;
22.s5、接收所述第二长链接请求,将所述最新缓存信息中每一个所述预设数据的缓存时间与当前时间进行比较,得到已过期数据和未过期数据,初始化并存储所述已过期数据至缓存中,将每一个所述已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端。
23.本发明的有益效果在于:一种长链接的缓存优化方法及系统,在客户端为与服务端首次建立长链接时,将每一个预设数据的缓存时间保存至客户端的本地内存;在客户端和服务端断开长链接之后进行的非首次长链接时,则客户端会在长链接请求时一起发送每一个预设数据的缓存时间,使得服务端根据每一个预设数据的缓存时间判断预设数据在缓存中是否过期,对于已过期数据,则无需在缓存中检索,直接初始化和存储即可,即在明确缓存已经失效的场景下,能够减少一次缓存查询,提高长链接建立的效率,并减少服务端的压力。
附图说明
24.图1为本发明实施例的一种长链接的缓存优化方法的流程示意图;
25.图2为本发明实施例的一种长链接的缓存优化系统的结构示意图。
26.标号说明:
27.1、一种长链接的缓存优化系统;2、客户端;3、第一处理器;4、第一存储器;5、服务端;6、第二处理器;7、第二处理器。
具体实施方式
28.为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
29.请参照图1,一种长链接的缓存优化方法,包括步骤:
30.s1、客户端判断是否为与服务端首次建立长链接,若是,则向服务端发送第一长链接请求之后执行步骤s2,否则执行步骤s4;
31.s2、服务端接收所述第一长链接请求,初始化并存储建立长链接的预设数据至缓存中,将每一个所述预设数据的缓存时间作为第一缓存信息随第一长链接建立成功信息一起返回至客户端;
32.s3、客户端接受所述第一长链接建立成功信息,将所述第一缓存信息作为最新缓存信息保存至本地内存;
33.s4、客户端向服务端发送包括所述最新缓存信息的第二长链接请求;
34.s5、服务端接收所述第二长链接请求,将所述最新缓存信息中每一个所述预设数据的缓存时间与当前时间进行比较,得到已过期数据和未过期数据,初始化并存储所述已过期数据至缓存中,将每一个所述已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端;
35.s6、客户端接受所述第二长链接建立成功信息,并根据所述第二缓存信息对本地内存的所述最新缓存信息进行更新,得到更新后的最新缓存信息。
36.从上述描述可知,本发明的有益效果在于:在客户端为与服务端首次建立长链接时,将每一个预设数据的缓存时间保存至客户端的本地内存;在客户端和服务端断开长链接之后进行的非首次长链接时,则客户端会在长链接请求时一起发送每一个预设数据的缓存时间,使得服务端根据每一个预设数据的缓存时间判断预设数据在缓存中是否过期,对于已过期数据,则无需在缓存中检索,直接初始化和存储即可,即在明确缓存已经失效的场景下,能够减少一次缓存查询,提高长链接建立的效率,并减少服务端的压力。
37.进一步地,所述步骤s1具体包括以下步骤:
38.客户端判断本地内存中是否存储有最新缓存信息,若是,则认为是非首次建立长链接,执行步骤s4,否则认为是与服务端首次建立长链接,向服务端发送第一长链接请求之后执行步骤s2。
39.从上述描述可知,根据客户端的本地内存是否存储有缓存信息,就可以知道是否为首次建立长链接,从而根据其判断结果生成不同的长链接请求。
40.进一步地,所述缓存时间为预设数据的创建时间,所述预设数据初始化时包括对每一个所述预设数据初始化一个缓存过期时长;
41.所述步骤s5具体包括以下步骤:
42.服务端接收所述第二长链接请求,判断所述最新缓存信息中每一个所述预设数据的缓存时间与所述当前时间的时间差是否大于对应的缓存过期时长,若是,所述预设数据为已过期数据,否则所述预设数据为未过期数据;
43.服务端初始化并存储所述已过期数据至缓存中,将每一个所述已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端。
44.从上述描述可知,由此,缓存信息中只保存每一个预设数据的创建时间,由服务端根据自身设定的缓存过期时长进行判断,即可判断长链接建立所需要的预设数据是否还保存在缓存中还是已经过期被删除了,从而无需所有的预设数据都需要去缓存中查询,减少了数据查询的次数,从而提高长链接建立的效率,并减少服务端的压力。
45.进一步地,所述步骤s2中初始化并存储建立长链接的预设数据至缓存中具体包括以下步骤:
46.从数据库中查询得到建立长链接的预设数据,并将所述预设数据存储至缓存中;
47.所述步骤s5中初始化并存储所述已过期数据至缓存中具体包括以下步骤:
48.从数据库中查询得到所述已过期数据,并将所述已过期数据存储至缓存中。
49.进一步地,所述预设数据包括所述客户端的设备id与在所述客户端上登录的账户id的对应关系、设备id与通道id的对应关系以及账户id与预设标签的关联关系。
50.请参照图2,一种长链接的缓存优化系统,包括客户端和服务端,所述客户端包括第一存储器、第一处理器及存储在第一存储器上并可在第一处理器上运行的第一计算机程序,所述服务端包括第二存储器、第二处理器及存储在第二存储器上并可在第二处理器上运行的第二计算机程序,所述第一处理器执行所述第一计算机程序时实现以下步骤:
51.s1、判断是否为与服务端首次建立长链接,若是,则向服务端发送第一长链接请求之后执行步骤s2,否则执行步骤s4;
52.s3、接受第一长链接建立成功信息,将第一缓存信息作为最新缓存信息保存至本地内存;
53.s4、向服务端发送包括所述最新缓存信息的第二长链接请求;
54.s6、接受第二长链接建立成功信息,并根据第二缓存信息对本地内存的所述最新缓存信息进行更新,得到更新后的最新缓存信息;
55.所述第二处理器执行所述第二计算机程序时实现以下步骤:
56.s2、接收所述第一长链接请求,初始化并存储建立长链接的预设数据至缓存中,将每一个所述预设数据的缓存时间作为第一缓存信息随第一长链接建立成功信息一起返回至客户端;
57.s5、接收所述第二长链接请求,将所述最新缓存信息中每一个所述预设数据的缓存时间与当前时间进行比较,得到已过期数据和未过期数据,初始化并存储所述已过期数据至缓存中,将每一个所述已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端。
58.从上述描述可知,本发明的有益效果在于:在客户端为与服务端首次建立长链接时,将每一个预设数据的缓存时间保存至客户端的本地内存;在客户端和服务端断开长链接之后进行的非首次长链接时,则客户端会在长链接请求时一起发送每一个预设数据的缓
存时间,使得服务端根据每一个预设数据的缓存时间判断预设数据在缓存中是否过期,对于已过期数据,则无需在缓存中检索,直接初始化和存储即可,即在明确缓存已经失效的场景下,能够减少一次缓存查询,提高长链接建立的效率,并减少服务端的压力。
59.进一步地,所述第一处理器执行所述第一计算机程序的所述步骤s1时具体实现以下步骤:
60.判断本地内存中是否存储有最新缓存信息,若是,则认为是非首次建立长链接,执行步骤s4,否则认为是与服务端首次建立长链接,向服务端发送第一长链接请求之后执行步骤s2。
61.从上述描述可知,根据客户端的本地内存是否存储有缓存信息,就可以知道是否为首次建立长链接,从而根据其判断结果生成不同的长链接请求。
62.进一步地,所述缓存时间为预设数据的创建时间,所述预设数据初始化时包括对每一个所述预设数据初始化一个缓存过期时长;
63.所述第二处理器执行所述第二计算机程序的所述步骤s5时具体实现以下步骤:
64.接收所述第二长链接请求,判断所述最新缓存信息中每一个所述预设数据的缓存时间与所述当前时间的时间差是否大于对应的缓存过期时长,若是,所述预设数据为已过期数据,否则所述预设数据为未过期数据;
65.初始化并存储所述已过期数据至缓存中,将每一个所述已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端。
66.从上述描述可知,由此,缓存信息中只保存每一个预设数据的创建时间,由服务端根据自身设定的缓存过期时长进行判断,即可判断长链接建立所需要的预设数据是否还保存在缓存中还是已经过期被删除了,从而无需所有的预设数据都需要去缓存中查询,减少了数据查询的次数,从而提高长链接建立的效率,并减少服务端的压力。
67.进一步地,所述第二处理器执行所述第二计算机程序的所述步骤s2中初始化并存储建立长链接的预设数据至缓存时具体实现以下步骤:
68.从数据库中查询得到建立长链接的预设数据,并将所述预设数据存储至缓存中;
69.所述第二处理器执行所述第二计算机程序的所述步骤s5中初始化并存储所述已过期数据至缓存时具体实现以下步骤:
70.从数据库中查询得到所述已过期数据,并将所述已过期数据存储至缓存中。
71.进一步地,所述预设数据包括所述客户端的设备id与在所述客户端上登录的账户id的对应关系、设备id与通道id的对应关系以及账户id与预设标签的关联关系。
72.请参照图1,本发明的实施例一为:
73.一种长链接的缓存优化方法,包括步骤:
74.s1、客户端判断是否为与服务端首次建立长链接,若是,则向服务端发送第一长链接请求之后执行步骤s2,否则执行步骤s4;
75.在本实施例中,步骤s1具体包括以下步骤:
76.客户端判断本地内存中是否存储有最新缓存信息,若是,则认为是非首次建立长链接,执行步骤s4,否则认为是与服务端首次建立长链接,向服务端发送第一长链接请求之后执行步骤s2。
77.这是因为首次建立长链接之后,客户端的本地内存就会存储有最新缓存信息,因
此可以据此判断是否为首次建立长链接。
78.s2、服务端接收第一长链接请求,初始化并存储建立长链接的预设数据至缓存中,将每一个预设数据的缓存时间作为第一缓存信息随第一长链接建立成功信息一起返回至客户端;
79.其中,步骤s2中初始化并存储建立长链接的预设数据至缓存中具体包括以下步骤:从数据库中查询得到建立长链接的预设数据,并将预设数据存储至缓存中。
80.其中,预设数据是指长链接建立所必要的信息,每次建立长链接都需要初始化相关信息,因为无法判断客户端建立长链接的各种复杂场景,所以目前系统一般都是在每次长链接建立时进行数据的初始化,这些数据包括客户端的设备id与在客户端上登录的账户id的对应关系、设备id与通道id的对应关系以及账户id与预设标签的关联关系。
81.其中,缓存时间为预设数据的创建时间,预设数据初始化时包括对每一个预设数据初始化一个缓存过期时长,其中缓存信息并不是指的是预设数据本身,而是每一个预设时间进行缓存时所对应的创建时间。
82.在本实施例中,假设建立长链接的预设数据有三种数据,分别为a、b和c,其中a的缓存过期时长5分钟,b的缓存过期时长10分钟,c的缓存过期时长30分钟,则在首次建立长链接,由于客户端的本地内存不存在最新缓存信息,则服务端在进行预设数据a、b和c的初始化,需要从数据库中获取到所需要的预设数据a、b和c,待初始化操作完成后,预设数据a、b和c就存储在缓存中,得到了第一缓存信息的字段数据格式为:[{a:创建时间},{b:创建时间},{c:创建时间}]。
[0083]
在本实施例中,缓存指的是专门的缓存服务器,在本实施例中选择redis集群作为缓存来进行所有数据的存储。
[0084]
其中,每个客户端建立长链接后,生成的缓存都只能是自己这个客户端使用。如a客户端建立长链接并生成并存储预设数据之后,在缓存的有效期内,如a客户端再次建立长链接则无需再次进行数据缓存。而如果是b客户端建立长链接,则会初始化b客户端的预设数据并进行缓存。
[0085]
s3、客户端接受第一长链接建立成功信息,将第一缓存信息作为最新缓存信息保存至本地内存;
[0086]
由此,客户端在收到长链接建立成功的信息后,将[{a:创建时间},{b:创建时间},{c:创建时间}]存储在本地内存中。
[0087]
s4、客户端向服务端发送包括最新缓存信息的第二长链接请求;
[0088]
其中,假设在建立长链接的第3分钟之后,因为网络不稳定等等意外因素,客户端和服务端之间的长链接断开,而在第6分钟之后,由于网络良好,客户端再次与服务端建立长链接,则此时客户端的本地内存有最新缓存信息,则将最新缓存时间[{a:创建时间},{b:创建时间},{c:创建时间}]随长链接请求一起发给服务端。
[0089]
s5、服务端接收第二长链接请求,将最新缓存信息中每一个预设数据的缓存时间与当前时间进行比较,得到已过期数据和未过期数据,初始化并存储已过期数据至缓存中,将每一个已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端;
[0090]
在本实施例中,步骤s5具体包括以下步骤:
[0091]
服务端接收第二长链接请求,判断最新缓存信息中每一个预设数据的缓存时间与当前时间的时间差是否大于对应的缓存过期时长,若是,预设数据为已过期数据,否则预设数据为未过期数据;
[0092]
服务端初始化并存储已过期数据至缓存中,将每一个已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端。
[0093]
其中,初始化并存储已过期数据至缓存中具体包括以下步骤:从数据库中查询得到已过期数据,并将已过期数据存储至缓存中。
[0094]
由此,服务端接收到客户端的长链接请求,根据最新缓存时间[{a:创建时间},{b:创建时间},{c:创建时间}]和当前时间比对,发现预设数据a已经过期,则预设数据在缓存中已经被删除了,因此标记为已过期数据,对应的预设数据b和c则为未过期数据,因此,预设数据a直接去数据库中查询,这样就减少了一次去缓存中查询所浪费的时间和所占用的资源,从而在明确缓存已经失效的场景下,能够减少一次缓存查询,提高长链接建立的效率,并减少服务端的压力。
[0095]
同时,服务端只需要将每一个已过期数据的缓存时间作为第二缓存信息随第二长链接建立成功信息一起返回至客户端即可,即只需要返回[{a:创建时间}],其中,这个创建时间是最新的创建时间。
[0096]
s6、客户端接受第二长链接建立成功信息,并根据第二缓存信息对本地内存的最新缓存信息进行更新,得到更新后的最新缓存信息。
[0097]
在客户端接收到长链接建立成功信息,根据接收的[{a:创建时间}]对本地内存中的最新缓存时间[{a:创建时间},{b:创建时间},{c:创建时间}]进行更新,比如步骤s2时预设数据a的创建时间为15:00,则在步骤s4之后的时间来到了15:06,因此更新后的预设数据a的创建时间更新为15:06,而预设数据b和c的创建时间依旧保留为15:00。
[0098]
其中,服务端虽然增加了数据对比的操作,但是数据比对是通过cpu进行计算,每次查询缓存则是需要通过网络io来进行的,所以,cpu计算耗时绝对比网络io要来的少。同时,cpu计算只需要计算一次,而每次建立长链接时,如果需要初始化多次不同的缓存,则需要多次的网络io,更进一步增加了耗时,因此采用数据对比的操作在整体上还是能提高长链接建立的效率,并减少服务端的压力。
[0099]
请参照图2,本发明的实施例二为:
[0100]
一种长链接的缓存优化系统1,包括客户端2和服务端5。
[0101]
其中,客户端2包括第一存储器4、第一处理器3及存储在第一存储器4上并可在第一处理器3上运行的第一计算机程序,第一处理器3执行第一计算机程序时实现上述实施例一中的步骤s1、s3、s4和s6。
[0102]
其中,服务端5包括第二存储器7、第二处理器6及存储在第二存储器7上并可在第二处理器6上运行的第二计算机程序,第二处理器6执行第一计算机程序时实现上述实施例一中的步骤s2和s5。
[0103]
综上所述,本发明提供的一种长链接的缓存优化方法及系统,根据客户端的本地内存是否存储有缓存信息,就可以知道是否为首次建立长链接,在客户端为与服务端首次建立长链接时,将每一个预设数据的缓存时间保存至客户端的本地内存;在客户端和服务端断开长链接之后进行的非首次长链接时,则客户端会在长链接请求时一起发送每一个预
设数据的缓存时间,使得服务端根据每一个预设数据的缓存时间、创建时间和当前时间判断预设数据在缓存中是否过期,对于已过期数据,则无需在缓存中检索,直接初始化和存储即可,即在明确缓存已经失效的场景下,能够减少一次缓存查询,提高长链接建立的效率,并减少服务端的压力。
[0104]
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1