数据存储管理方法、装置、电子设备和可读存储介质与流程

文档序号:24657883发布日期:2021-04-13 21:26阅读:117来源:国知局
数据存储管理方法、装置、电子设备和可读存储介质与流程

1.本申请涉及存储技术领域,具体而言,涉及一种数据存储管理方法、装置、电子设备和可读存储介质。


背景技术:

2.在分布式数据存储系统中,由于节点可能存在跨idc(internet data center,互联网数据中心)机房的场景,因此,极易出现网络不稳定的现象。目前,在向数据库进行数据写入时,如果出现网络异常情况,写入进程会将写入失败的数据缓存到内存中,然后不断进行数据写入的重试,直至数据写入成功。如此,后续所接收到的待存储的数据可能在内存中堆积,直至超过设置的最大使用内存后,数据将被丢弃。并且,堆积的数据将占用大量的内存,若程序崩溃,缓存在内存中的数据将丢失。现有的存储管理机制中,在出现网络异常时,可能导致数据的丢弃,且若出现程序崩溃,将导致内存队列中数据的丢失。


技术实现要素:

3.本申请的目的包括,例如,提供了一种数据存储管理方法、装置、电子设备和计算机可读存储介质,其能够避免数据在内存中堆积所导致丢弃以及程序崩溃存在的数据丢失现象。
4.本申请的实施例可以这样实现:
5.第一方面,本申请实施例提供一种数据存储管理方法,所述方法包括:
6.将获取的多个待存储数据缓存至redis队列中;
7.探测数据库是否出现网络异常,若出现网络异常则将所述redis队列中的待存储数据保存至创建的文件中;
8.在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库中。
9.在可选的实施方式中,所述redis队列包括与主数据库对应的主redis队列,以及与备用数据库对应的备用redis队列;
10.所述将获取的多个待存储数据缓存至redis队列中的步骤,包括:
11.通过主进程将获取的多个待存储数据缓存至主redis队列中;
12.将所述主redis队列中缓存的待存储数据复制备份至备用redis队列中。
13.在可选的实施方式中,所述文件包括与主数据库对应的主文件,以及与备用数据库对应的备用文件;
14.所述在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库中的步骤,包括:
15.在探测到所述主数据库恢复至网络正常时,通过所述主进程将所述主文件中的待存储数据写入至所述主数据库中;和/或
16.在探测到所述备用数据库恢复至网络正常时,通过备用进程将所述备用文件中的
待存储数据写入至所述备用数据库中。
17.在可选的实施方式中,所述将获取的多个待存储数据缓存至redis队列中的步骤,包括:
18.通过主进程将获取的多个待存储数据缓存至主redis队列中;
19.将所述主redis队列中缓存的多个待存储数据分发至创建的多个线程中各所述线程对应的子队列;
20.将所述redis队列中已分发至各所述子队列的待存储数据删除。
21.在可选的实施方式中,所述探测数据库是否出现网络异常,若出现网络异常则将所述redis队列中的待存储数据保存至创建的文件中的步骤,包括:
22.探测数据库是否出现网络异常,若出现网络异常,针对各所述子队列,检测所述子队列中的待存储数据是否超过预设数量;
23.若超过所述预设数量,则将所述子队列中的待存储数据保存至创建的文件中。
24.在可选的实施方式中,所述在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库的步骤,包括:
25.在探测到所述数据库恢复至网络正常时,通过各所述线程将对应的文件中存储的待存储数据同步写入至所述数据库中。
26.在可选的实施方式中,所述探测数据库是否存在网络异常的步骤,包括:
27.从所述redis队列中提取待存储数据写入数据库中;
28.若在预设时长内未检测到所述数据库的数据写入成功信息,则判定所述数据库存在网络异常。
29.第二方面,本申请实施例提供一种数据存储管理装置,所述装置包括:
30.缓存模块,用于将获取的多个待存储数据缓存至redis队列中;
31.保存模块,用于探测数据库是否出现网络异常,若出现网络异常则将所述redis队列中的待存储数据保存至创建的文件中;
32.写入模块,用于在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库中。
33.第三方面,本申请实施例提供一种电子设备,包括一个或多个存储介质和一个或多个与存储介质通信的处理器,一个或多个存储介质存储有处理器可执行的机器可执行指令,当电子设备运行时,处理器执行所述机器可执行指令,以执行前述实施方式中任意一项所述的方法步骤。
34.第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有机器可执行指令,所述机器可执行指令被执行时实现前述实施方式中任意一项所述的方法步骤。
35.本申请实施例的有益效果包括,例如:
36.本申请实施例提供一种数据存储管理方法、装置、电子设备和可读存储介质,通过将获取的待存储数据缓存至redis队列中,并探测数据库是否存在网络异常,若出现网络异常则将redis队列中缓存的待存储数据保存至创建的文件中,在探测到数据库恢复网络正常之后,再将文件中的待存储数据写入至数据库中。如此,在出现网络异常的情况时,通过将redis队列中的数据写入文件中,避免后续接收到的数据由于在redis队列中堆积而造成
数据丢弃的问题,并且,由于文件中存储的数据断电不丢失,可避免程序崩溃时存在的数据丢失的缺陷。
附图说明
37.为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
38.图1为现有技术中数据存储管理机制的过程示意图;
39.图2为本申请实施例提供的数据存储管理的应用场景示意图;
40.图3为本申请实施例提供的数据存储管理方法的流程图;
41.图4为本申请实施例提供的数据存储管理的机制示意图;
42.图5为图3中步骤s110的子步骤的流程图;
43.图6为本申请实施例提供的数据存储管理方法的另一流程图;
44.图7为本申请实施例提供的电子设备的结构框图;
45.图8为本申请实施例提供的数据存储管理装置的功能模块框图。
46.图标:10

服务器;110

存储介质;120

处理器;130

机器可执行指令;131

缓存模块;132

保存模块;133

写入模块;140

通信接口;20

终端设备。
具体实施方式
47.redis(remote dictionary server,远程字典服务),是一种开源的、基于内存的数据结构存储,用作数据库、缓存和消息代理。在分布式系统中,redis经常被用作简单的消息队列,进行数据的分发和聚集。influxdb是一种开源的时序型数据库,在分布式系统中,经常利用其存储系统不同时间点的状态数据。将redis和influxdb组合在一起,可以构成一个分布式数据存储系统。一个可靠的分布式数据存储系统需要能够支持容灾备份,这就要求节点中的influxdb数据能够实现备份同步。但是由于节点之间往往可能存在跨idc机房的场景,导致网络不稳定,因此,节点间可靠且高效地同步数据存在障碍。
48.请参阅图1,为现有技术中进行数据存储管理的机制示意图,其中,influxdb relay是官方开源的influxdb高可用的项目。节点在接收到需要存储的数据后,会先通过前端的负载均衡器load balance分发到后端的两个influxdb relay进程,influxdb relay进程会将数据向后端的两个数据库influxdb进行写入。只要其中一个influxdb返回写入成功的信息,influxdb relay进程就会反馈成功消息。但是如果任何一个influxdb返回写入失败的错误信息,influxdb relay进程会将写入失败的数据缓存到内存中,然后不断地进行写入重试,直至写入成功为止。这就导致后续接收到的需要写入的数据在内存中堆积,一旦超过设置的最大使用内存时,数据将会被丢弃,导致数据缺失的问题。
49.上述现有技术中的数据存储管理机制,在网络异常时,可能导致数据的主动丢弃,并且,若出现系统崩溃,则内存中的数据将丢失。
50.为了解决上述现有技术中存在的问题,本申请实施例提供一种数据存储管理方法,该数据存储管理方法通过在将获取的待存储数据缓存至redis队列的同时,不断地探测
数据库是否存在网络异常,若存在网络异常,则将redis队列中的数据写入至创建的文件中,待数据库恢复至网络正常时,再将文件中的数据写入至数据库中。如此,可以避免数据在内存中的堆积而导致的数据丢弃,且可避免系统崩溃时存在的数据丢失的问题。
51.为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
52.因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
53.应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
54.在本申请的描述中,需要说明的是,在不冲突的情况下,本申请的实施例中的特征可以相互结合。
55.请参阅图2,为本申请实施例提供的数据存储管理方法的应用场景示意图,该场景中包括服务器10以及与服务器10通信连接的多个终端设备20,服务器10可与各所述终端设备20之间实现数据、信息的交互。各个终端设备20可向服务器10发送数据,服务器10可对数据进行处理并实现数据的存储。服务器10可将接收到的数据存储至数据库中,在实现数据的成功写入后,服务器10可向对应的终端设备20反馈数据写入成功的消息。
56.在本实施例中,服务器10中可部署redis,redis是一个开源的使用ansi(一种字符代码)c语言编写、支持网络、可基于内存亦可持久化的日志型、key

value数据库,并提供多种语言的api(application programming interface,应用程序接口)。本实施例中,服务器10中部署redis,且采用influxdb数据库,通过主备数据库以实现数据的备份存储。
57.图3示出了本申请实施例提供的数据存储管理方法的流程示意图,该数据存储管理方法应用于上述服务器10,应当理解,在其它实施例中,本实施例的数据存储管理方法其中部分步骤的顺序可以根据实际需要相互交换,或者其中的部分步骤也可以省略或删除。该数据存储管理方法的详细步骤介绍如下。
58.步骤s110,将获取的多个待存储数据缓存至redis队列中。
59.步骤s120,探测数据库是否出现网络异常,若出现网络异常则将所述redis队列中的待存储数据保存至创建的文件中。
60.步骤s130,在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库中。
61.本实施例中,服务器10可接收各个终端设备20所发送的待存储数据,待存储数据可以是多种类型数据,例如状态数据、日志数据、信息记录等不限。对于获取的待存储数据可缓存至redis队列中,缓存至redis队列中的数据可写入至数据库中。但是,若数据库出现网络异常,则将导致数据无法成功写入至数据库中,但是,在此情形下可能还会持续不断地从各个终端设备20处继续进行数据的接收,接收的数据将堆积在内存中。
62.因此,在向数据库写入数据的同时,不断探测数据库是否出现网络异常,若出现网
络异常,则可将redis队列中所缓存的待存储数据写入至创建的文件中。如此,redis队列中的数据将被清空,即使后续再从终端设备20处接收到数据,若数据库仍然处于网络异常状态,则再接收到的数据也将被写入至文件中,因此,不会导致redis队列中的数据超过设置的存储上限的现象。
63.若探测到数据库恢复网络正常后,则可将文件中所存储的待存储数据写入至数据库中。
64.如此,在出现网络异常的情况下,不会因为redis队列中堆积数据过多而导致数据丢弃的问题,并且,若出现系统崩溃,由于文件中的数据断电不会丢失,因此,也不会因为系统崩溃也导致数据丢失的现象。
65.在本实施例中,每条数据的写入过程具有对应的写入时长,为了能够探测数据库是否存在网络异常的情况,可预先设置一个预设时长,该预设时长可大于数据的写入时长。在将获取的待存储数据缓存至redis队列后,需要将redis队列中的数据写入至数据库中。因此,在正常情况下,可从redis队列中提取待存储数据写入数据库中,数据库在成功写入数据后,会反馈一个数据成功写入的信息,因此,若在上述预设时长内未检测到数据库的数据写入成功信息,则可判定数据库存在网络异常。
66.当然,在实施时,也可通过其他的方式探测数据库是否存在网络异常,本实施例在此不进行一一阐述。
67.请结合参阅图4,为了能够支持容灾备份,系统中数据库可包括主数据库influxdb和备用数据库influxdb,主数据库和备用数据库中存储的数据要求是一致、同步的。现有技术中,往往是采用同一个进程对主数据库和备用数据库进行数据写入,但是由于网络问题,若主数据库和备用数据库中的其中一个数据库存在异常时,由于用于执行两个数据库的进程将不断进行数据的写入重试,因此,一个数据库出现异常时,将导致影响到另一个数据库的写入。
68.基于上述考虑,在本实施例中,创建了主进程influxdbrelay和备用进程influxdbrelay,其中,主进程用于进行主数据库的数据的写入,备用进程用于进行备用数据库的数据的写入。相应地,进行数据缓存的redis队列包括与主数据库对应的主redis队列,以及与备用数据库对应的备用redis队列。
69.在进行数据缓存时,可通过主进程将获取的多个待存储数据缓存至主redis队列中,再将主redis队列中缓存的待存储数据复制备份至备用redis队列中。其中,主redis队列中缓存的数据可用于后续往主数据库中写入,备用redis队列中缓存的数据用于后续往备用数据库中写入。
70.可选地,在进行主数据库中的数据复制备份至备用数据库时,可通过redis执行lua脚本以实现。
71.在本实施例中,可分别探测主数据库和备用数据库是否存在网络异常,若探测到主数据库存在网络异常,则可以将主redis队列中缓存的待存储数据写入至创建的主文件中。在该步骤中,可通过从主redis队列中提取待存数据写入主数据库中,若在预设时长内未检测到主数据库的数据写入成功信息,则可判定主数据库存在网络异常。
72.此外,可通过从备用redis队列中提取待存储数据写入备用数据库中,若在预设时长内未检测到备用数据库的数据写入成功信息,则可判定备用数据库存在网络异常。在此
情形下,可将备用redis队列中缓存的待存储数据写入至创建的备用文件中。
73.在上述基础上,若后续探测到数据库恢复网络正常时,则可将文件中的待存储数据写入至数据库中。
74.本实施例中,在探测到主数据库恢复网络正常时,可通过主进程将主文件中的待存储数据写入至主数据库中。在该步骤中,同样地,可通过从主文件中提取待存储数据往主数据库中进行数据写入,若检测到主数据库的数据成功写入信息,则可判定主数据库恢复网络正常。
75.此外,在探测到备用数据库恢复网络正常时,可通过备用进程将备用文件中的待存储数据写入至备用数据库中。同样地,在该步骤中,可通过从备用文件中提取待存储数据网备用数据库中进行数据写入,若检测到备用数据库的数据成功写入信息,可判定备用数据库恢复网络正常。
76.请参阅图1,现有技术中在进行数据均衡时,是采用前端的数据均衡器进行处理,然后由两个进程分别执行向数据库的数据写入。这种方式导致数据库数据写入时,只能采取串行处理的方式,在数据量较多时,大大影响写入速度。
77.基于上述考虑,本实施例中,在主进程和备用进程中分别创建多个线程,例如4个、5个等不限。并且,各个线程具有对应的子队列。请参阅图5,在上述进行待存储数据的缓存时,可通过以下步骤实现:
78.步骤s111,通过主进程将获取的多个待存储数据缓存至主redis队列中。
79.步骤s112,将所述主redis队列中缓存的多个待存储数据分发至创建的多个线程中各所述线程对应的子队列。
80.步骤s113,将所述redis队列中已分发至各所述子队列的待存储数据删除。
81.本实施例中,在接收到待存储数据后,首先主进程将待存储数据缓存至主redis队列中。通过轮询的方式,可将主redis队列中的数据分发至各个线程对应的子队列中。
82.可选地,在向各个线程的子队列分发数据时,每次可分发设定数量的数据,例如100条数据等,分发至线程的子队列中的数据可从原主redis队列中删除。该步骤中进行数据分发的操作可通过redis执行一个lua脚本以实现。
83.相应地,在备用进程一侧也执行相同操作,具体地,在将主redis队列中的数据复制备份至备用redis队列后。备用进程可将备用redis队列中的数据分发至备用进程下的各个线程对应的子队列。
84.如此,则可通过各个线程以进行向数据库中执行数据写入的操作,各个线程可并行进行数据写入处理,可大大提高数据的写入速度。
85.在此基础上,在上述执行redis队列中的数据写入创建的文件时,则可通过将各个子队列中的数据写入创建的文件。
86.本实施例中,考虑到子队列中的数据量一般较小,若子队列中的数量低于预设数量时,则一般不是导致子队列中的数据堆积,因此,为了避免在执行过程中一些不必要的工作量。因此,在上述探测到数据库存在网络异常时,需要将redis队列中的数据写入至文件中,可针对各个子队列,检测子队列中的待存储数据是否超过预设数量,若超过预设数量,则执行将该子队列中的待存储数据保存至创建的文件中的步骤。
87.在此情形下,在探测到数据库恢复至网络正常时,可通过各个线程将对应的文件
中存储的待存储数据同步写入至数据库中。
88.而若子队列中的待存储数据低于预设数量时,则无需进行上述的将数据保存至文件中的动作,待数据库恢复至网络正常后,可从子队列中将缓存的待存储数据写入至数据库中。
89.为了对上述的整体流程有更清晰地了解,以下将结合图6所示,对各个线程所执行的具体过程进行介绍。
90.需要说明的是,以下各个线程为主进程下创建的各个线程以及备用进程下创建的各个线程。
91.步骤s210,获取待存储数据,将待存储数据缓存至redis队列中;
92.步骤s220,将redis队列中的待存储数据分发至创建的各个线程对应的子队列中;
93.步骤s230,探测数据库是否存在网络异常,若不存在网络异常,则执行以下步骤s240,若存在网络异常,则执行以下步骤s250;
94.步骤s240,通过各个线程将对应的子队列中的待存储数据同步写入至数据库中;
95.步骤s250,将各个子队列中的待存储数据写入创建的文件中进行保存;
96.步骤s260,探测数据库是否恢复网络正常,若恢复网络正常,执行以下步骤s270,若未恢复网络正常,则返回执行上述步骤s250;
97.步骤s270,将文件中保存的待存储数据写入至数据库中。
98.本实施例所提供的数据存储管理方法,在出现网络问题而导致数据写入失败时,通过将数据保存至创建的文件中,待网络恢复正常后,再从文件中将数据写入至数据库中。如此,可避免数据由于在内存中堆积而导致被丢弃,且避免由于系统崩溃而导致的数据丢失。
99.此外,本实施例中,在处理进程下创建多个线程以同步进行数据的写入操作,可加快数据写入速度。并且,分别由单独的处理进程以分别执行主数据库和备用数据库的数据写入,如此,可避免在某个数据库存在异常时,导致影响到另外一个数据库写入的缺陷。
100.请参阅图7,为本申请实施例提供的电子设备的示例性组件示意图。该电子设备可包括存储介质110、处理器120、机器可执行指令130(该机器可执行指令130可以为数据存储管理装置)及通信接口140。本实施例中,存储介质110与处理器120均位于电子设备中且二者分离设置。然而,应当理解的是,存储介质110也可以是独立于电子设备之外,且可以由处理器120通过总线接口来访问。可替换地,存储介质110也可以集成到处理器120中,例如,可以是高速缓存和/或通用寄存器。
101.机器可执行指令130可以理解为上述电子设备,或电子设备的处理器120,也可以理解为独立于上述电子设备或处理器120之外的在电子设备控制下实现上述数据存储管理方法的软件功能模块。
102.如图8所示,上述数据存储管理装置可以包括缓存模块131、保存模块132和写入模块133。下面分别对该数据存储管理装置的各个功能模块的功能进行详细阐述。
103.缓存模块131,用于将获取的多个待存储数据缓存至redis队列中;
104.可以理解,该缓存模块131可以用于执行上述步骤s110,关于该缓存模块131的详细实现方式可以参照上述对步骤s110有关的内容。
105.保存模块132,用于探测数据库是否出现网络异常,若出现网络异常则将所述
redis队列中的待存储数据保存至创建的文件中;
106.可以理解,该保存模块132可以用于执行上述步骤s120,关于该保存模块132的详细实现方式可以参照上述对步骤s120有关的内容。
107.写入模块133,用于在探测到所述数据库恢复至网络正常时,将所述文件中的待存储数据写入至所述数据库中。
108.可以理解,该写入模块133可以用于执行上述步骤s130,关于该写入模块133的详细实现方式可以参照上述对步骤s130有关的内容。
109.在一种可能的实现方式中,所述redis队列包括与主数据库对应的主redis队列,以及与备用数据库对应的备用redis队列;
110.上述缓存模块131用于通过以下方式进行数据缓存:
111.通过主进程将获取的多个待存储数据缓存至主redis队列中;
112.将所述主redis队列中缓存的待存储数据复制备份至备用redis队列中。
113.在一种可能的实现方式中,所述文件包括与主数据库对应的主文件,以及与备用数据库对应的备用文件;上述写入模块133用于通过以下方式进行数据写入:
114.在探测到所述主数据库恢复至网络正常时,通过所述主进程将所述主文件中的待存储数据写入至所述主数据库中;和/或
115.在探测到所述备用数据库恢复至网络正常时,通过备用进程将所述备用文件中的待存储数据写入至所述备用数据库中。
116.在一种可能的实现方式中,上述缓存模块131还可通过以下方式进行数据缓存:
117.通过主进程将获取的多个待存储数据缓存至主redis队列中;
118.将所述主redis队列中缓存的多个待存储数据分发至创建的多个线程中各所述线程对应的子队列;
119.将所述redis队列中已分发至各所述子队列的待存储数据删除。
120.在一种可能的实现方式中,上述保存模块132可用于通过以下方式进行数据保存:
121.探测数据库是否出现网络异常,若出现网络异常,针对各所述子队列,检测所述子队列中的待存储数据是否超过预设数量;
122.若超过所述预设数量,则将所述子队列中的待存储数据保存至创建的文件中。
123.在一种可能的实现方式中,上述写入模块133可以用于通过以下方式进行数据写入:
124.在探测到所述数据库恢复至网络正常时,通过各所述线程将对应的文件中存储的待存储数据同步写入至所述数据库中。
125.在一种可能的实现方式中,上述保存模块132可用于通过以下方式探测数据库是否存在网络异常:
126.从所述redis队列中提取待存储数据写入数据库中;
127.若在预设时长内未检测到所述数据库的数据写入成功信息,则判定所述数据库存在网络异常。
128.关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
129.进一步地,本申请实施例还提供一种计算机可读存储介质,计算机可读存储介质
存储有机器可执行指令,机器可执行指令被执行时实现上述实施例提供的数据存储管理方法。
130.具体地,该计算机可读存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该计算机可读存储介质上的计算机可执行指令被运行时,能够执行上述数据存储管理方法。关于计算机可读存储介质中的及其机器可执行指令被运行时,所涉及的过程,可以参照上述方法实施例中的相关说明,这里不再详述。
131.综上所述,本申请实施例提供一种数据存储管理方法、装置、电子设备和可读存储介质,通过将获取的待存储数据缓存至redis队列中,并探测数据库是否存在网络异常,若出现网络异常则将redis队列中缓存的待存储数据保存至创建的文件中,在探测到数据库恢复网络正常之后,再将文件中的待存储数据写入至数据库中。如此,在出现网络异常的情况时,通过将redis队列中的数据写入文件中,避免后续接收到的数据由于在redis队列中堆积而造成数据丢弃的问题,并且,由于文件中存储的数据断电不丢失,可避免程序崩溃时存在的数据丢失的缺陷。
132.以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1