redis原理及實現

1 什么是redis

redis是nosql(也是個巨大的map) 單線程,但是可處理1秒10w的并發(fā)(數據都在內存中)

使用java對redis進行操作類似jdbc接口標準對mysql,有各類實現他的實現類鬼譬,我們常用的是druid

其中對redis恨豁,我們通常用Jedis(也為我們提供了連接池JedisPool)

在redis中,key就是byte

redis的數據結構(value):

String,list,set,orderset,hash

2 redis的使用

先安裝好redis央串,然后運行窄俏,在pom文件中引入依賴,在要使用redis緩存的類的mapper.xml文件配置redis的全限定名岛都。引入redis的redis.properties文件(如果要更改配置就可以使用)

應用場景:

String :

1存儲json類型對象,2計數器,3優(yōu)酷視頻點贊等

list(雙向鏈表)

1可以使用redis的list模擬隊列,堆,棧

2朋友圈點贊(一條朋友圈內容語句,若干點贊語句)

規(guī)定:朋友圈內容的格式:

1,內容: user:x:post:x content來存儲;

2,點贊: post:x:good list來存儲;(把相應頭像取出來顯示)

hash(hashmap)

1保存對象

2分組

3 string與hash的數據差別

在網路傳輸時候,必須要進行進行序列化振峻,才可以進行網路傳輸臼疫,那么在使用string類型的類型的時候需要進行相關序列化,hash也是要進行相關的系列化扣孟,所以會存在很多序列化烫堤,在存儲的時候hash是可以存儲的更加豐富,但是在反序列化的時候凤价,string的反序列化相對較低,而hash的序列化和返序列化是相對hash類更加復雜,所以看業(yè)務場景庶近,如果是數據經常修改的那種胖缤,為了性能可以使用string,如果是數據不是經常改的那種就可以使用hash慢逾,由于hash格粪,存儲數據時比較豐富,可以存儲多種數據類型

4 redis的持久化方式:

能氛改,將內存中的數據異步寫入硬盤中帐萎,兩種方式:RDB(默認)和AOF

RDB持久化原理:通過bgsave命令觸發(fā),然后父進程執(zhí)行fork操作創(chuàng)建子進程胜卤,子進程創(chuàng)建RDB文件疆导,根據父進程內存生成臨時快照文件,完成后對原有文件進行原子替換(定時一次性將所有數據進行快照生成一份副本存儲在硬盤中)

優(yōu)點:是一個緊湊壓縮的二進制文件葛躏,Redis加載RDB恢復數據遠遠快于AOF的方式澈段。

缺點:由于每次生成RDB開銷較大悠菜,非實時持久化,

AOF持久化原理:開啟后败富,Redis每執(zhí)行一個修改數據的命令悔醋,都會把這個命令添加到AOF文件中。

優(yōu)點:實時持久化兽叮。

缺點:所以AOF文件體積逐漸變大芬骄,需要定期執(zhí)行重寫操作來降低文件體積,加載慢

5 redis單線程為什么這么快

redis是單線程的鹦聪,但是為什么還是這么快呢账阻,

原因1: 單線程,避免線程之間的競爭

原因2 :是內存中的泽本,使用內存的淘太,可以減少磁盤的io

原因3:多路復用模型,用了緩沖區(qū)的概念规丽,selector模型來進行的

6 redis主掛了怎么操作

redis提供了哨兵模式蒲牧,當主掛了,可以選舉其他的進行代替赌莺,哨兵模式的實現原理冰抢,就是三個定時任務監(jiān)控,

6.1 每隔10s雄嚣,每個S節(jié)點(哨兵節(jié)點)會向主節(jié)點和從節(jié)點發(fā)送info命令獲取最新的拓撲結構

6.2 每隔2s晒屎,每個S節(jié)點會向某頻道上發(fā)送該S節(jié)點對于主節(jié)點的判斷以及當前Sl節(jié)點的信息,

同時每個Sentinel節(jié)點也會訂閱該頻道缓升,來了解其他S節(jié)點以及它們對主節(jié)點的判斷(做客觀下線依據)

6.3 每隔1s鼓鲁,每個S節(jié)點會向主節(jié)點、從節(jié)點港谊、其余S節(jié)點發(fā)送一條ping命令做一次心跳檢測(心跳檢測機制)骇吭,來確認這些節(jié)點當前是否可達

當三次心跳檢測之后,就會進行投票歧寺,當超過半數以上的時候就會將該節(jié)點當做主

7 redis集群

redis集群在3.0以后提供了ruby腳本進行搭建燥狰,引入了糙的概念,

Redis集群內節(jié)點通過ping/pong消息實現節(jié)點通信斜筐,消息不但可以傳播節(jié)點槽信息龙致,還可以傳播其他狀態(tài)如:主從狀態(tài)、節(jié)點故障等顷链。因此故障發(fā)現也是通過消息傳播機制實現的目代,主要環(huán)節(jié)包括:主觀下線(pfail)和客觀下線(fail)

主客觀下線:

主觀下線:集群中每個節(jié)點都會定期向其他節(jié)點發(fā)送ping消息,接收節(jié)點回復pong消息作為響應。如果通信一直失敗榛了,則發(fā)送節(jié)點會把接收節(jié)點標記為主觀下線(pfail)狀態(tài)在讶。
  
  客觀下線:超過半數,對該主節(jié)點做客觀下線

主節(jié)點選舉出某一主節(jié)點作為領導者霜大,來進行故障轉移构哺。

故障轉移(選舉從節(jié)點作為新主節(jié)點)

8 內存淘汰策略

Redis的內存淘汰策略是指在Redis的用于緩存的內存不足時,怎么處理需要新寫入且需要申請額外空間的數據战坤。

noeviction:當內存不足以容納新寫入數據時曙强,新寫入操作會報錯。

allkeys-lru:當內存不足以容納新寫入數據時湖笨,在鍵空間中旗扑,移除最近最少使用的key蹦骑。

allkeys-random:當內存不足以容納新寫入數據時慈省,在鍵空間中,隨機移除某個key眠菇。

volatile-lru:當內存不足以容納新寫入數據時边败,在設置了過期時間的鍵空間中,移除最近最少使用的key捎废。

volatile-random:當內存不足以容納新寫入數據時笑窜,在設置了過期時間的鍵空間中,隨機移除某個key登疗。

volatile-ttl:當內存不足以容納新寫入數據時排截,在設置了過期時間的鍵空間中,有更早過期時間的key優(yōu)先移除辐益。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末断傲,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子智政,更是在濱河造成了極大的恐慌认罩,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件续捂,死亡現場離奇詭異垦垂,居然都是意外死亡,警方通過查閱死者的電腦和手機牙瓢,發(fā)現死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門劫拗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矾克,你說我怎么就攤上這事页慷。” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵差购,是天一觀的道長四瘫。 經常有香客問我,道長欲逃,這世上最難降的妖魔是什么找蜜? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮稳析,結果婚禮上洗做,老公的妹妹穿的比我還像新娘。我一直安慰自己彰居,他們只是感情好诚纸,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著陈惰,像睡著了一般畦徘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抬闯,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天井辆,我揣著相機與錄音,去河邊找鬼溶握。 笑死杯缺,一個胖子當著我的面吹牛,可吹牛的內容都是我干的睡榆。 我是一名探鬼主播萍肆,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼胀屿!你這毒婦竟也來了塘揣?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤碉纳,失蹤者是張志新(化名)和其女友劉穎勿负,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體劳曹,經...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡奴愉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了铁孵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锭硼。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蜕劝,靈堂內的尸體忽然破棺而出檀头,到底是詐尸還是另有隱情轰异,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布暑始,位于F島的核電站搭独,受9級特大地震影響,放射性物質發(fā)生泄漏廊镜。R本人自食惡果不足惜牙肝,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗤朴。 院中可真熱鬧配椭,春花似錦、人聲如沸雹姊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吱雏。三九已至敦姻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間坎背,已是汗流浹背替劈。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工寄雀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留得滤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓盒犹,卻偏偏與公主長得像懂更,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子急膀,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359