一、為什么使用redis胚宦,redis是一種緩存機(jī)制填大,一般我們的存儲(chǔ)有幾種戒洼,
硬盤存儲(chǔ)
為什么使用硬盤存儲(chǔ),因?yàn)橛脖P存儲(chǔ)可是保證數(shù)據(jù)持持久化允华。
緩存存儲(chǔ)
緩存存儲(chǔ)可以保證數(shù)據(jù)在內(nèi)存中高效的被調(diào)用圈浇。所以我們一般在緩存中存儲(chǔ)一些高點(diǎn)擊,高熱點(diǎn)的數(shù)據(jù)
其實(shí)tomcat中有自帶的緩存靴寂,叫EC-cache磷蜀,因?yàn)樗嵌x在啟動(dòng)容器中,所以其中的大小是有限制的百炬,而且只能在單一的情況下使用褐隆。所以我們不怎么使用
現(xiàn)在比較常用的兩個(gè)緩存服務(wù):
memcache:memcache查詢效率高,能容許并發(fā)量大剖踊。但是它的缺點(diǎn)就是存儲(chǔ)比較單一庶弃,memcache只能存儲(chǔ)String類型的數(shù)據(jù)
redis:現(xiàn)在使用的比較多。為什么使用redis呢德澈,因?yàn)閞edis查詢效率高歇攻,能容許并發(fā)量大,最關(guān)關(guān)鍵的就是梆造,redis支持下列類型數(shù)據(jù)存儲(chǔ):
Stirng 使用方法就是set key value的形式存儲(chǔ)掉伏。查詢就是使用get key的形式完成。這里還要提一下的就是我們常常使用緩存完成一些并發(fā)操作澳窑。例如有兩個(gè)用戶同時(shí)對(duì)一件東西搶購(gòu)斧散。這回造成并發(fā)問(wèn)題。我們可以使用redis摊聋,把我們的問(wèn)題簡(jiǎn)化成鸡捐,我們?cè)趽屬?gòu)的時(shí)候我們其中一個(gè)用戶setnx 一個(gè)數(shù)據(jù)進(jìn)入redis,當(dāng)同時(shí)我們B用戶也需要的時(shí)候也setnx一個(gè)進(jìn)入緩存 發(fā)現(xiàn)存在了就等著A用戶搶購(gòu)?fù)瓿蓤?zhí)行麻裁。才能setnx箍镜,這個(gè)時(shí)候時(shí)間已經(jīng)過(guò)期了,所以我們就完成了一次并發(fā)處理煎源。
expire是用來(lái)處理key失效的時(shí)間的色迂。
hashMap:存儲(chǔ)的方式和使用hmset key value key value的形式完成。獲取就是hgetall 單個(gè)改變就是hset key value的形式手销。
list 使用的是l(r)push? list key value value... 相當(dāng)于我們最基礎(chǔ)的堆操作歇僧。我們要查詢的時(shí)候使用lrange key 范圍來(lái)查詢。
set這個(gè)是用來(lái)去沖的我們是不能存儲(chǔ)相同的數(shù)據(jù)在一個(gè)set里面。查詢兩組set中相同的數(shù)據(jù)诈悍,setinner
不相同的是setdiff
介紹完了祸轮,剩下的就是我們需要講一下,
java中使用jedis來(lái)實(shí)現(xiàn)侥钳。
然后剩下的就是訂閱的思想:
訂閱的思想适袜,舉個(gè)例子:
現(xiàn)在打仗了,司令給1營(yíng)頻道發(fā)了一個(gè)message舷夺,從左側(cè)突襲苦酱。所有一營(yíng)soldiers接受到頻道1的消息,然后就去做這件事情,
換做現(xiàn)在來(lái)說(shuō)呢给猾,就像滴滴打車疫萤,同一個(gè)范圍內(nèi)的很多司機(jī),他們都在等著接單耙册,現(xiàn)在一名乘客開(kāi)始要求乘車,發(fā)送了一個(gè)消息毫捣,在這個(gè)范圍內(nèi)的頻道的司機(jī)們接受到了详拙,就開(kāi)始槍彈。這就是消息訂閱的原理蔓同。一般消息訂閱是不妨在業(yè)務(wù)邏輯上進(jìn)行處理饶辙,單獨(dú)放在另外一套系統(tǒng)里進(jìn)行處理,類似的還有接受短信和消息斑粱。
我們通過(guò)redis進(jìn)行講解弃揽,首先我們需要開(kāi)啟redis的客戶端,然后我們需要使用subscribe 頻道 來(lái)監(jiān)聽(tīng)我們還這個(gè)頻道發(fā)過(guò)來(lái)的消息则北,然后我們發(fā)送一條消息的時(shí)候他們監(jiān)聽(tīng)到了矿微,就是這個(gè)原理。
現(xiàn)在我們不使用redis的訂閱機(jī)制尚揣,因?yàn)楸容^雞肋涌矢,我們一般使用的是AcitveMq來(lái)專門處理這類似消息處理機(jī)制的問(wèn)題。使用publish 頻道來(lái)推送我們的消息快骗。
消息隊(duì)列是個(gè)很重要的東西娜庇,我們需要知道怎么使用ActiveMQ