一.緩存
熱點(diǎn)數(shù)據(jù)(經(jīng)常會被查詢,但是不經(jīng)常被修改或者刪除的數(shù)據(jù)),首選是使用redis緩存.
熱點(diǎn)數(shù)據(jù)如果沒次都需要查詢一次數(shù)據(jù)庫, 當(dāng)訪問量比較大會對數(shù)據(jù)庫造成具大壓力,故經(jīng)常被訪問的數(shù)據(jù)可以查詢一次存放入緩存, 每次查詢時(shí)先查詢緩存,如果緩存中存在直接返回.減輕數(shù)據(jù)庫壓力
注意事項(xiàng): 結(jié)合具體應(yīng)用需要注意一下:
Select 數(shù)據(jù)庫前查詢r(jià)edis,有的話使用redis數(shù)據(jù),放棄select 數(shù)據(jù)庫疏魏,沒有的話,select 數(shù)據(jù)庫晤愧,然后將數(shù)據(jù)插入redis
update或者delete數(shù)據(jù)庫錢大莫,查詢r(jià)edis是否存在該數(shù)據(jù),存在的話先刪除redis中數(shù)據(jù)官份,然后再update或者delete數(shù)據(jù)庫中的數(shù)據(jù)
上面這種操作只厘,如果并發(fā)量很小的情況下基本沒問題,但是高并發(fā)的情況請注意下面場景:
為了update先刪掉了redis中的該數(shù)據(jù)舅巷,這時(shí)候另一個(gè)線程執(zhí)行查詢羔味,發(fā)現(xiàn)redis中沒有,瞬間執(zhí)行了查詢SQL钠右,并且插入到redis中一條數(shù)據(jù)赋元,回到剛才那個(gè)update語句,這個(gè)悲催的線程壓根不知道剛才那個(gè)該死的select線程犯了一個(gè)彌天大錯(cuò)飒房!于是這個(gè)redis中的錯(cuò)誤數(shù)據(jù)就永遠(yuǎn)的存在了下去搁凸,直到下一個(gè)update或者delete。
建議: 對Redis的數(shù)據(jù)進(jìn)行在進(jìn)行更新時(shí), 更新前與更新后都執(zhí)行一次刪除操作
二. 計(jì)數(shù)器
利用Redis是原子性操作, 可實(shí)現(xiàn)多服務(wù)共享某一個(gè)數(shù)據(jù).
例如: 分布式ID生成狠毯、點(diǎn)贊坪仇、閱讀量統(tǒng)計(jì)等場景
三.分布式鎖
在分布式架構(gòu)中, 一個(gè)業(yè)務(wù)ID請求進(jìn)入服務(wù),我們只需要其中一個(gè)服務(wù)為期服務(wù)時(shí), 或者秒殺系統(tǒng),只需要一個(gè)ID能夠獲取的商品時(shí). 這個(gè)時(shí)候可以采用Redis做到僅切只有一個(gè)人獲得服務(wù)權(quán).
String 類型setnx方法,只有不存在時(shí)才能添加成功垃你,返回true(搶到鎖)
四.限流
當(dāng)一個(gè)用戶大量訪問頁面時(shí)候,需要控制訪問次數(shù)時(shí).
以訪問者的ip和其他信息作為key,訪問一次增加一次計(jì)數(shù),超過次數(shù)則返回false
五.分布式跨域session共享
集群模式下惜颇,在應(yīng)用不多的情況下一般使用容器自帶的session復(fù)制功能就能滿足皆刺,當(dāng)應(yīng)用增多相對復(fù)雜的系統(tǒng)中,一般都會搭建以Redis等內(nèi)存數(shù)據(jù)庫為中心的session服務(wù)凌摄,session不再由容器管理羡蛾,而是由session服務(wù)及內(nèi)存數(shù)據(jù)庫管理。
六.最新列表
Redis列表結(jié)構(gòu)锨亏,LPUSH可以在列表頭部插入一個(gè)內(nèi)容ID作為關(guān)鍵字痴怨,LTRIM可用來限制列表的數(shù)量,這樣列表永遠(yuǎn)為N個(gè)ID器予,無需查詢最新的列表浪藻,直接根據(jù)ID去到對應(yīng)的內(nèi)容頁即可。
以上是個(gè)人理解常用的場景, 當(dāng)然Redis還可以做的事情特別多, 在這里就不一一列舉了.