一仑性、前言
近乎所有與Java相關(guān)的面試都會(huì)問到緩存的問題,基礎(chǔ)一點(diǎn)的會(huì)問到什么是“二八定律”右蹦、什么是“熱數(shù)據(jù)和冷數(shù)據(jù)”诊杆,復(fù)雜一點(diǎn)的會(huì)問到緩存雪崩、緩存穿透何陆、緩存預(yù)熱晨汹、緩存更新、緩存降級(jí)等問題贷盲,這些看似不常見的概念淘这,都與我們的緩存服務(wù)器相關(guān),一般常用的緩存服務(wù)器有Redis巩剖、Memcached等铝穷,而筆者目前最常用的也只有Redis這一種。
如果你在以前面試的時(shí)候還沒有遇到過面試官問你《為什么說Redis是單線程的以及Redis為什么這么快佳魔!》曙聂,那么你看到這篇文章的時(shí)候,你應(yīng)該覺得是一件很幸運(yùn)的事情鞠鲜!如果你剛好是一位高逼格的面試官宁脊,你也可以拿這道題去面試對(duì)面“望穿秋水”般的小伙伴,測試一下他的掌握程度贤姆。
好啦榆苞!步入正題!我們先探討一下Redis是什么霞捡,Redis為什么這么快语稠、然后在探討一下為什么Redis是單線程的?
二弄砍、Redis簡介
Redis是一個(gè)開源的內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)仙畦,它可以用作:數(shù)據(jù)庫、緩存和消息中間件音婶。
它支持多種類型的數(shù)據(jù)結(jié)構(gòu)慨畸,如字符串(String),散列(Hash)衣式,列表(List)寸士,集合(Set)檐什,有序集合(Sorted Set或者是ZSet)與范圍查詢,Bitmaps弱卡,Hyperloglogs 和地理空間(Geospatial)索引半徑查詢乃正。其中常見的數(shù)據(jù)結(jié)構(gòu)類型有:String、List婶博、Set瓮具、Hash、ZSet這5種凡人。
Redis 內(nèi)置了復(fù)制(Replication)名党,LUA腳本(Lua scripting), LRU驅(qū)動(dòng)事件(LRU eviction)挠轴,事務(wù)(Transactions) 和不同級(jí)別的磁盤持久化(Persistence)传睹,并通過 Redis哨兵(Sentinel www.xucaizxyl.com)和自動(dòng)分區(qū)(Cluster)提供高可用性(High Availability)。
Redis也提供了持久化的選項(xiàng)岸晦,這些選項(xiàng)可以讓用戶將自己的數(shù)據(jù)保存到磁盤上面進(jìn)行存儲(chǔ)欧啤。根據(jù)實(shí)際情況,可以每隔一定時(shí)間將數(shù)據(jù)集導(dǎo)出到磁盤(快照)启上,或者追加到命令日志中(AOF只追加文件)堂油,他會(huì)在執(zhí)行寫命令時(shí),將被執(zhí)行的寫命令復(fù)制到硬盤里面碧绞。您也可以關(guān)閉持久化功能,將Redis作為一個(gè)高效的網(wǎng)絡(luò)的緩存數(shù)據(jù)功能使用吱窝。
Redis不使用表讥邻,他的數(shù)據(jù)庫不會(huì)預(yù)定義或者強(qiáng)制去要求用戶對(duì)Redis存儲(chǔ)的不同數(shù)據(jù)進(jìn)行關(guān)聯(lián)。
數(shù)據(jù)庫的工作模式按存儲(chǔ)方式可分為:硬盤數(shù)據(jù)庫和內(nèi)存數(shù)據(jù)庫院峡。Redis 將數(shù)據(jù)儲(chǔ)存在內(nèi)存里面兴使,讀寫數(shù)據(jù)的時(shí)候都不會(huì)受到硬盤 I/O 速度的限制,所以速度極快照激。
(1)硬盤數(shù)據(jù)庫的工作模式:
這里寫圖片描述
(2)內(nèi)存數(shù)據(jù)庫的工作模式:
這里寫圖片描述
看完上述的描述发魄,對(duì)于一些常見的Redis相關(guān)的面試題,是否有所認(rèn)識(shí)了俩垃,例如:什么是Redis励幼、Redis常見的數(shù)據(jù)結(jié)構(gòu)類型有哪些、Redis是如何進(jìn)行持久化的等口柳。