緩存數(shù)據(jù)到數(shù)據(jù)庫常見策略

1. 概述


這節(jié)課我們就來搭建我們自己的一個數(shù)據(jù)庫框架撇他,首先先來說下我們?yōu)槭裁葱枰ゾ彺鏀?shù)據(jù)到數(shù)據(jù)庫馍悟,這個是我們這節(jié)課的一個重點评姨,如果咱們大家有做新聞類帮坚、資訊類的app盏道,那么凡是涉及到需要展示列表的界面稍浆,不管是用 ListView、RecyclerView顯示的列表猜嘱,都是必須要緩存該列表的數(shù)據(jù)的衅枫,主要的原因有兩點。

2. 原因


原因一:

如果每次進入app時朗伶,比如說我們的應用是一個新聞或者資訊的列表弦撩,那么你每次一打開app,它都會去服務器中去請求列表數(shù)據(jù)论皆,如果說網(wǎng)絡不是特別好益楼,那么可能需要2-3秒或者更長的時間后臺才能返回數(shù)據(jù),然后你再去展示到你的列表中点晴,這樣用戶體驗可能并不是特別好感凤,因為用戶如果一進來app時發(fā)現(xiàn)沒有數(shù)據(jù),什么都沒有粒督,就是一個空白頁面陪竿,這樣可能或多或少都會影響用戶體驗,所以這個時候緩存列表數(shù)據(jù)到數(shù)據(jù)庫就顯得尤為重要坠陈;

原因二:

如果你對需要展示的列表的數(shù)據(jù)去緩存萨惑,那么你完全可以在有網(wǎng)絡的時候讓它去請求網(wǎng)絡,展示最新的數(shù)據(jù)仇矾,如果沒有網(wǎng)絡或者網(wǎng)絡不是特別好的話庸蔼,就去展示緩存中的內(nèi)容,這樣就不至于在app剛一打開就是白屏贮匕,什么都沒有姐仅,這樣用戶體驗就會稍微好一些;

注意:

做緩存的話必須兩端都需要去做緩存刻盐,app端和服務器端需要去做緩存掏膏,那么我們接下來先看下常規(guī)的后臺服務器是以及我們的app,它們是如何做緩存的敦锌。

3. app客戶端和服務器如何做緩存馒疹?


3.1:服務器端緩存方法:

后臺有一個緩存,還有一個數(shù)據(jù)庫乙墙,每次app請求服務器接口時颖变,后臺先去查詢緩存中是否有數(shù)據(jù)生均,如果緩存中有就直接把緩存中的數(shù)據(jù)返回給app就ok,如果緩存中沒有腥刹,就去查詢數(shù)據(jù)庫马胧,然后把數(shù)據(jù)給app返回回來,并且把數(shù)據(jù)再給緩存中保存一份衔峰,這樣下次app再去請求服務器接口時就直接可以把緩存中的數(shù)據(jù)給app返回就可以了佩脊。

套路就是:服務器有一個緩存,一個數(shù)據(jù)庫垫卤,每次app請求接口時服務器端首先先去查緩存威彰,如果緩存有數(shù)據(jù)就直接返回就ok,如果沒有就去查詢數(shù)據(jù)庫葫男,然后把數(shù)據(jù)給app返回回去抱冷,并且把數(shù)據(jù)再給緩存中存儲就ok;

3.2:app緩存方法:

比如OKHttp緩存梢褐,它是自帶緩存旺遮,特點就是如果我們訪問同一個接口,那么它在規(guī)定時間內(nèi)盈咳,是不會去后臺請求數(shù)據(jù)的耿眉,而是直接讀取緩存的,如果超過規(guī)定時間鱼响,就會去后臺請求數(shù)據(jù)鸣剪。

套路就是:比如說規(guī)定時間是60秒,它會首先從本地緩存中查詢數(shù)據(jù)丈积,如果沒有它會去請求服務器數(shù)據(jù)筐骇,在獲取到數(shù)據(jù)之后就會把數(shù)據(jù)給緩存中存儲一份,那么下一次就會直接從緩存中讀取數(shù)據(jù)江滨,而不會去請求服務器數(shù)據(jù)了铛纬,這個就是 OKHttp的緩存。

注意:

一般第三方的聯(lián)網(wǎng)請求緩存基本都是這樣子的緩存的唬滑,比如OKHttp告唆、Retrofit等等這些第三方網(wǎng)絡請求框架的緩存基本都類似。

那么接下來我們就來看下晶密,針對于新聞類app我們應該如何去做緩存擒悬,才能達到一個相對來說比較好的用戶體驗。網(wǎng)上的第三方數(shù)據(jù)庫框架特別多稻艰,比如:GreenDao懂牧、litepal、orm等等尊勿,而且用法基本都類似僧凤,都是一些套路用狱,而且我們必須要把這些套路玩好,玩6,拼弃。但是它們的數(shù)據(jù)庫都是放在 data/data/包名/database目錄下邊的,如果app卸載了那么數(shù)據(jù)庫就沒了摇展。而且我們沒有必要去造輪子吻氧,但是有的時候我們我們還真就得對一些特定場景進行量身定制,這個是我們今天要做的咏连。

3. 新聞類app如何緩存盯孙?


如下圖所示:

新聞類app列表數(shù)據(jù)緩存方式.png

上圖意思就是,以下緩存指的是文件或者數(shù)據(jù)庫都可以:

1>:第一次剛進入app時緩存中肯定沒有數(shù)據(jù)祟滴,這個時候就會去請求服務器拉取最新數(shù)據(jù)振惰,并且也要求服務器最好給自己做一個緩存,把剛請求的數(shù)據(jù)也給自己服務器保存一份垄懂,然后返回數(shù)據(jù)給app端骑晶,這個時候app就去在列表中顯示數(shù)據(jù),并且app客戶端的也需要在文件或者數(shù)據(jù)庫中存儲一份數(shù)據(jù)草慧;
2>:第二次app再次打開的時候需要再次顯示列表數(shù)據(jù)的時候桶蛔,這個時候首先先在自己本地的文件或者數(shù)據(jù)庫查詢,如果有數(shù)據(jù)漫谷,就直接給列表顯示仔雷,與此同時直接去請求服務器拉取最新數(shù)據(jù),如果服務器返回數(shù)據(jù)了舔示,這個時候比較返回的數(shù)據(jù)和自己本地緩存的數(shù)據(jù)碟婆,如果數(shù)據(jù)一樣,就不去刷新界面也不去存入到數(shù)據(jù)庫惕稻,如果不一樣竖共,就去刷新本地列表,然后把新的數(shù)據(jù)再存儲到自己本地的文件或者數(shù)據(jù)庫中就行缩宜。
注意這里的存儲數(shù)據(jù)的方式是以key-value鍵值對存儲肘迎,key是url地址,value值是 返回的json數(shù)據(jù)锻煌,而不是對象妓布,因為對象太大;

就是這樣宋梧,每次進入app列表先從app的緩存中讀取數(shù)據(jù)匣沼,如果有就直接顯示在列表,與此同時直接去請求服務器捂龄,如果服務器有數(shù)據(jù)释涛,就返回給app加叁,然后比較客戶端的數(shù)據(jù)庫中的數(shù)據(jù)與返回的數(shù)據(jù)是否一樣,如果不一樣唇撬,就去重新刷新列表數(shù)據(jù)它匕,然后給緩存中再去存儲一份數(shù)據(jù)即可;

這種緩存就比較適合類似頭條新聞窖认、QQ空間等等的這種數(shù)據(jù)更新比較快的豫柬。

4. 我們?yōu)槭裁匆謩哟罱〝?shù)據(jù)庫框架?


我們之所以自己要手動去搭建數(shù)據(jù)庫框架扑浸,是因為一般第三方的數(shù)據(jù)庫烧给,都是存儲在 data/data/包名/database中的,如果app卸載了喝噪,那么數(shù)據(jù)庫就沒有了础嫡,而我們自己寫的數(shù)據(jù)庫框架,它是存儲在外部存儲卡中酝惧,可以直接導出來查看榴鼎,非常的方便。

那么下節(jié)課我們就來手動搭建我們自己的數(shù)據(jù)庫系奉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檬贰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缺亮,更是在濱河造成了極大的恐慌翁涤,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萌踱,死亡現(xiàn)場離奇詭異葵礼,居然都是意外死亡,警方通過查閱死者的電腦和手機并鸵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門鸳粉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人园担,你說我怎么就攤上這事届谈。” “怎么了弯汰?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵艰山,是天一觀的道長。 經(jīng)常有香客問我咏闪,道長曙搬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮纵装,結(jié)果婚禮上征讲,老公的妹妹穿的比我還像新娘。我一直安慰自己橡娄,他們只是感情好诗箍,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著挽唉,像睡著了一般扳还。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上橱夭,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音桑逝,去河邊找鬼棘劣。 笑死,一個胖子當著我的面吹牛楞遏,可吹牛的內(nèi)容都是我干的茬暇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼寡喝,長吁一口氣:“原來是場噩夢啊……” “哼糙俗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起预鬓,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤巧骚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后格二,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劈彪,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年顶猜,在試婚紗的時候發(fā)現(xiàn)自己被綠了沧奴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡长窄,死狀恐怖滔吠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挠日,我是刑警寧澤疮绷,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站肆资,受9級特大地震影響矗愧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一唉韭、第九天 我趴在偏房一處隱蔽的房頂上張望夜涕。 院中可真熱鬧,春花似錦属愤、人聲如沸女器。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驾胆。三九已至,卻和暖如春贱呐,著一層夾襖步出監(jiān)牢的瞬間丧诺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工奄薇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留驳阎,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓馁蒂,卻偏偏與公主長得像呵晚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沫屡,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理饵隙,服務發(fā)現(xiàn),斷路器沮脖,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評論 25 707
  • panw3i閱讀 323評論 0 0
  • 如今勺届,社會生活工作節(jié)奏加快绷柒,很多人都只能通過電話聲音進行交流。在兩性的感情交往中涮因,人們也正常使用電話來述說一些普通...
    百家之言閱讀 553評論 0 0
  • 降壓歌 高血壓病不可怕,三個穴位搞定它; 太溪太沖加曲池澜掩,每穴不少二百下购披。 堅持按摩兩月余,終生拋棄降壓藥肩榕。 若添...
    莊氏整脊閱讀 698評論 0 2