CN108989245A - 用户数据存储方法及装置 - Google Patents

用户数据存储方法及装置 Download PDF

Info

Publication number
CN108989245A
CN108989245A CN201710406625.1A CN201710406625A CN108989245A CN 108989245 A CN108989245 A CN 108989245A CN 201710406625 A CN201710406625 A CN 201710406625A CN 108989245 A CN108989245 A CN 108989245A
Authority
CN
China
Prior art keywords
corresponding relationship
user
storage set
added
storage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710406625.1A
Other languages
English (en)
Other versions
CN108989245B (zh
Inventor
石鹏
李淼
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Cloud In Faith Network Technology Co Ltd
Original Assignee
Beijing Cloud In Faith Network Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Cloud In Faith Network Technology Co Ltd filed Critical Beijing Cloud In Faith Network Technology Co Ltd
Priority to CN201710406625.1A priority Critical patent/CN108989245B/zh
Publication of CN108989245A publication Critical patent/CN108989245A/zh
Application granted granted Critical
Publication of CN108989245B publication Critical patent/CN108989245B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/901Buffering arrangements using storage descriptor, e.g. read or write pointers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1813Arrangements for providing special services to substations for broadcast or conference, e.g. multicast for computer conferences, e.g. chat rooms
    • H04L12/1822Conducting the conference, e.g. admission, detection, selection or grouping of participants, correlating users to one or more conference sessions, prioritising transmission
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9015Buffering arrangements for supporting a linked list

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种用户数据存储方法及装置,属于网络技术领域。方法包括:接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;将第一用户标识与接收到加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中;为第一对应关系添加before指针,为第二对应关系添加after指针,before指针用于指向第二对应关系,after指针用于指向第一对应关系,第二对应关系为存储集合中除第一对应关系外未被添加after指针的对应关系。解决了将用户数据在内存中同时存储两份,这无疑大大占用了内存的问题;达到了达到存储用户数据所要具备的功能的目的的同时,减少内存的占用的效果。

Description

用户数据存储方法及装置
技术领域
本发明涉及网络技术领域,特别涉及一种用户数据存储方法及装置。
背景技术
一个直播间对应的服务器用于存储加入该直播间的用户的用户数据。由于用户出入直播间的频率较高,为了确保服务器的快速响应,服务器将加入直播间的各个用户的用户数据存入内存中,即对用户数据的增删改查等操作均采用纯内存操作。
数据结构是计算机存储、组织数据的方式。由于数据结构类型的存储集合与高效的检索算法和索引技术有关,因此采用数据结构对用户数据进行存储可以有效保证计算机的存储效率。
由于不同类型的数据结构所具备的功能不一样,因此在选择用何种类型的数据结构存储用户数据之前,需要确定存储用户数据的结构数据所要具备的功能。对于存储直播间的用户数据的数据结构而言,需要具备的功能为保存的用户数据至少包括保存用户的用户标识以及该用户加入直播间的时刻,并能按照用户加入直播间的时间先后对存储的用户数据排序。由于数据结构ConcurrentHashMap可将用户标识和该用户加入直播间的时刻分别作为关键字key和值value同时存储。但ConcurrentHashMap添加用户标识和该用户加入直播间的时刻的过程是无序的,若额外在对已添加入ConcurrentHashMap的全部用户标识和该用户加入直播间的时刻按照用户加入时刻的先后顺序进行排序,会增加处理器的处理负担,因此还需利用数据结构Stack对用户数据进行存储,Stack以堆栈的形式进行数据的添加,也就是说,Stack在添加用户数据的同时会自动按用户加入直播间的时间先后顺序对该用户数据进行排序,但Stack只能存储一种类型的数据,即无法同时保存用户的用户标识以及该用户加入直播间的时刻,因此现有技术需将用户数据同时存储在Stack和ConcurrentHashMap中,以达到存储用户数据所要具备的功能的目的。
但加入直播间,尤其是热门直播间的用户数量往往是庞大的,现有技术将用户数据在内存中同时存储两份,这无疑大大占用了内存。
发明内容
为了解决现有技术中将用户数据在内存中同时存储两份,这无疑大大占用了内存的问题,本发明实施例提供了一种用户数据存储方法及装置。所述技术方案如下:
第一方面,提供了一种用户数据存储方法,所述方法包括:
接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;
将所述第一用户标识与接收到所述加入请求的时刻作为第一对应关系,添加入所述目标聊天室标识对应的存储集合中;
为所述第一对应关系添加before指针,为第二对应关系添加向后after指针,所述before指针用于指向所述第二对应关系,所述after指针用于指向所述第一对应关系,所述第二对应关系为所述存储集合中除所述第一对应关系外未被添加after指针的对应关系。
第二方面,提供了一种用户数据存储装置,所述装置包括:
接收模块,用于接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;
第一添加模块,用于将所述第一用户标识与接收到所述加入请求的时刻作为第一对应关系,添加入所述目标聊天室标识对应的存储集合中;
第二添加模块,用于为所述第一对应关系添加before指针,为第二对应关系添加after指针,所述before指针用于指向所述第二对应关系,所述after指针用于指向所述第一对应关系,所述第二对应关系为所述存储集合中除所述第一对应关系外未被添加after指针的对应关系。
本发明实施例提供的技术方案带来的有益效果是:
通过将第一用户标识与接收到聊天室加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中,为第一对应关系添加before指针,为第二对应关系添加after指针,由于用户加入直播间的时刻即为服务器接收到该用户发送加入请求的时刻,且服务器可在存储集合中同时存储用户的用户标识以及该用户加入直播间的时刻,并在添加对应关系的同时,利用before指针和after指针为该存储集合中的对应关系排序;因此解决了将用户数据在内存中同时存储两份,这无疑大大占用了内存的问题;达到了达到存储用户数据所要具备的功能的目的的同时,减少内存的占用的效果。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1A是本发明一个实施例提供的用户数据存储方法的方法流程图;
图1B是本发明一个实施例提供的目标聊天室标识123对应的存储集合中对应关系的存储情况示意图;
图2是本发明一个实施例中提供的用户数据存储装置的结构方框图;
图3是本发明一个实施例提供的服务器的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
请参考图1A,其示出了本发明一个实施例提供的用户数据存储方法的方法流程图。该用户数据存储方法可以包括如下步骤:
步骤101,接收携带有第一用户标识和目标聊天室标识的聊天室加入请求。
在团队语音工具中的直播互动方法包括:主播客户端和用户客户端同处一个聊天室,主播客户端以直播视频与同一聊天室的各个用户客户端进行交流,而同一聊天室的用户客户端以文字信息与主播客户端以及其它用户客户端进行交流。
本实施例中,聊天室为实际应用场景中的直播间(包括视频直播间和语音直播间),本实施例不对房间的具体类型进行限定。其中,目标聊天室即为用户所要加入的聊天室。
在第一用户欲加入某一聊天室时,登陆第一用户帐号的用户客户端会向服务器发送携带有第一用户标识和目标聊天室标识的聊天室加入请求,对应的,服务器会接收到携带有第一用户标识和目标聊天室标识的聊天室加入请求。
步骤102,将第一用户标识与接收到聊天室加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中。
由于服务器对用户数据的增删改查等操作均采用纯内存操作,即服务器将第一对应关系添加入目标聊天室标识对应的存储集合中的时长非常短,完全可以忽略不计,因此,本实施例中将服务器接收到第一用户客户端发送的聊天室加入请求的时刻,判定为该第一用户加入目标聊天室的时刻。
Map类数据结构存储数据的特点之一是可存储一对数据,即将类型不同的多个数据作为一组对应关系进行存储。在本实施例中,所有聊天室对应的存储集合存储在服务器的内存中,服务器将第一用户标识作为key,将接收到聊天室加入请求的时刻作为该key对应的value,添加到目标聊天室标识对应的存储集合中。
可选的,Map类数据结构为LinkedHashMap数据结构。
步骤103,为第一对应关系添加before指针,为第二对应关系添加after指针,该before指针用于指向第二对应关系,该after指针用于指向第一对应关系,该第二对应关系为存储集合中除第一对应关系外未被添加after指针的对应关系。
当数据A通过before指针指向数据B时,说明数据A的上一个数据为数据B,当数据A通过after指针指向数据C时,说明数据B的下一个数据为数据C。
由于Map类数据结构存储数据的过程是无序的,而指针具有指向性,因此可采用为Map类数据结构中的数据添加指针的方式,使得Map类数据结构存储的数据按照预定的规则进行排序。
请参考图1B,其示出了本发明一个实施例提供的目标聊天室标识123对应的存储集合中对应关系的存储情况示意图。其中,虚线箭头为before指针,实线箭头为after指针。
图1B(1)所示,after指针的流向为:(用户标识A,接收到聊天室加入请求的时刻a),(用户标识B,接收到聊天室加入请求的时刻b),(用户标识C,接收到聊天室加入请求的时刻c),before指针的流向为:(用户标识C,接收到聊天室加入请求的时刻c),(用户标识B,接收到聊天室加入请求的时刻b),(用户标识A,接收到聊天室加入请求的时刻a)。其中,(用户标识A,接收到聊天室加入请求的时刻a)未被添加before指针,(用户标识C,接收到聊天室加入请求的时刻c)未被添加after指针。
由此可知,对应关系由先至后(由早至晚)被添加入存储集合的顺序为:(用户标识A,接收到聊天室加入请求的时刻a),(用户标识B,接收到聊天室加入请求的时刻b),(用户标识C,接收到聊天室加入请求的时刻c)。其中,最早被添加入存储集合的对应关系未被添加before指针,最晚被添加入存储集合的对应关系未被添加after指针。
图1B(2)所示,当服务器接收到携带有用户标识D和目标聊天室标识123的聊天室加入请求时,该服务器将对应关系(用户标识D,接收到聊天室加入请求的时刻d),添加入目标聊天室标识123对应的存储集合中,为(用户标识D,接收到聊天室加入请求的时刻d)添加before指针,由于(用户标识D,接收到聊天室加入请求的时刻d)是在(用户标识C,接收到聊天室加入请求的时刻c)之后被添加入存储集合中的,因此,(用户标识D,接收到聊天室加入请求的时刻d)的before指针指向(用户标识C,接收到聊天室加入请求的时刻c),即before指针用于指向存储集合中除(用户标识D,接收到聊天室加入请求的时刻d)外未被添加after指针的对应关系。
在为(用户标识D,接收到聊天室加入请求的时刻d)添加before指针之后,(用户标识D,接收到聊天室加入请求的时刻d),(用户标识C,接收到聊天室加入请求的时刻c),(用户标识B,接收到聊天室加入请求的时刻b),(用户标识A,接收到聊天室加入请求的时刻a)串成一个逆向链表,同理,为第二对应关系添加after指针后,(用户标识A,接收到聊天室加入请求的时刻a),(用户标识B,接收到聊天室加入请求的时刻b),(用户标识C,接收到聊天室加入请求的时刻c),(用户标识D,接收到聊天室加入请求的时刻d)串成一个正向链表。
综上所述,本发明实施例提供的用户数据存储方法,通过将第一用户标识与接收到聊天室加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中,为第一对应关系添加before指针,为第二对应关系添加after指针,由于用户加入直播间的时刻即为服务器接收到该用户发送加入请求的时刻,且服务器可在存储集合中同时存储用户的用户标识以及该用户加入直播间的时刻,并在添加对应关系的同时,利用before指针和after指针为该存储集合中的对应关系排序;因此解决了将用户数据在内存中同时存储两份,这无疑大大占用了内存的问题;达到了达到存储用户数据所要具备的功能的目的的同时,减少内存的占用的效果。
在一种可能实现的方式中,由于存储集合中每个对应关系能串成一个双向链表,即服务器可以利用before指针,遍历存储集合中所有的对应关系,也可以利用after指针,遍历存储集合中所有的对应关系。因此,服务器能获取到加入聊天室中满足预定条件的用户,比如服务器需要获取较早加入聊天室的用户,和获取较晚加入聊天室的用户。
步骤A1,当接收正向获取第一预定数量的用户标识的正向获取请求时,从存储集合未被添加before指针的对应关系开始,根据after指针的指向正向遍历存储集合,依次获取第一预定数量的对应关系,在第一预定数量的对应关系中获取第一预定数量的用户标识。
存储集合未被添加before指针的对应关系,说明在该对应关系之前存储集合中未存储任何对应关系,即该对应关系为存储集合中最早被添加入存储集合的对应关系。
正向获取即按照时间由先至后的顺序获取。正向获取第一预定数量的用户标识,换句话说是,按照时间由先至后的顺序获取第一预订数量的用户标识,即获取较早加入聊天室的用户标识。
由于after指针是从加入存储集合时刻早的对应关系指向加入存储集合时刻晚的对应关系,因此after指针的指向可认定为正向。同理,由于before指针是从加入存储集合时刻晚的对应关系指向加入存储集合时刻早的对应关系,因此before指针的指向可认定为逆向。
比如,当服务器接收到的正向获取请求要求获取前10个最早加入聊天室的用户的用户标识时,该服务器从聊天室对应的存储集合未被添加before指针的对应关系(即最早加入聊天室的对应关系)开始,根据after指针的指向正向遍历存储集合,依次获取10个对应关系,在10个对应关系中获取10个用户标识。
步骤A2,当接收逆向获取第二预定数量的用户标识的逆向获取请求时,从存储集合未被添加after指针的对应关系开始,根据before指针的指向逆向遍历存储集合,依次获取第二预定数量的对应关系,得到第二预定数量的用户标识。
比如,当服务器接收到的逆向获取请求要求获取后5个最晚加入聊天室的用户的用户标识时,该服务器从聊天室对应的存储集合未被添加after指针的对应关系(即最晚加入聊天室的对应关系)开始,根据before指针的指向逆向遍历存储集合,依次获取5个对应关系,在5个对应关系中获取5个用户标识。
可选的,当Map类数据结构仅提供了正向遍历的API,未提供逆向遍历的API时,服务器在对Map类数据结构进行正向遍历,即服务器只能快速获取到最早添加入Map类数据结构中的对应关系,而无法快速获取到最晚添加入Map类数据结构中的对应关系。
本实施例中,可通过修改Map类数据结构的源代码,为Map类数据结构提供一个从后向前遍历的API,其中,具体的实现代码为:
LinkedHashMap有个内部类LinkedHashIterator先将其访问属性改成public的,在该类中添加成员变量:
Entry<K,V>preEntry=header.before;
然后添加是否前面还有元素的方法:
public boolean hasPrevious(){
return preEntry!=header;
}
最后利用LinkedHashMap的双向链表添加遍历前一个元素的方法:
其中,元素即为本实施所述的对应关系。
在一种可能实现的方式中,每个聊天室均对应有一个初始值为0的成员变量,该成员变量用于记录存储集合中记录的对应关系的总数(即已加入该存储集合对应的聊天室的用户总数)。
步骤B1,当向存储集合添加一组对应关系时,将成员变量加1。
当服务器向存储集合添加一组对应关系时,该存储集合记录的对应关系的总数加1,服务器则将该存储集合对应的成员变量加1。
需要说明的是,在步骤102之后,服务器执行步骤B1。
步骤B2,当从存储集合删除一组对应关系时,将成员变量减1。
在某一用户欲退出某一聊天室时,登陆用户帐号的用户客户端会向服务器发送携带有用户标识和目标聊天室标识的聊天室退出请求。当服务器接收到该聊天室退出请求后,会将该用户标识所在的对应关系从存储集合中删除。当服务器从存储集合删除一组对应关系时,该存储集合记录的对应关系的总数减1,服务器则将该存储集合对应的成员变量减1。
在一种可能实现的方式中,若服务器需要在Stack数据结构中查找某个对应关系,该服务器需要从Stack数据结构中的第一组对应关系开始遍历查找,而Map类数据结构的优点是可利用hash算法对对应关系进行快速查找。
步骤C1,当接收到携带有第二用户标识和目标聊天室标识的用户查询请求时,利用哈希算法在存储集合中查询第二用户标识所在的对应关系,判定第二用户标识所在对应关系是否在存储集合中。
当服务器将一组对应关系(key,value)添加入存储集合中的具体过程为:先将key通过一个预定的hash算法转换成一个整型数字,并该数字对该(key)的长度进行取余,得到的取余结果则为该(key)的下标,再将value存储在以该数字为下标的(key)中,得到(key,value)。
当服务器接收到携带有第二用户标识和目标聊天室标识的用户查询请求,对存储集合中的对应关系进行查询时,会利用该预定的hash算法将第二用户标识转换为数组的下标,并对存储集合中下标与该数组的下标相同的对应关系进行定位,从而判定第二用户标识所在对应关系是否在存储集合中。
步骤C21,当第二用户标识所在对应关系在存储集合中时,返回第一指示消息,第一指示消息用于指示第二用户标识对应的用户在目标聊天室标识对应的目标聊天室中。
若服务器在存储集合中定位到下标与该数组的下标相同的对应关系,则判定第二用户标识所在对应关系在存储集合中。
步骤C22,当第二用户标识所在对应关系不在存储集合中时,返回第二指示消息,第二指示消息用于指示第二用户标识对应的用户不在目标聊天室标识对应的目标聊天室中。
若服务器在存储集合中未定位到下标与该数组的下标相同的对应关系,则判定第二用户标识所不在对应关系在存储集合中。
在一种可能实现的方式中,若服务器的一个线程在添加或删除存储集合中的对应关系的同时,服务器的另一个线程正在遍历存储集合,则可能会产生ConcurrentModificationException异常的现象。为了避免出现ConcurrentModificationException异常,需要确保遍历存储集合的操作和添加或删除存储集合中的对应关系的操作不同时进行。
步骤D1,当接收到正向获取请求或者逆向获取请求时,为存储集合添加读锁,被添加读锁后的存储集合只能被执行正向遍历和逆向遍历的操作。
由于正向获取请求或者逆向获取请求是用于指示服务器执行遍历存储集合操作的请求,因此当服务器接收到正向获取请求或者逆向获取请求时,为存储集合添加读锁(即ReentrantReadWriteLock.ReadLock),使得该存储集合只能被执行正向遍历和逆向遍历的操作。
为存储集合添加读锁的目的除了保证存储集合只能被执行正向遍历和逆向遍历的操作,还保证服务器对存储集合的读线程操作(即遍历存储集合操作)的安全性。
步骤D2,当向存储集合添加一组对应关系时,或者当从存储集合删除一组对应关系时,为存储集合添加写锁,被添加写锁后的存储集合只能被执行对应关系的添加和删除操作。
当服务器向存储集合添加一组对应关系时,或者从存储集合删除一组对应关系时,为存储集合添加写锁(即ReentrantReadWriteLock.WriteLock),使得该存储集合只能被执行对应关系的添加和删除的操作。
为存储集合添加写锁的目的除了保证存储集合只能被执行对应关系的添加和删除的操作,还保证服务器对存储集合的写线程操作(即对应关系的添加和删除操作)的安全性。
可选的,对与需要频繁创建和销毁读锁或写锁的场景(比如用户对直播间的频繁加入或者退出,以及用户对直播间的其他用户进行频繁的查询),为了避免读锁或写锁的频繁创建和销毁造成服务器不必要的消耗,在服务器初始化时,创建预定数量的ReentrantReadWriteLock.ReadLock对象和ReentrantReadWriteLock.WriteLock对象,当接收到正向获取请求或者逆向获取请求时,直接调用一个ReentrantReadWriteLock.ReadLock对象为存储集合添加读锁,当向存储集合添加一组对应关系时,或者当从存储集合删除一组对应关系时,直接调用一个ReentrantReadWriteLock.WriteLock对象为存储集合添加写锁,当服务器关闭时,对所创建的ReentrantReadWriteLock.ReadLock对象和ReentrantReadWriteLock.WriteLock对象进行销毁,以此达到避免读锁或写锁的频繁创建和销毁造成服务器不必要的消耗,提高服务器性能的目的。
下述为本发明装置实施例,对于装置实施例中未详尽描述的细节,可以参考上述一一对应的方法实施例。
请参考图2,图2是本发明一个实施例中提供的用户数据存储装置的结构方框图。该装置包括:接收模块201、第一添加模块202和第二添加模块203。
接收模块201,用于接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;
第一添加模块202,用于将第一用户标识与接收到聊天室加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中;
第二添加模块203,用于为第一对应关系添加before指针,为第二对应关系添加after指针,before指针用于指向第二对应关系,after指针用于指向第一对应关系,第二对应关系为存储集合中除第一对应关系外未被添加after指针的对应关系。
在一种可能的实现方式中,该装置还包括:
第一获取模块,用于当接收正向获取第一预定数量的用户标识的正向获取请求时,从存储集合未被添加before指针的对应关系开始,根据after指针的指向正向遍历存储集合,依次获取第一预定数量的对应关系,在第一预定数量的对应关系中获取第一预定数量的用户标识;
第二获取模块,用于当接收逆向获取第二预定数量的用户标识的逆向获取请求时,从存储集合未被添加after指针的对应关系开始,根据before指针的指向逆向遍历存储集合,依次获取第二预定数量的对应关系,得到第二预定数量的用户标识。
在一种可能的实现方式中,存储集合对应有成员变量,该成员变量用于记录存储集合中记录的对应关系的总数,该成员变量的初始值为0,该装置还包括:
第一计算模块,用于当向存储集合添加一组对应关系时,将成员变量加1;
第二计算模块,用于当从存储集合删除一组对应关系时,将成员变量减1。
在一种可能实现的方式中,该装置还包括:
判定模块,用于当接收到携带有第二用户标识和目标聊天室标识的用户查询请求时,利用哈希算法在存储集合中查询第二用户标识所在的对应关系,判定第二用户标识所在对应关系是否在存储集合中;
第一返回模块,用于当第二用户标识所在对应关系在存储集合中时,返回第一指示消息,第一指示消息用于指示第二用户标识对应的用户在目标聊天室标识对应的目标聊天室中;
第二返回模块,用于当第二用户标识所在对应关系不在存储集合中时,返回第二指示消息,第二指示消息用于指示第二用户标识对应的用户不在目标聊天室标识对应的目标聊天室中。
在一种可能实现的方式中,该装置还包括:
第一添加模块,用于当接收到正向获取请求或者逆向获取请求时,为存储集合添加读锁,被添加读锁后的存储集合只能被执行正向遍历和逆向遍历的操作;
第二添加模块,用于当向存储集合添加一组对应关系时,或者当从存储集合删除一组对应关系时,为存储集合添加写锁,被添加写锁后的存储集合只能被执行对应关系的添加和删除操作。
综上所述,本发明实施例提供的用户数据存储装置,通过将第一用户标识与接收到聊天室加入请求的时刻作为第一对应关系,添加入目标聊天室标识对应的存储集合中,为第一对应关系添加before指针,为第二对应关系添加after指针,由于用户加入直播间的时刻即为服务器接收到该用户发送加入请求的时刻,且服务器可在存储集合中同时存储用户的用户标识以及该用户加入直播间的时刻,并在添加对应关系的同时,利用before指针和after指针为该存储集合中的对应关系排序;因此解决了将用户数据在内存中同时存储两份,这无疑大大占用了内存的问题;达到了达到存储用户数据所要具备的功能的目的的同时,减少内存的占用的效果。
需要说明的是:上述实施例中提供的用户数据存储装置在存储用户数据时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将电子设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的用户数据存储装置与用户数据存储方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图3是本发明一个实施例提供的服务器的结构示意图。具体来讲:服务器300包括中央处理单元(英文:Central Processing Unit,简称:CPU)301、包括随机存取存储器(RAM)302和只读存储器(ROM)303的系统存储器304,以及连接系统存储器304和中央处理单元301的系统总线305。所述服务器300还包括帮助计算机内的各个器件之间传输信息的基本输入/输出系统(I/O系统)306,和用于存储操作系统313、应用程序314和其他程序模块315的大容量存储设备307。
所述基本输入/输出系统306包括有用于显示信息的显示器308和用于用户输入信息的诸如鼠标、键盘之类的输入设备309。其中所述显示器308和输入设备309都通过连接到系统总线305的输入/输出控制器310连接到中央处理单元301。所述基本输入/输出系统306还可以包括输入输出控制器310以用于接收和处理来自键盘、鼠标、或电子触控笔等多个其他设备的输入。类似地,输入/输出控制器310还提供输出到显示屏、打印机或其他类型的输出设备。
所述大容量存储设备307通过连接到系统总线305的大容量存储控制器(未示出)连接到中央处理单元301。所述大容量存储设备307及其相关联的计算机可读介质为服务器300提供非易失性存储。也就是说,所述大容量存储设备307可以包括诸如硬盘或者只读光盘(英文:Compact Disc Read-Only Memory,简称:CD-ROM)驱动器之类的计算机可读介质(未示出)。
不失一般性,所述计算机可读介质可以包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括RAM、ROM、可擦除可编程只读存储器(英文:erasable programmable read-only memory,简称:EPROM)、电可擦除可编程只读存储器(英文:electrically erasable programmableread-only memory,简称:EEPROM)、闪存或其他固态存储其技术,CD-ROM、数字通用光盘(英文:Digital Versatile Disc,简称:DVD)或其他光学存储、磁带盒、磁带、磁盘存储或其他磁性存储设备。当然,本领域技术人员可知所述计算机存储介质不局限于上述几种。上述的系统存储器304和大容量存储设备307可以统称为存储器。
根据本发明的各种实施例,所述服务器300还可以通过诸如因特网等网络连接到网络上的远程计算机运行。也即服务器300可以通过连接在所述系统总线305上的网络接口单元311连接到网络312,或者说,也可以使用网络接口单元311来连接到其他类型的网络或远程计算机系统(未示出)。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来请求相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种用户数据存储方法,其特征在于,所述方法包括:
接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;
将所述第一用户标识与接收到所述加入请求的时刻作为第一对应关系,添加入所述目标聊天室标识对应的存储集合中;
为所述第一对应关系添加向前before指针,为第二对应关系添加向后after指针,所述before指针用于指向所述第二对应关系,所述after指针用于指向所述第一对应关系,所述第二对应关系为所述存储集合中除所述第一对应关系外未被添加after指针的对应关系。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收正向获取第一预定数量的用户标识的正向获取请求时,从所述存储集合未被添加before指针的对应关系开始,根据after指针的指向正向遍历所述存储集合,依次获取所述第一预定数量的对应关系,在所述第一预定数量的对应关系中获取所述第一预定数量的用户标识;
当接收逆向获取第二预定数量的用户标识的逆向获取请求时,从所述存储集合未被添加after指针的对应关系开始,根据before指针的指向逆向遍历所述存储集合,依次获取所述第二预定数量的对应关系,得到所述第二预定数量的用户标识。
3.根据权利要求1所述的方法,其特征在于,所述存储集合对应有成员变量,所述成员变量用于记录所述存储集合中记录的对应关系的总数,所述成员变量的初始值为0,所述方法还包括:
当向所述存储集合添加一组对应关系时,将所述成员变量加1;
当从所述存储集合删除一组对应关系时,将所述成员变量减1。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当接收到携带有第二用户标识和目标聊天室标识的用户查询请求时,利用哈希算法在所述存储集合中查询所述第二用户标识所在的对应关系,判定所述第二用户标识所在对应关系是否在所述存储集合中;
当所述第二用户标识所在对应关系在所述存储集合中时,返回第一指示消息,所述第一指示消息用于指示所述第二用户标识对应的用户在所述目标聊天室标识对应的目标聊天室中;
当所述第二用户标识所在对应关系不在存储集合中时,返回第二指示消息,所述第二指示消息用于指示所述第二用户标识对应的用户不在所述目标聊天室标识对应的目标聊天室中。
5.根据权利要求1-4任一所述的方法,其特征在于,所述方法还包括:
当接收到正向获取请求或者逆向获取请求时,为所述存储集合添加读锁,被添加读锁后的所述存储集合只能被执行正向遍历和逆向遍历的操作;
当向所述存储集合添加一组对应关系时,或者当从所述存储集合删除一组对应关系时,为所述存储集合添加写锁,被添加写锁后的所述存储集合只能被执行对应关系的添加和删除操作。
6.一种用户数据存储装置,其特征在于,所述装置包括:
接收模块,用于接收携带有第一用户标识和目标聊天室标识的聊天室加入请求;
第一添加模块,用于将所述第一用户标识与接收到所述加入请求的时刻作为第一对应关系,添加入所述目标聊天室标识对应的存储集合中;
第二添加模块,用于为所述第一对应关系添加before指针,为第二对应关系添加after指针,所述before指针用于指向所述第二对应关系,所述after指针用于指向所述第一对应关系,所述第二对应关系为所述存储集合中除所述第一对应关系外未被添加after指针的对应关系。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
第一获取模块,用于当接收正向获取第一预定数量的用户标识的正向获取请求时,从所述存储集合未被添加before指针的对应关系开始,根据after指针的指向正向遍历所述存储集合,依次获取所述第一预定数量的对应关系,在所述第一预定数量的对应关系中获取所述第一预定数量的用户标识;
第二获取模块,用于当接收逆向获取第二预定数量的用户标识的逆向获取请求时,从所述存储集合未被添加after指针的对应关系开始,根据before指针的指向逆向遍历所述存储集合,依次获取所述第二预定数量的对应关系,得到所述第二预定数量的用户标识。
8.根据权利要求6所述的装置,其特征在于,所述存储集合对应有成员变量,所述成员变量用于记录所述存储集合中记录的对应关系的总数,所述成员变量的初始值为0,所述装置还包括:
第一计算模块,用于当向所述存储集合添加一组对应关系时,将所述成员变量加1;
第二计算模块,用于当从所述存储集合删除一组对应关系时,将所述成员变量减1。
9.根据权利要求6所述的装置,其特征在于,所述装置还包括:
判定模块,用于当接收到携带有第二用户标识和目标聊天室标识的用户查询请求时,利用哈希算法在所述存储集合中查询所述第二用户标识所在的对应关系,判定所述第二用户标识所在对应关系是否在所述存储集合中;
第一返回模块,用于当所述第二用户标识所在对应关系在所述存储集合中时,返回第一指示消息,所述第一指示消息用于指示所述第二用户标识对应的用户在所述目标聊天室标识对应的目标聊天室中;
第二返回模块,用于当所述第二用户标识所在对应关系不在存储集合中时,返回第二指示消息,所述第二指示消息用于指示所述第二用户标识对应的用户不在所述目标聊天室标识对应的目标聊天室中。
10.根据权利要求6-9任一所述的装置,其特征在于,所述装置还包括:
第一添加模块,用于当接收到正向获取请求或者逆向获取请求时,为所述存储集合添加读锁,被添加读锁后的所述存储集合只能被执行正向遍历和逆向遍历的操作;
第二添加模块,用于当向所述存储集合添加一组对应关系时,或者当从所述存储集合删除一组对应关系时,为所述存储集合添加写锁,被添加写锁后的所述存储集合只能被执行对应关系的添加和删除操作。
CN201710406625.1A 2017-06-02 2017-06-02 用户数据存储方法及装置 Active CN108989245B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710406625.1A CN108989245B (zh) 2017-06-02 2017-06-02 用户数据存储方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710406625.1A CN108989245B (zh) 2017-06-02 2017-06-02 用户数据存储方法及装置

Publications (2)

Publication Number Publication Date
CN108989245A true CN108989245A (zh) 2018-12-11
CN108989245B CN108989245B (zh) 2022-03-29

Family

ID=64501134

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710406625.1A Active CN108989245B (zh) 2017-06-02 2017-06-02 用户数据存储方法及装置

Country Status (1)

Country Link
CN (1) CN108989245B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109769027A (zh) * 2019-01-25 2019-05-17 广州华多网络科技有限公司 一种消息推送方法、装置及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102117278A (zh) * 2009-12-31 2011-07-06 联想(北京)有限公司 链表的创建方法及系统、数据的查找方法及系统
CN102592212A (zh) * 2010-12-14 2012-07-18 微软公司 会议生存期管理
CN105095261A (zh) * 2014-05-08 2015-11-25 北京奇虎科技有限公司 数据插入方法和装置
CN105260475A (zh) * 2015-10-30 2016-01-20 努比亚技术有限公司 一种数据查找方法、数据存储方法及相应装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102117278A (zh) * 2009-12-31 2011-07-06 联想(北京)有限公司 链表的创建方法及系统、数据的查找方法及系统
CN102592212A (zh) * 2010-12-14 2012-07-18 微软公司 会议生存期管理
CN105095261A (zh) * 2014-05-08 2015-11-25 北京奇虎科技有限公司 数据插入方法和装置
CN105260475A (zh) * 2015-10-30 2016-01-20 努比亚技术有限公司 一种数据查找方法、数据存储方法及相应装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘华富 等: "《程序设计基础实例化翻转教程 C语言》", 31 December 2016 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109769027A (zh) * 2019-01-25 2019-05-17 广州华多网络科技有限公司 一种消息推送方法、装置及设备

Also Published As

Publication number Publication date
CN108989245B (zh) 2022-03-29

Similar Documents

Publication Publication Date Title
US11645183B1 (en) User interface for correlation of virtual machine information and storage information
US11074560B2 (en) Tracking processed machine data
US11275667B2 (en) Handling of workload surges in a software application
KR101719500B1 (ko) 캐싱된 플로우들에 기초한 가속
CN112685499B (zh) 一种工作业务流的流程数据同步方法、装置及设备
US20200145362A1 (en) Large data management in communication applications through multiple mailboxes
KR102452250B1 (ko) 오프체인 데이터 저장 방법 및 장치
CN111400334B (zh) 数据处理方法、装置、存储介质及电子装置
CN111831618A (zh) 数据写入方法、数据读取方法、装置、设备及存储介质
US11775480B2 (en) Method and system for deleting obsolete files from a file system
CN110287201A (zh) 数据访问方法、装置、设备及存储介质
KR101621385B1 (ko) 클라우드 스토리지 서비스의 파일 검색 시스템 및 방법, 및 파일 제어 방법
WO2016197814A1 (zh) 垃圾文件识别及管理方法、识别装置、管理装置和终端
CN105893471B (zh) 一种数据处理方法及电子设备
WO2024027328A1 (zh) 基于零信任数据访问控制系统的数据处理方法
US11728928B2 (en) Securely sharing public and private blockchain data
CN106815232A (zh) 目录管理方法、装置及系统
CN112035413B (zh) 元数据信息查询方法、装置及存储介质
JP6501924B2 (ja) アラートを解除する方法及びサーバー
CN108989245A (zh) 用户数据存储方法及装置
CN112269763A (zh) 一种文件聚合方法及相关装置
CN113835613B (zh) 一种文件读取方法、装置、电子设备和存储介质
CN103488768A (zh) 一种基于云计算的文件管理方法及系统
CN108628540A (zh) 数据存储装置及方法
CN109460392B (zh) 日志文件采集方法、装置、可读存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant