即時通訊鍵-值數據下發方法、服務器、客戶端及系統的制作方法
【專利摘要】本發明涉及一種即時通訊鍵-值數據下發方法、服務器、客戶端及系統,其方法包括:服務器接收客戶端在登錄時發送的拉取鍵-值數據的請求包;請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;根據請求包所攜帶的參數,選用預設的數據下發機制,向客戶端下發全量鍵-值數據或向客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。本發明實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
【專利說明】即時通訊鍵-值數據下發方法、服務器、客戶端及系統
【技術領域】
[0001]本發明涉及即時通訊【技術領域】,尤其涉及一種即時通訊鍵-值數據下發方法、月艮務器、客戶端及系統。
【背景技術】
[0002]在即時通信領域,許多業務場景需要使用到key-value (鍵-值)數據下發技術,例如某個用戶登錄即時通訊客戶端,需要從服務器拉取好友列表,好友列表包括好友的賬號和描述賬號屬性的數據(例如成為好友的時間),該賬號作為唯一標識可以抽象為key,與賬號相關聯的數據抽象為value,好友列表中的每個好友對應一條鍵-值數據記錄,這些鍵-值數據記錄則構成該用戶的鍵-值數據。
[0003]目前,在即時通信領域,通常采用以下兩種方式實現鍵-值數據下發:
[0004]1、用戶每次登錄即時通信客戶端時,從服務器拉取全量的鍵-值數據。
[0005]2、為鍵-值數據附加一個序列號,服務器的鍵-值數據每變化一次,序列號加I。在客戶端首次登錄時,將鍵-值數據和序列號從服務器拉取下來并緩存在客戶端,客戶端下次登錄時,將緩存的序列號提交給服務器,服務器判斷客戶端提交的序列號和本地的序列號是否一致,如果一致,服務器則不下發鍵-值數據,如果不一致,服務器下發全量的鍵-值數據和最新的序列號,客戶端接收到后緩存在本地。
[0006]上述兩種鍵-值數據下發方式中,對于即時通信客戶端每次登錄就從服務器拉取全量鍵-值數據的方案,其實現簡單,客戶端不需要緩存服務器的數據,但是大多數時候用戶的鍵-值數據都沒有變化,若每次登錄都拉取全量的鍵-值數據,則對于具有海量用戶的即時通信服務,會導致極大的網絡帶寬浪費。
[0007]對于為鍵-值數據附加一個序列號的方法,雖然能避免每次客戶端登錄都全量拉取鍵-值數據的網絡帶寬浪費,但是,隨著即時通信服務的發展,用戶的鍵-值數據越來越豐富,假定某個用戶有5000條鍵-值數據記錄,每條鍵-值數據記錄平均長度為20字節,則鍵-值數據的總長度約為100KB,只要其中一條20字節長的鍵-值數據變化,序列號加1,則下次客戶端登錄時要拉取100KB的全量數據,而其中只有20個字節的數據真正需要下發,由此造成網絡帶寬利用率很低。
【發明內容】
[0008]本發明實施例提供一種即時通訊鍵-值數據下發方法、服務器、客戶端及系統,旨在實現鍵-值數據的增量下發,提高網絡帶寬利用率。
[0009]本發明實施例提出一種即時通訊鍵-值數據下發方法,包括:
[0010]服務器接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0011]根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
[0012]本發明實施例還提出一種下發即時通訊鍵-值數據的服務器,包括:
[0013]請求接收模塊,用于接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0014]下發處理模塊,用于根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
[0015]本發明實施例還提出一種即時通訊鍵-值數據下發方法,包括:
[0016]發送拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0017]接收服務器根據所述請求包所攜帶的參數下發的全量鍵-值數據或增量鍵-值數據;
[0018]根據所述服務器的返回結果更新本地緩存數據。
[0019]本發明實施例還提出一種下發即時通訊鍵-值數據的系統,包括客戶端和如上所述的服務器,其中:
[0020]所述客戶端,用于在登錄時向所述服務器發送拉取鍵-值數據的請求包;以及根據所述服務器的返回結果,更新本地緩存數據并展現給用戶。
[0021]本發明實施例提出的一種即時通訊鍵-值數據下發方法、服務器、客戶端及系統,服務器在接收客戶端在登錄時發送的拉取鍵-值數據的請求包時;根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,從而實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
【專利附圖】
【附圖說明】
[0022]圖1是本發明即時通訊鍵-值數據下發方法第一實施例的流程示意圖;
[0023]圖2是本發明實施例中根據請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據的流程示意圖;
[0024]圖3a是本發明實施例中服務器確定上次拉取以來修改或新增的鍵-值數據的一種流程示意圖;
[0025]圖3b是本發明實施例中服務器確定上次拉取以來修改或新增的鍵-值數據的另一種流程示意圖;
[0026]圖3c是本發明實施例中服務器確定并發送上次拉取以來刪除過的鍵-值數據的key的一種流程示意圖;
[0027]圖4是本發明即時通訊鍵-值數據下發方法第二實施例的流程示意圖;
[0028]圖5是本發明下發即時通訊鍵-值數據的服務器較佳實施例的功能模塊示意圖;
[0029]圖6是本發明下發即時通訊鍵-值數據的服務器較佳實施例中下發處理模塊的功能豐旲塊不意圖;
[0030]圖7是本發明下發即時通訊鍵-值數據的系統較佳實施例的功能模塊示意圖。
[0031]為了使本發明的技術方案更加清楚、明了,下面將結合附圖作進一步詳述。
【具體實施方式】
[0032]本發明實施例解決方案主要是:服務器在接收客戶端在登錄時發送的拉取鍵-值數據的請求包時;根據請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,由此可以實現鍵-值數據的增量下發,減少網絡帶寬浪費,并保證即時通信客戶端和服務器的數據一致性。
[0033]本發明實施例中所涉及的技術術語包括:
[0034]全量下發:服務器向客戶端下發用戶的鍵-值數據時,將所有的鍵-值數據記錄都下發。
[0035]增量下發:服務器向客戶端下發用戶的鍵-值數據時,只下發新增、修改和刪除的鍵-值數據記錄。
[0036]如圖1所示,本發明第一實施例從服務器側提出一種即時通訊鍵-值數據下發方法,包括:
[0037]步驟S101,服務器接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0038]本實施例方法運行環境涉及即時通訊客戶端以及服務器,可以實現服務器鍵-值數據的增量下發,以解決鍵-值數據下發過程中網絡帶寬占用的問題。
[0039]首先,客戶端在登錄時,向服務器發送拉取鍵-值數據的請求包,該請求包至少需要攜帶全量拉取時間戳、增量拉取時間戳和數據變更序列號,同時還可以攜帶二維校驗和參數,以便服務器根據請求包所攜帶的參數,選用相應的數據下發機制向客戶端下發鍵-值數據。
[0040]步驟S102,根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
[0041]本實施例中服務器設定的數據下發機制包括使用時間戳的全量數據下發機制、使用時間戳和序列號的增量數據下發機制,以及二維校驗和計算機制、將刪除的key在服務器進行緩存的機制等。
[0042]其中,對于使用時間戳的全量數據下發機制,在客戶端首次登錄時,從服務器拉取全量鍵-值數據,并記錄全量拉取的時間戳,以后以首次全量拉取的時間戳為基準,每隔全量拉取時間間隔tl,重新完成一次全量拉取。上述全量拉取時間間隔tl可以根據實際情況來設定。
[0043]對于使用時間戳和序列號的增量數據下發機制,在設定的兩次全量拉取之間的增量時間間隔t2中,根據條件判斷是否使用增量拉取。若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號不一致,則直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取的時間距離當前時間的間隔大于或等于t2時,直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取距離當前時間的間隔小于t2時,不發起本次增量拉取數據。本發明實施例中增量數據的含義解釋為新增、修改或刪除的鍵-值數據。
[0044]上述二維校驗和計算機制是指服務器在增量數據下發過程中,盡力將有變化的鍵-值數據下發給客戶端,對于不修改的鍵-值數據則不下發給客戶端。
[0045]上述將刪除的key在服務器進行緩存的機制是指,每次增量拉取的時候,將上次增量拉取和本次增量拉取時間間隔內被刪除的key返回給客戶端,由客戶端將對應的鍵-值數據刪除。
[0046]需要說明的是,全量數據下發機制除了在首次登錄過程中獲取全量鍵-值數據夕卜,還作為增量數據下發機制的保護邏輯,在實際實現中,增量數據下發機制如果出錯,會導致客戶端獲取到的鍵-值數據錯亂,若定期進行全量數據下發,則可以修復錯亂的數據。
[0047]客戶端在接收到服務器返回的結果后,更新本地緩存數據并展現給用戶。
[0048]具體地,上述步驟S102:根據請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據可以包括:
[0049]步驟S1021,判斷所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置是否為空;若是,則進入步驟S1022 ;否則,進入步驟S1023 ;
[0050]若客戶端是首次發送請求,則本地未緩存任何數據,請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置為空。
[0051]步驟S1022,服務器向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳;
[0052]步驟S1023,將所述請求包中的全量拉取時間戳與當前時間進行對比,獲取請求包中的全量拉取時間戳與當前時間之間的時間間隔;進入步驟S1024 ;
[0053]步驟S1024,判斷所述全量拉取時間戳與當前時間之間的時間間隔是否大于或等于預設的全量拉取時間間隔tl,若是,則進入步驟S1022 ;否則,進入步驟S1025 ;
[0054]步驟S1025,判斷所述請求包中的數據變更序列號與所述服務器本地保存的數據變更序列號是否一致;若不一致,則進入步驟S1026 ;否則,進入步驟S1027 ;
[0055]步驟S1026,所述服務器向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;
[0056]步驟S1027,將所述請求包中的增量拉取時間戳與當前時間進行對比,獲取請求包中的增量拉取時間戳與當前時間之間的時間間隔;進入步驟S1028 ;
[0057]步驟S1028,判斷所述增量拉取時間戳與當前時間之間的時間間隔是否大于或等于預設的兩次全量拉取之間的增量時間間隔t2,若是,則進入步驟S1026 ;否則,進入步驟S1029 ;
[0058]步驟S1029,所述服務器不向所述客戶端下發鍵-值數據。
[0059]進一步地,如前所述,客戶端發送的請求包中還可以攜帶有二維校驗和參數;在此種情形下,在所述服務器向所述客戶端下發全量鍵-值數據時,還同時下發根據所述全量鍵-值數據計算出的二維校驗和參數;
[0060]在所述服務器向所述客戶端下發增量鍵-值數據時,還同時下發根據全量鍵-值數據計算出的二維校驗和參數。
[0061]以下詳細闡述本實施例即時通訊鍵-值數據的下發過程:
[0062]在滿足如下條件需要向客戶端下發全量鍵-值數據:客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置為空;或者,客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置不為空時,客戶端請求包中的全量拉取時間戳與當前時間相比,時間間隔大于或等于全量拉取的時間間隔tl。在此種條件下,服務器會下發全量鍵-值數據、最新的全量拉取時間戳和根據全量的鍵-值數據計算出的二維校驗和參數。
[0063]在滿足如下條件需要向客戶端下發增量鍵-值數據、最新的增量拉取時間戳和根據全量的鍵-值數據計算出的二維校驗和:
[0064]客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置不為空,且客戶端請求包中的全量拉取時間戳與當前時間相比,時間間隔小于全量拉取的時間間隔tl時,客戶端請求包中的數據變更序列號和服務器存儲的數據變更序列號不一致;或者,客戶端請求包中的數據變更序列號和服務器存儲的數據變更序列號一致時,客戶端請求包中的增量拉取時間戳與當前時間相比,時間間隔大于等于增量拉取的時間間隔t2,即每隔時間間隔t2,服務器一定會返回增量數據,作為數據變更序列號出錯(例如鍵-值數據變化了,數據變更序列號卻未改變)的一個容錯機制。
[0065]其中,增量鍵-值數據包括兩個部分:上次拉取以來修改或新增的鍵-值數據,以及上次拉取以來刪除過的鍵-值數據的key。
[0066]如圖3a所示,作為一種實施方式,所述服務器確定上次拉取以來修改或新增的鍵-值數據的步驟可以包括:
[0067]步驟SI I,按照hash (key)%M將所述服務器的全量鍵-值數據劃分成M個集合,每個集合計算一個校驗和,得到M個校驗和;按照hash (key) %N將服務器的全量鍵-值數據劃分成N個集合,每個集合計算一個校驗和,得到N個校驗和,所述M個校驗和與N個校驗和組成所述服務器的二維校驗和參數。
[0068]其中,二維校驗和的意思即為%M和%N兩個維度,M和N不相等。
[0069]校驗和參數的計算算法可以采用CRC、md5等校驗算法。上述hash (key)是按照hash算法將key映射為一個整型數。
[0070]步驟S12,將所述客戶端發送的請求包中的二維校驗和參數與所述服務器計算出的二維校驗和參數進行比較,確定修改或新增的鍵-值數據。
[0071]具體地,以下采用一個實例說明如何根據二維校驗和確定新增和修改的鍵-值數據。
[0072]設定客戶端請求包中的二維校驗和為{client_checksum_x_0, client_checksum_
x_l,......, client_checksum_x_M-l}、{client_checksum_y_l, client_checksum_
y_0,......,client_checksum_y_N-l},設定服務器計算出的二維校驗和為{server_
checksum_x_0, server_checksum_x_l,......, server_checksum_x_M-l}、{server_
checksum_y_0, server_checksum_y_l,......, server_checksum_y_N-l}。
[0073]如果client_checksum_x_0 不等于 server_checksum_x_0,表明 hash (key) %M等于O的鍵-值集合中有鍵-值數據可能被修改或添加,導致服務器和客戶端的校驗和不一致。為了對返回的增量鍵-值數據進行進一步篩選,對hash (key) %M等于O的鍵-值集合中的每一個 key,設定 key 的具體取值為 key_k 且 hash (key_k) %N 等于 K,如果 client_checksum_y_K等于server_checksum_y_K,表明key_k對應的鍵-值數據沒有修改或增加,key_k不需要加入到可能增加或修改的鍵-值數據中,如果client_checksum_y_K不等于server_checksum_y_K,表明key_k對應的鍵-值數據可能修改或增加,key_k要加入到可能增加或修改的鍵-值數據中。
[0074]在計算時,首先通過key%M計算出的校驗和得出可能增加或修改的鍵-值數據,再通過key%N計算出的校驗和排除一部分實際上沒有增加或修改的鍵-值數據,然后返回給客戶端。
[0075]實際上,采用上述方法計算出來的增加或修改的鍵-值數據,其中有部分kye-value數據不變,但是增加或修改的鍵-值數據一定包含在里面。在實際工程實現中,可以采用一維或多維(即大于二維)校驗和的計算方法。
[0076]如圖3b所示,作為另一種實施方式,所述服務器確定上次拉取以來修改或新增的鍵-值數據的步驟可以包括:
[0077]步驟S21,所述服務器為每條鍵-值數據記錄附加一時間戳;
[0078]步驟S22,當新增或修改一條鍵-值數據記錄時,將該時間戳更新為當前時間;
[0079]步驟S23,在所述客戶端拉取數據時,確定所述客戶端的請求包所攜帶的上次拉取數據的時間戳之后的所有鍵-值數據記錄為修改或新增的鍵-值數據。
[0080]此種實施方式作為上述圖3a所示實施方式的替代實施方式。在此種實施方式中,可以考慮服務器在進行鍵-值數據的增量下發時,不使用上述圖3a所示的二維校驗和計算機制確定新增或修改的鍵-值數據記錄,而是為每條鍵-值數據記錄附加一個時間戳。當新增或修改一條鍵-值數據記錄時,將時間戳更新為當前時間,每次客戶端拉取數據時,帶上上次拉取數據的時間戳,在該時間戳之后的所有鍵-值數據記錄均為新增或修改的鍵-值數據,下發給客戶端。該替代方案的優點是可精確確定新增或修改的鍵-值數據記錄,缺點是對于海量的鍵-值數據,為每個鍵-值數據記錄附加一個時間戳,會占用服務器大量的存儲空間。
[0081]如圖3a所示,作為一種實施方式,所述服務器確定并發送上次拉取以來刪除過的鍵-值數據的key的步驟可以包括:
[0082]步驟S31,當一鍵-值數據被刪除時,將對應的key和刪除時間戳進行緩存;
[0083]步驟S32,當所述刪除時間戳與當前時間之間的時間間隔大于所述預設的全量拉取時間間隔tl時,刪除所述對應的key ;
[0084]步驟S33,當需要返回上次拉取以來刪除過的鍵-值數據的key時,將所有在上次拉取時間戳之后緩存的key返回給所述客戶端;所述上次拉取時間戳為所述請求包攜帶的全量拉取時間戳和增量拉取時間戳中最新的一個。
[0085]本實施方式通過將刪除的key在服務器進行緩存的方式來確定并發送上次拉取以來刪除過的鍵-值數據的key。
[0086]具體地,當某個鍵-值數據被刪除時,服務器會將對應的key和刪除時間戳緩存起來。因此,被緩存的刪除key會越來越多,需要有一個定期清理機制,將不再用到的刪除key從緩存中清除掉。
[0087]當某個key的刪除時間戳距離當前時間的間隔大于全量拉取時間間隔tl時,該key即可被刪除掉,因為每隔全量拉取時間間隔tl,客戶端一定會發起一次全量拉取請求,覆蓋本地數據,在全量拉取時間間隔tl之前存儲的刪除key已經沒有意義了。
[0088]當需要返回上次拉取以來刪除過的鍵-值數據的key時,服務器將所有在上次拉取時間戳之后緩存起來的key全部返回給客戶端。客戶端每次拉取都會帶上全量拉取時間戳和增量拉取時間戳,上次拉取時間戳即為全量拉取時間戳和增量拉取時間戳中最新的那一個。
[0089]后續處理過程中,客戶端在接收服務器的返回的結果,更新本地緩存數據并展現給用戶。
[0090]具體地,若服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和。
[0091]若服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和,按照增量鍵-值數據的key更新本地緩存的數據,例如客戶端本地緩存中的全量數據有keyl-valuel、key2-value2, key3-value3,服務器下發的增量數據中包含 key2_value2’、key4-value4和刪除key列表key3,則更新后的全量數據為keyl-valuel、key2_value2’、key4_value4,注意為 keyl-valuel 不變,key2_value2’ 的 value 修改為最新,key3_value3被刪除,key4-value4為新加;
[0092]若服務器返回客戶端數據為最新數據,則不需要修改數據,客戶端也不需要任何操作。
[0093]本實施例通過上述方案,服務器在接收客戶端在登錄時發送的拉取鍵-值數據的請求包時;根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,從而實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
[0094]如圖4所示,本發明第二實施例從客戶端側提出一種即時通訊鍵-值數據下發方法,包括:
[0095]步驟S110,發送拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0096]步驟S111,接收服務器根據所述請求包所攜帶的參數下發的全量鍵-值數據或增量鍵-值數據;
[0097]步驟S112,根據所述服務器的返回結果更新本地緩存數據。
[0098]具體地,本實施例通過客戶端與服務器的交互,可以實現服務器向客戶端的鍵-值數據的增量下發,以解決鍵-值數據下發過程中網絡帶寬占用的問題。
[0099]首先,客戶端在登錄時,向服務器發送拉取鍵-值數據的請求包,該請求包至少需要攜帶全量拉取時間戳、增量拉取時間戳和數據變更序列號,同時還可以攜帶二維校驗和參數,以便服務器根據請求包所攜帶的參數,選用相應的數據下發機制向客戶端下發鍵-值數據。
[0100]其中,服務器設定的數據下發機制包括使用時間戳的全量數據下發機制、使用時間戳和序列號的增量數據下發機制,以及二維校驗和計算機制、將刪除的key在服務器進行緩存的機制等。
[0101]其中,對于使用時間戳的全量數據下發機制,在客戶端首次登錄時,從服務器拉取全量鍵-值數據,并記錄全量拉取的時間戳,以后以首次全量拉取的時間戳為基準,每隔全量拉取時間間隔tl,重新完成一次全量拉取。上述全量拉取時間間隔tl可以根據實際情況來設定。
[0102]對于使用時間戳和序列號的增量數據下發機制,在設定的兩次全量拉取之間的增量時間間隔t2中,根據條件判斷是否使用增量拉取。若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號不一致,則直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取的時間距離當前時間的間隔大于或等于t2時,直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取距離當前時間的間隔小于t2時,不發起本次增量拉取數據。本發明實施例中增量數據的含義解釋為新增、修改或刪除的鍵-值數據。
[0103]上述二維校驗和計算機制是指服務器在增量數據下發過程中,盡力將有變化的鍵-值數據下發給客戶端,對于不修改的鍵-值數據則不下發給客戶端。
[0104]上述將刪除的key在服務器進行緩存的機制是指,每次增量拉取的時候,將上次增量拉取和本次增量拉取時間間隔內被刪除的key返回給客戶端,由客戶端將對應的鍵-值數據刪除。
[0105]需要說明的是,全量數據下發機制除了在首次登錄過程中獲取全量鍵-值數據夕卜,還作為增量數據下發機制的保護邏輯,在實際實現中,增量數據下發機制如果出錯,會導致客戶端獲取到的鍵-值數據錯亂,若定期進行全量數據下發,則可以修復錯亂的數據。
[0106]客戶端在接收到服務器返回的結果后,更新本地緩存數據并展現給用戶。
[0107]具體地,若服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和。
[0108]若服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和,按照增量鍵-值數據的key更新本地緩存的數據,例如客戶端本地緩存中的全量數據有keyl-valuel、key2-value2, key3-value3,服務器下發的增量數據中包含 key2_value2’、key4-value4和刪除key列表key3,則更新后的全量數據為keyl-valuel、key2_value2’、key4_value4,注意為 keyl-valuel 不變,key2_value2’ 的 value 修改為最新,key3_value3被刪除,key4-value4為新加;
[0109]若服務器返回客戶端數據為最新數據,則不需要修改數據,客戶端也不需要任何操作。
[0110]本實施例客戶端與服務器之間進行交互實現即時通訊的鍵-值數據的下發過程,請參照上述實施例,在此不再贅述。
[0111]本實施例通過上述方案,客戶端在登錄時向服務器發送拉取鍵-值數據的請求包,服務器在接收到該請求包時,根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,從而實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
[0112]如圖5所示,本發明較佳實施例提出一種下發即時通訊鍵-值數據的服務器,包括:請求接收模塊201及下發處理模塊202,其中:
[0113]請求接收模塊201,用于接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;
[0114]下發處理模塊202,用于根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
[0115]本實施例可以實現服務器鍵-值數據的增量下發,以解決鍵-值數據下發過程中網絡帶寬占用的問題。
[0116]首先,客戶端在登錄時,向服務器發送拉取鍵-值數據的請求包,該請求包至少需要攜帶全量拉取時間戳、增量拉取時間戳和數據變更序列號,同時還可以攜帶二維校驗和參數,以便服務器根據請求包所攜帶的參數,選用相應的數據下發機制向客戶端下發鍵-值數據。
[0117]服務器通過請求接收模塊201接收客戶端在登錄時發送的拉取鍵-值數據的請求包。
[0118]服務器下發處理模塊202根據請求包所攜帶的參數,選用預設的數據下發機制,判斷是否下發數據,或者以何種方式下發鍵-值數據。
[0119]本實施例中服務器設定的數據下發機制包括使用時間戳的全量數據下發機制、使用時間戳和序列號的增量數據下發機制,以及二維校驗和計算機制、將刪除的key在服務器進行緩存的機制等。
[0120]其中,對于使用時間戳的全量數據下發機制,在客戶端首次登錄時,從服務器拉取全量鍵-值數據,并記錄全量拉取的時間戳,以后以首次全量拉取的時間戳為基準,每隔全量拉取時間間隔tl,重新完成一次全量拉取。上述全量拉取時間間隔tl可以根據實際情況來設定。
[0121]對于使用時間戳和序列號的增量數據下發機制,在設定的兩次全量拉取之間的增量時間間隔t2中,根據條件判斷是否使用增量拉取。若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號不一致,則直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取的時間距離當前時間的間隔大于或等于t2時,直接發起本次增量數據拉取;若客戶端緩存的鍵-值數據變更序列號和服務器存儲的鍵-值數據變更序列號一致,且上次增量拉取距離當前時間的間隔小于t2時,不發起本次增量拉取數據。本發明實施例中增量數據的含義解釋為新增、修改或刪除的鍵-值數據。
[0122]上述二維校驗和計算機制是指服務器在增量數據下發過程中,盡力將有變化的鍵-值數據下發給客戶端,對于不修改的鍵-值數據則不下發給客戶端。
[0123]上述將刪除的key在服務器進行緩存的機制是指,每次增量拉取的時候,將上次增量拉取和本次增量拉取時間間隔內被刪除的key返回給客戶端,由客戶端將對應的鍵-值數據刪除。
[0124]需要說明的是,全量數據下發機制除了在首次登錄過程中獲取全量鍵-值數據夕卜,還作為增量數據下發機制的保護邏輯,在實際實現中,增量數據下發機制如果出錯,會導致客戶端獲取到的鍵-值數據錯亂,若定期進行全量數據下發,則可以修復錯亂的數據。
[0125]客戶端在接收到服務器返回的結果后,更新本地緩存數據并展現給用戶。
[0126]具體地,如圖6所示,作為一種實施方式,所述下發處理模塊202可以包括:判斷單元2021以及下發單元2022,其中:
[0127]判斷單元2021,用于判斷所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置是否為空;
[0128]若客戶端是首次發送請求,則本地未緩存任何數據,請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置為空。
[0129]下發單元2022,用于在所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置為空時,向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳;否則,將所述請求包中的全量拉取時間戳與當前時間進行對比,獲取請求包中的全量拉取時間戳與當前時間之間的時間間隔;當所述全量拉取時間戳與當前時間之間的時間間隔大于或等于預設的全量拉取時間間隔tl時,服務器向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳。
[0130]進一步的,所述下發單元2022還用于當所述全量拉取時間戳與當前時間之間的時間間隔小于預設的全量拉取時間間隔tl時,判斷所述請求包中的數據變更序列號與所述服務器本地保存的數據變更序列號是否一致;若不一致,則向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;否則將所述請求包中的增量拉取時間戳與當前時間進行對比,獲取請求包中的增量拉取時間戳與當前時間之間的時間間隔;當所述增量拉取時間戳與當前時間之間的時間間隔大于或等于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;當所述增量拉取時間戳與當前時間之間的時間間隔小于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器不向所述客戶端下發鍵-值數據。
[0131]進一步地,如前所述,客戶端發送的請求包中還可以攜帶有二維校驗和參數;在此種情形下,在所述服務器向所述客戶端下發全量鍵-值數據時,還同時下發根據所述全量鍵-值數據計算出的二維校驗和參數;
[0132]在所述服務器向所述客戶端下發增量鍵-值數據時,還同時下發根據全量鍵-值數據計算出的二維校驗和參數。
[0133]以下詳細闡述本實施例即時通訊鍵-值數據的下發過程:
[0134]在滿足如下條件需要向客戶端下發全量鍵-值數據:客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置為空;或者,客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置不為空時,客戶端請求包中的全量拉取時間戳與當前時間相比,時間間隔大于或等于全量拉取的時間間隔tl。在此種條件下,服務器會下發全量鍵-值數據、最新的全量拉取時間戳和根據全量的鍵-值數據計算出的二維校驗和參數。
[0135]在滿足如下條件需要向客戶端下發增量鍵-值數據、最新的增量拉取時間戳和根據全量的鍵-值數據計算出的二維校驗和:
[0136]客戶端請求包中的全量拉取時間戳、增量拉取時間戳、數據變更序列號和二維校驗和參數設置不為空,且客戶端請求包中的全量拉取時間戳與當前時間相比,時間間隔小于全量拉取的時間間隔tl時,客戶端請求包中的數據變更序列號和服務器存儲的數據變更序列號不一致;或者,客戶端請求包中的數據變更序列號和服務器存儲的數據變更序列號一致時,客戶端請求包中的增量拉取時間戳與當前時間相比,時間間隔大于等于增量拉取的時間間隔t2,即每隔時間間隔t2,服務器一定會返回增量數據,作為數據變更序列號出錯(例如鍵-值數據變化了,數據變更序列號卻未改變)的一個容錯機制。
[0137]其中,增量鍵-值數據包括兩個部分:上次拉取以來修改或新增的鍵-值數據,以及上次拉取以來刪除過的鍵-值數據的key。
[0138]作為一種實施方式,所述下發單元2022在確定上次拉取以來修改或新增的鍵-值數據時可以采用以下方式:
[0139]按照hash (key) %M將所述服務器的全量鍵-值數據劃分成M個集合,每個集合計算一個校驗和,得到M個校驗和;按照hash (key) %N將服務器的全量鍵-值數據劃分成N個集合,每個集合計算一個校驗和,得到N個校驗和,所述M個校驗和與N個校驗和組成所述服務器的二維校驗和參數;其中,二維校驗和的意思即為°觀和%N兩個維度,M和N不相等;
[0140]校驗和參數的計算算法可以采用CRC、md5等校驗算法。上述hash (key)是按照hash算法將key映射為一個整型數。
[0141]然后,將所述客戶端發送的請求包中的二維校驗和參數與所述服務器計算出的二維校驗和參數進行比較,確定修改或新增的鍵-值數據。
[0142]具體地,以下采用一個實例說明如何根據二維校驗和確定新增和修改的鍵-值數據。
[0143]設定客戶端請求包中的二維校驗和為{client_checksum_x_0, client_checksum_
x_l,......, client_checksum_x_M_l}、{client_checksum_y_l, client_checksum_
y_0,......,client_checksum_y_N-l},設定服務器計算出的二維校驗和為{server_
checksum_x_0, server_checksum_x_l,......, server_checksum_x_M-l}、{server_
checksum_y_0, server_checksum_y_l,......, server_checksum_y_N-l}。
[0144]如果client_checksum_x_0 不等于 server_checksum_x_0,表明 hash (key) %M等于0的鍵-值集合中有鍵-值數據可能被修改或添加,導致服務器和客戶端的校驗和不一致。為了對返回的增量鍵-值數據進行進一步篩選,對hash (key) %M等于O的鍵-值集合中的每一個 key,設定 key 的具體取值為 key_k 且 hash (key_k) %N 等于 K,如果 client_checksum_y_K等于server_checksum_y_K,表明key_k對應的鍵-值數據沒有修改或增加,key_k不需要加入到可能增加或修改的鍵-值數據中,如果client_checksum_y_K不等于server_checksum_y_K,表明key_k對應的鍵-值數據可能修改或增加,key_k要加入到可能增加或修改的鍵-值數據中。
[0145]在計算時,首先通過key%M計算出的校驗和得出可能增加或修改的鍵-值數據,再通過key%N計算出的校驗和排除一部分實際上沒有增加或修改的鍵-值數據,然后返回給客戶端。
[0146]實際上,采用上述方法計算出來的增加或修改的鍵-值數據,其中有部分kye-value數據不變,但是增加或修改的鍵-值數據一定包含在里面。在實際工程實現中,可以采用一維或多維(即大于二維)校驗和的計算方法。
[0147]作為另一種實施方式,所述下發單元2022在確定上次拉取以來修改或新增的鍵-值數據時還可以采用以下方式:
[0148]所述下發單元2022為每條鍵-值數據記錄附加一時間戳;當新增或修改一條鍵-值數據記錄時,將該時間戳更新為當前時間;在所述客戶端拉取數據時,確定所述客戶端的請求包所攜帶的上次拉取數據的時間戳之后的所有鍵-值數據記錄為修改或新增的鍵-值數據。
[0149]此種實施方式作為上述實施方式的替代實施方式。在此種實施方式中,可以考慮服務器在進行鍵-值數據的增量下發時,不使用上述圖3a所示的二維校驗和計算機制確定新增或修改的鍵-值數據記錄,而是為每條鍵-值數據記錄附加一個時間戳。當新增或修改一條鍵-值數據記錄時,將時間戳更新為當前時間,每次客戶端拉取數據時,帶上上次拉取數據的時間戳,在該時間戳之后的所有鍵-值數據記錄均為新增或修改的鍵-值數據,下發給客戶端。該替代方案的優點是可精確確定新增或修改的鍵-值數據記錄,缺點是對于海量的鍵-值數據,為每個鍵-值數據記錄附加一個時間戳,會占用服務器大量的存儲空間。
[0150]進一步地,作為一種實施方式,所述下發單元2022還用于當一鍵-值數據被刪除時,將對應的key和刪除時間戳進行緩存;當所述刪除時間戳與當前時間之間的時間間隔大于所述預設的全量拉取時間間隔tl時,刪除所述對應的key ;當需要返回上次拉取以來刪除過的鍵-值數據的key時,將所有在上次拉取時間戳之后緩存的key返回給所述客戶端;所述上次拉取時間戳為所述請求包攜帶的全量拉取時間戳和增量拉取時間戳中最新的一個。
[0151]本實施方式通過將刪除的key在服務器進行緩存的方式來確定并發送上次拉取以來刪除過的鍵-值數據的key。
[0152]具體地,當某個鍵-值數據被刪除時,服務器會將對應的key和刪除時間戳緩存起來。因此,被緩存的刪除key會越來越多,需要有一個定期清理機制,將不再用到的刪除key從緩存中清除掉。
[0153]當某個key的刪除時間戳距離當前時間的間隔大于全量拉取時間間隔tl時,該key即可被刪除掉,因為每隔全量拉取時間間隔tl,客戶端一定會發起一次全量拉取請求,覆蓋本地數據,在全量拉取時間間隔tl之前存儲的刪除key已經沒有意義了。
[0154]當需要返回上次拉取以來刪除過的鍵-值數據的key時,服務器將所有在上次拉取時間戳之后緩存起來的key全部返回給客戶端。客戶端每次拉取都會帶上全量拉取時間戳和增量拉取時間戳,上次拉取時間戳即為全量拉取時間戳和增量拉取時間戳中最新的那一個。
[0155]后續處理過程中,客戶端在接收服務器的返回的結果,更新本地緩存數據并展現給用戶。
[0156]具體地,若服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和。
[0157]若服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和,客戶端直接覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和,按照增量鍵-值數據的key更新本地緩存的數據,例如客戶端本地緩存中的全量數據有keyl-valuel、key2-value2, key3-value3,服務器下發的增量數據中包含 key2_value2’、key4-value4和刪除key列表key3,則更新后的全量數據為keyl-valuel、key2_value2’、key4_value4,注意為 keyl-valuel 不變,key2_value2’ 的 value 修改為最新,key3_value3被刪除,key4-value4為新加;
[0158]若服務器返回客戶端數據為最新數據,則不需要修改數據,客戶端也不需要任何操作。
[0159]本實施例通過上述方案,服務器在接收客戶端在登錄時發送的拉取鍵-值數據的請求包時;根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,從而實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
[0160]如圖7所示,本發明較佳實施例提出一種下發即時通訊鍵-值數據的系統,包括客戶端301和服務器302,其中:
[0161]所述客戶端,用于在登錄時向所述服務器發送拉取鍵-值數據的請求包;以及根據所述服務器的返回結果,更新本地緩存數據并展現給用戶。
[0162]所述服務器302可以采用上述實施例所述的服務器,用于接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號;根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
[0163]該客戶端與服務器之間進行交互實現即時通訊的鍵-值數據的下發過程,請參照上述實施例,在此不再贅述。
[0164]其中,客戶端還用于當所述服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數;在所述服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和參數,并按照增量鍵-值數據的key更新本地緩存的數據。
[0165]本發明實施例即時通訊鍵-值數據下發方法、服務器、客戶端及系統,服務器在接收客戶端在登錄時發送的拉取鍵-值數據的請求包時;根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由客戶端根據服務器的返回結果更新本地緩存數據并展現給用戶,其中,客戶端發送的請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號,從而實現了鍵-值數據的增量下發,減少網絡帶寬浪費,解決了鍵-值數據下發過程中網絡帶寬占用的問題,并保證即時通信客戶端和服務器的數據一致性。
[0166]需要說明的是,在本文中,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者裝置不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者裝置所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括該要素的過程、方法、物品或者裝置中還存在另外的相同要素。
[0167]上述本發明實施例序號僅僅為了描述,不代表實施例的優劣。
[0168]通過以上的實施方式的描述,本領域的技術人員可以清楚地了解到上述實施例方法可借助軟件加必需的通用硬件平臺的方式來實現,當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品存儲在一個存儲介質(如R0M/RAM、磁碟、光盤)中,包括若干指令用以使得一臺終端設備(可以是手機,計算機,月艮務器,或者網絡設備等)執行本發明各個實施例所述的方法。具體地,圖5、圖6所述的下發即時通訊鍵-值數據的服務器所對應的程序指令可以存儲在服務器的可讀存儲介質中,并被其中的至少一個處理器執行,以實現圖1至圖4所述的即時通訊鍵-值數據下發方法。
[0169]以上所述僅為本發明的優選實施例,并非因此限制本發明的專利范圍,凡是利用本發明說明書及附圖內容所作的等效結構或流程變換,或直接或間接運用在其它相關的【技術領域】,均同理包括在本發明的專利保護范圍內。
【權利要求】
1.一種即時通訊鍵-值數據下發方法,其特征在于,包括: 服務器接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號; 根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
2.根據權利要求1所述的方法,其特征在于,所述根據請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據的步驟: 判斷所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置是否為空;若是,則 服務器向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳;否則 將所述請求包中的全量拉取時間戳與當前時間進行對比,獲取請求包中的全量拉取時間戳與當前時間之間的時間間隔; 當所述全量拉取時間戳與當前時間之間的時間間隔大于或等于預設的全量拉取時間間隔tl時,服務器向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳。
3.根據權利要求2所述的方法,其特征在于,還包括: 當所述全量拉取時間戳與當前時間之間的時間間隔小于預設的全量拉取時間間隔tl時,判斷所述請求包中的數據變更序列號與所述服務器本地保存的數據變更序列號是否一致;若不一致,則 所述服務器向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;否則 將所述請求包中的增量拉取時間戳與當前時間進行對比,獲取請求包中的增量拉取時間戳與當前時間之間的時間間隔; 當所述增量拉取時間戳與當前時間之間的時間間隔大于或等于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳; 當所述增量拉取時間戳與當前時間之間的時間間隔小于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器不向所述客戶端下發鍵-值數據。
4.根據權利要求3所述的方法,其特征在于,所述增量鍵-值數據包括上次拉取以來修改或新增的鍵-值數據,以及上次拉取以來刪除過的鍵-值數據的key。
5.根據權利要求1-4中任一項所述的方法,其特征在于,所述請求包還攜帶有二維校驗和參數;所述方法還包括: 在所述服務器向所述客戶端下發全量鍵-值數據時,還同時下發根據所述全量鍵-值數據計算出的二維校驗和參數; 在所述服務器向所述客戶端下發增量鍵-值數據時,還同時下發根據全量鍵-值數據計算出的二維校驗和參數。
6.根據權利要求5所述的方法,其特征在于,所述服務器確定上次拉取以來修改或新增的鍵-值數據的步驟包括: 按照hash (key) %M將所述服務器的全量鍵_值數據劃分成M個集合,每個集合計算一個校驗和,得到M個校驗和;按照hash (key) %N將服務器的全量鍵-值數據劃分成N個集合,每個集合計算一個校驗和,得到N個校驗和,所述M個校驗和與N個校驗和組成所述服務器的二維校驗和參數;其中,M和N不相等; 將所述客戶端發送的請求包中的二維校驗和參數與所述服務器計算出的二維校驗和參數進行比較,確定修改或新增的鍵-值數據。
7.根據權利要求5所述的方法,其特征在于,所述服務器確定并發送上次拉取以來刪除過的鍵-值數據的key的步驟包括: 當一鍵-值數據被刪除時,將對應的key和刪除時間戳進行緩存; 當所述刪除時間戳與當前時間之間的時間間隔大于所述預設的全量拉取時間間隔tl時,刪除所述對應的key ; 當需要返回上次拉取以來刪除過的鍵-值數據的key時,將所有在上次拉取時間戳之后緩存的key返回給所述客戶端;所述上次拉取時間戳為所述請求包攜帶的全量拉取時間戳和增量拉取時間戳中最新的一個。
8.根據權利要求4所述的方法,其特征在于,所述服務器確定上次拉取以來修改或新增的鍵-值數據的步驟包括: 所述服務器為每條鍵-值數據記錄附加一時間戳; 當新增或修改一條鍵-值數據記錄時,將該時間戳更新為當前時間; 在所述客戶端拉取數據時,確定所述客戶端的請求包所攜帶的上次拉取數據的時間戳之后的所有鍵-值數據記錄為修改或新增的鍵-值數據。
9.一種下發即時通訊鍵-值數據的服務器,其特征在于,包括: 請求接收模塊,用于接收客戶端在登錄時發送的拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號; 下發處理模塊,用于根據所述請求包所攜帶的參數,選用預設的數據下發機制,向所述客戶端下發全量鍵-值數據或向所述客戶端下發增量鍵-值數據或不下發鍵-值數據,由所述客戶端根據所述服務器的返回結果更新本地緩存數據并展現給用戶。
10.根據權利要求9所述的服務器,其特征在于,所述下發處理模塊包括: 判斷單元,用于判斷所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置是否為空; 下發單元,用于在所述請求包所攜帶的全量拉取時間戳、增量拉取時間戳和數據變更序列號設置為空時,向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳;否則,將所述請求包中的全量拉取時間戳與當前時間進行對比,獲取請求包中的全量拉取時間戳與當前時間之間的時間間隔;當所述全量拉取時間戳與當前時間之間的時間間隔大于或等于預設的全量拉取時間間隔tl時,服務器向所述客戶端下發全量鍵-值數據、最新的全量拉取時間戳。
11.根據權利要求9所述的服務器,其特征在于,所述下發單元還用于當所述全量拉取時間戳與當前時間之間的時間間隔小于預設的全量拉取時間間隔tl時,判斷所述請求包中的數據變更序列號與所述服務器本地保存的數據變更序列號是否一致;若不一致,則向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;否則將所述請求包中的增量拉取時間戳與當前時間進行對比,獲取請求包中的增量拉取時間戳與當前時間之間的時間間隔;當所述增量拉取時間戳與當前時間之間的時間間隔大于或等于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器向所述客戶端下發增量鍵-值數據和最新的增量拉取時間戳;當所述增量拉取時間戳與當前時間之間的時間間隔小于預設的兩次全量拉取之間的增量時間間隔t2時,所述服務器不向所述客戶端下發鍵-值數據。
12.根據權利要求11所述的服務器,其特征在于,所述增量鍵-值數據包括上次拉取以來修改或新增的鍵-值數據,以及上次拉取以來刪除過的鍵-值數據的key。
13.根據權利要求10、11或12所述的服務器,其特征在于,所述請求包還攜帶有二維校驗和參數;所述下發單元還用于在向所述客戶端下發全量鍵-值數據時,還同時下發根據所述全量鍵-值數據計算出的二維校驗和參數;或者,在向所述客戶端下發增量鍵-值數據時,還同時下發根據全量鍵-值數據計算出的二維校驗和參數。
14.根據權利要求13所述的服務器,其特征在于,所述下發單元還用于按照hash (key) %M將所述服務器的全量鍵_值數據劃分成M個集合,每個集合計算一個校驗和,得到M個校驗和;按照hash (key) %N將服務器的全量鍵-值數據劃分成N個集合,每個集合計算一個校驗和,得到N個校驗和,所述M個校驗和與N個校驗和組成所述服務器的二維校驗和參數;其中,M和N不相等;將所述客戶端發送的請求包中的二維校驗和參數與所述服務器計算出的二維校驗和參數進行比較,確定修改或新增的鍵-值數據。
15.根據權利要求13所述的服務器,其特征在于,所述下發單元還用于當一鍵-值數據被刪除時,將對應的key和刪除時間戳進行緩存;當所述刪除時間戳與當前時間之間的時間間隔大于所述預設的全量拉取時間間隔tl時,刪除所述對應的key ;當需要返回上次拉取以來刪除過的鍵-值數據的key時,將所有在上次拉取時間戳之后緩存的key返回給所述客戶端;所述上次拉取時間戳為所述請求包攜帶的全量拉取時間戳和增量拉取時間戳中最新的一個。
16.根據權利要求12所述的服務器,其特征在于,所述下發單元還用于為每條鍵-值數據記錄附加一時間戳;當新增或修改一條鍵-值數據記錄時,將該時間戳更新為當前時間;在所述客戶端拉取數據時,確定所述客戶端的請求包所攜帶的上次拉取數據的時間戳之后的所有鍵-值數據記錄為修改或新增的鍵-值數據。
17.—種即時通訊鍵-值數據下發方法,其特征在于,包括: 發送拉取鍵-值數據的請求包;所述請求包至少攜帶有全量拉取時間戳、增量拉取時間戳和數據變更序列號; 接收服務器根據所述請求包所攜帶的參數下發的全量鍵-值數據或增量鍵-值數據; 根據所述服務器的返回結果更新本地緩存數據。
18.根據權利要求17所述的方法,其特征在于,所述根據所述服務器的返回結果更新本地緩存數據步驟包括: 在所述服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數; 在所述服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和參數,并按照增量鍵-值數據的key更新本地緩存的數據。
19.一種下發即時通訊鍵-值數據的系統,其特征在于,包括客戶端和權利要求9-16中任一項所述的服務器,其中: 所述客戶端,用于在登錄時向所述服務器發送拉取鍵-值數據的請求包;以及根據所述服務器的返回結果,更新本地緩存數據并展現給用戶。
20.根據權利要求19所述的系統,其特征在于, 所述客戶端還用于當所述服務器返回全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的全量鍵-值數據、數據變更序列號、全量拉取時間戳和二維校驗和參數;在所述服務器返回增量鍵-值數據、數據變更序列號、增量拉取時間戳和二維校驗和參數時,覆蓋本地緩存中的數據變更序列號、增量拉取時間戳和二維校驗和參數,并按照增量鍵-值數據的key更新本地緩存的數據。
【文檔編號】H04L29/08GK104348849SQ201310316622
【公開日】2015年2月11日 申請日期:2013年7月25日 優先權日:2013年7月25日
【發明者】李艷國, 廖念波, 陳國林, 舒星 申請人:騰訊科技(深圳)有限公司