APP開發(fā)利用Redis獲取id數(shù)據(jù)的方法(二)
制作APP怎樣利用Redis獲取好友數(shù)據(jù),深圳APP開發(fā)公司在前面本站APP開發(fā)欄目做過第一種方式的介紹,本文今天主要介紹第二種方式,并以制作交友APP獲取好友的案例進行實操分享。博納網(wǎng)絡(luò)希望這類型的能對各位APP開發(fā)愛好者的日常工作有所幫助。
第二種方式,有多少組用戶屬性就用多少個i:ev-Value對象,用戶id“5”加上對應(yīng)的屬性名來作為Kev,屬性值作為Value。這種方式存取或獲取數(shù)據(jù),雖然免去了如第種方式JSON/反JSON的開銷,但是在內(nèi)存萬面的開銷還是比hash的大(在下面內(nèi)存優(yōu)化的章節(jié)會描述,通過在Redis配置文件中優(yōu)化“hash-max-zipmap-entries”和“hash-111ax-zipmap-value”這兩個參數(shù)可以讓hash更省內(nèi)存)。
應(yīng)用場景
App后臺常見的功能是根據(jù)用戶的id獲取用戶的信息。例如.根據(jù)用戶的id獲取用戶的昵稱、頭像、所在地等信息。一般用戶的信息是存儲在數(shù)據(jù)庫中.對于這種高頻的數(shù)據(jù)訪問,不可能每次獲取這些信息都讀取數(shù)據(jù)庫.自然而然開發(fā)人員會考慮到把用戶的信息存儲在Redis的hash中,如圖7-5所示。
APP開發(fā)數(shù)據(jù)獲取實操示意圖7-5用戶信息的hash數(shù)據(jù)
獲得用戶id后需要獲取用戶的數(shù)據(jù),用hgetall命令獲取id下所有的field和value,命令如下:
hgetall id
注意:如果修改了數(shù)據(jù)庫的用戶數(shù)據(jù),也要把這些數(shù)據(jù)同步更新到Redis,用來防止Redis和數(shù)據(jù)庫的數(shù)據(jù)不一致。
APP制作經(jīng)驗之list--模擬隊列操作
1.簡介
Redis中l(wèi)ist是按照插入順序排序的字符串鏈表,可以在頭部和尾部插入新的元素(即隊列結(jié)構(gòu))。插入元素時如果該i:ev不存在,Redis會為該Key創(chuàng)建一個新的鏈表,如果鏈表中所有的元素都被移除,該Kev也會從Redis中移除。
注意:由于list在Redis中是鏈表結(jié)構(gòu),如果在頭部或尾部插入新的元素,即使鏈表中存儲了上百萬的數(shù)據(jù),性能也非常高效。如果在鏈表中插入元素,由于需要根據(jù)頭部或尾部的指針遍歷到鏈表指定的位置.Redis的插入效率很低。
2.數(shù)據(jù)模型
list的數(shù)據(jù)模型如圖7-6所示
APP開發(fā)list數(shù)據(jù)模型示意圖7-6鏈表的數(shù)據(jù)模型
常見的操作是用lpush命令在list頭部插入元素,用rpop命令在list尾取出數(shù)據(jù)。
3.應(yīng)用場景
在App后臺中,Redis也經(jīng)常被用來作為消息隊列,理由如下:
·因為App后臺中已經(jīng)使用了Redis,消息隊列也使用Redis可以減少APP開發(fā)人員的維護成本和學(xué)習(xí)新知識的成本。
·Redis的讀寫速度能達到每秒上萬次,能滿足大多數(shù)系統(tǒng)的性能要求。
App后臺常見的發(fā)送短信功能就需要用到隊列,因為發(fā)送短信的速度慢,所以需要用到隊列來實現(xiàn)異步操作,整個架構(gòu)如圖7-7所示。
制作APP經(jīng)驗示意圖7—7發(fā)送短信的架構(gòu)圖
發(fā)送短信的過程如下。
(1)應(yīng)用程序把短信相關(guān)的信息(包括手機號、內(nèi)容)轉(zhuǎn)換為jSON字符串后放入“發(fā)送短信消息隊列”
(2)發(fā)送短信的守護進程是個在后臺不斷運行的程序,其不斷地檢測“發(fā)送短信消息隊列”是否為空,如果不為空,就把信息從消息
(3)發(fā)送短信的守護進程把短信的內(nèi)容發(fā)送短信平臺的接口
APP開發(fā)經(jīng)驗之set-無序且不重復(fù)的元素集合
1.簡介
在Redis中set類型可以看作是沒有排序、不重復(fù)的元素集合,可以在該類型上添加刪除元素或者判斷某元素存在等操作(這些操作的時間復(fù)雜度是0(1))。
set集合中不允許出現(xiàn)重復(fù)的元素,換句話說,如果多次添加相同的元素set中只保留一份。當(dāng)用戶需要存儲很多的數(shù)據(jù),但又希望不出現(xiàn)重復(fù)的數(shù)據(jù),這個特性就非常有用。另外set類型還提供多個set之間的聚合計算,如求set之間的交集、差集或并集,這些操作是在Redis內(nèi)部完成.效率特別高。
2.?dāng)?shù)據(jù)模型
set類型的數(shù)據(jù)模型如圖7-8所示
制作APP實操經(jīng)驗示意圖7-8set的數(shù)據(jù)模型
在圖7-8中set類型的Value部分是系列不重復(fù)的數(shù)據(jù)集合。
3.應(yīng)用場景
社交類型的App中,有的App當(dāng)用戶進入了一個用戶的主頁后會提示共同好友的信息,以方便用戶擴展社交關(guān)系。提示共同好友的頁面如圖7-9所示。
獲取共同好友的算法如下:把用戶a的所有好友取出來遍歷,和用戶b的所有好友比較,如果相同的話就是共同好友。
上面描述的算法其實就是求兩個集合交集。在Redis的set類型的操作中已經(jīng)包含了求交集的操作slnter。如果把用戶a的好友存儲在集合a中.把用戶b的好友存儲在集合b中,通過求集合a和集合b的交集,就能獲取用戶a和用戶b的共同好友,如圖7-10所示。
APP制作經(jīng)驗示意圖7-10用戶A和用戶B的好友集合
在圖7-10中,Redis中用戶a的好友集合是“Jeff,lom,jack”,用戶b的好友集合是“jack,lerrv,Mike”,對用戶a和用戶b的好友集合求交集,就能得到用戶a和用戶b的共同好友是jack。好了,APP開發(fā)公司關(guān)于利用Redis獲取id數(shù)據(jù)的方法(二)本文就分享到這里。博納網(wǎng)絡(luò)會在下期的文章中繼續(xù)就其他三種方法進行介紹。謝謝關(guān)注。