1. Redis 是什么?**都有哪些使用場(chǎng)景?**
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的相城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!我們先來(lái)理解經(jīng)典的CAP理論:
一致性:是指從數(shù)據(jù)層面來(lái)看的一致性。
可用性:是指從系統(tǒng)層面的可用性。
容錯(cuò)性:是指從網(wǎng)絡(luò)層面的的容錯(cuò)性。
數(shù)據(jù)庫(kù)逐漸從關(guān)系數(shù)據(jù)庫(kù)向不同領(lǐng)域不同層次分化。隨著讀多寫(xiě)少場(chǎng)景的出現(xiàn),導(dǎo)致需要讀取數(shù)據(jù)的時(shí)間變慢,為了提升性能,出現(xiàn)了數(shù)據(jù)庫(kù)緩存技術(shù),對(duì)數(shù)據(jù)庫(kù)的讀取進(jìn)行分離。web2.0時(shí)代,網(wǎng)民的生產(chǎn)力大增,存儲(chǔ)總量也在增加,目前還是讀多寫(xiě)少模式,原有的緩存技術(shù)顯然不能滿足寫(xiě)的壓力,所以,出現(xiàn)了分庫(kù)分表,實(shí)現(xiàn)讀寫(xiě)分離。其中比較常用的一種緩存技術(shù)是用Redis做緩存。
Redis是什么?
Redis是一個(gè)基于內(nèi)存且支持持久化的key-value的NoSQL數(shù)據(jù)庫(kù),其中每個(gè)key和value都是使用對(duì)象表示的,具有以以下特征:多樣數(shù)據(jù)類(lèi)型、持久化、主從同步。
和Memcached類(lèi)似,它支持存儲(chǔ)的value類(lèi)型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數(shù)據(jù)類(lèi)型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。
在此基礎(chǔ)上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的使用RDB快照的方式,把更新的數(shù)據(jù)寫(xiě)入磁盤(pán)或者使用類(lèi)似MySQL的AOF日志方式把修改操作寫(xiě)入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。Redis支持將數(shù)據(jù)同步到多臺(tái)從數(shù)據(jù)庫(kù)上,這種特性對(duì)提高讀取性能非常有益。
Redis3.0版本允許單點(diǎn)故障,它沒(méi)有中心節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)地位一樣,擴(kuò)展性很好,節(jié)點(diǎn)間的采用二進(jìn)制通信,節(jié)點(diǎn)與客戶端采用ascII協(xié)議通信。
綜上所述,Redis可用于緩存、數(shù)據(jù)庫(kù)、消息中間件。
Redis 使用場(chǎng)景:
記錄帖子點(diǎn)贊數(shù)、點(diǎn)擊數(shù)、評(píng)論數(shù);
緩存近期熱帖;
緩存文章詳情信息;
2. Redis 有哪些功能?
數(shù)據(jù)緩存功能
分布式鎖的功能
支持?jǐn)?shù)據(jù)持久化
支持事務(wù)
3. Redis 和 memcache 有什么區(qū)別?
存儲(chǔ)方式不同:memcache 把數(shù)據(jù)全部存在內(nèi)存之中,斷電后會(huì)掛掉,數(shù)據(jù)不能超過(guò)內(nèi)存大??;Redis 有部份存在硬盤(pán)上,這樣能保證數(shù)據(jù)的持久性。
數(shù)據(jù)支持類(lèi)型:memcache 對(duì)數(shù)據(jù)類(lèi)型支持相對(duì)簡(jiǎn)單;Redis 有復(fù)雜的數(shù)據(jù)類(lèi)型。
使用底層模型不同:它們之間底層實(shí)現(xiàn)方式,以及與客戶端之間通信的應(yīng)用協(xié)議不一樣,Redis 自己構(gòu)建了 vm 機(jī)制,因?yàn)橐话愕南到y(tǒng)調(diào)用系統(tǒng)函數(shù)的話,會(huì)浪費(fèi)一定的時(shí)間去移動(dòng)和請(qǐng)求。
4. Redis 為什么是單線程的?
因?yàn)?cpu 不是 Redis 的瓶頸,Redis 的瓶頸最有可能是機(jī)器內(nèi)存或者網(wǎng)絡(luò)帶寬。既然單線程容易實(shí)現(xiàn),而且 cpu 又不會(huì)成為瓶頸,那就順理成章地采用單線程的方案了。
關(guān)于 Redis 的性能,官方網(wǎng)站也有,普通筆記本輕松處理每秒幾十萬(wàn)的請(qǐng)求。
而且單線程并不代表就慢 nginx 和 nodejs 也都是高性能單線程的代表。
5. 什么是緩存穿透?**怎么解決?**
緩存穿透:指查詢(xún)一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中時(shí)需要從數(shù)據(jù)庫(kù)查詢(xún),查不到數(shù)據(jù)則不寫(xiě)入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到數(shù)據(jù)庫(kù)去查詢(xún),造成緩存穿透。
解決方案:最簡(jiǎn)單粗暴的方法如果一個(gè)查詢(xún)返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故障),我們就把這個(gè)空結(jié)果進(jìn)行緩存,但它的過(guò)期時(shí)間會(huì)很短,最長(zhǎng)不超過(guò)五分鐘。
6. Redis 支持的數(shù)據(jù)類(lèi)型有哪些?
Redis 支持的數(shù)據(jù)類(lèi)型:string(字符串)、list(列表)、hash(字典)、set(集合)、zset(有序集合)。
7. Redis 支持的 Java 客戶端都有哪些?
支持的 Java 客戶端有 Redisson、jedis、lettuce 等。
8. jedis 和 Redisson 有哪些區(qū)別?
jedis:提供了比較全面的 Redis 命令的支持。
9. 怎么保證緩存和數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性?
合理設(shè)置緩存的過(guò)期時(shí)間。
10. Redis 持久化有幾種方式?
Redis 的持久化有兩種方式,或者說(shuō)有兩種策略:
RDB(Redis Database):指定的時(shí)間間隔能對(duì)你的數(shù)據(jù)進(jìn)行快照存儲(chǔ)。
11. Redis 怎么實(shí)現(xiàn)分布式鎖?
Redis 分布式鎖其實(shí)就是在系統(tǒng)里面占一個(gè)“坑”,其他程序也要占“坑”的時(shí)候,占用成功了就可以繼續(xù)執(zhí)行,失敗了就只能放棄或稍后重試。
占坑一般使用 setnx(set if not exists)指令,只允許被一個(gè)程序占有,使用完調(diào)用 del 釋放鎖。
12. Redis 分布式鎖有什么缺陷?
Redis 分布式鎖不能解決超時(shí)的問(wèn)題,分布式鎖有一個(gè)超時(shí)時(shí)間,程序的執(zhí)行如果超出了鎖的超時(shí)時(shí)間就會(huì)出現(xiàn)問(wèn)題。
13. Redis 如何做內(nèi)存優(yōu)化?
盡量使用 Redis 的散列表,把相關(guān)的信息放到散列表里面存儲(chǔ),而不是把每個(gè)字段單獨(dú)存儲(chǔ),這樣可以有效的減少內(nèi)存使用。比如將 Web 系統(tǒng)的用戶對(duì)象,應(yīng)該放到散列表里面再整體存儲(chǔ)到 Redis,而不是把用戶的姓名、年齡、密碼、郵箱等字段分別設(shè)置 key 進(jìn)行存儲(chǔ)。
14. Redis 淘汰策略有哪些?
volatile-lru:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. db[i]. expires)中挑選最近最少使用的數(shù)據(jù)淘汰。
volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. db[i]. expires)中挑選將要過(guò)期的數(shù)據(jù)淘汰。
volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. db[i]. expires)中任意選擇數(shù)據(jù)淘汰。
allkeys-lru:從數(shù)據(jù)集(server. db[i]. dict)中挑選最近最少使用的數(shù)據(jù)淘汰。
allkeys-random:從數(shù)據(jù)集(server. db[i]. dict)中任意選擇數(shù)據(jù)淘汰。
15. Redis 常見(jiàn)的性能問(wèn)題有哪些?**該如何解決?**
主服務(wù)器寫(xiě)內(nèi)存快照,會(huì)阻塞主線程的工作,當(dāng)快照比較大時(shí)對(duì)性能影響是非常大的,會(huì)間斷性暫停服務(wù),所以主服務(wù)器最好不要寫(xiě)內(nèi)存快照。
結(jié)語(yǔ)
就以這段話自勉、共勉吧。越努力、越幸運(yùn),如果你不是官二代、富二代、紅二代,那么請(qǐng)記?。呵趭^才是改變你命運(yùn)的唯一捷徑。
歡迎在留言區(qū)留下你的觀點(diǎn),一起討論提高。如果今天的文章讓你有新的啟發(fā),學(xué)習(xí)能力的提升上有新的認(rèn)識(shí),歡迎轉(zhuǎn)發(fā)分享給更多人。
歡迎各位讀者加入程序員**知識(shí)碼頭**技術(shù)群,在公眾號(hào)后臺(tái)回復(fù)“加群”即可。
猜你還想看
關(guān)注「程序員知識(shí)碼頭」,收看更多精彩內(nèi)容
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。