免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
java面試題 --- Redis①

1. Redis 是什么?

  • 非關(guān)系型的內(nèi)存數(shù)據(jù)庫,因為數(shù)據(jù)存儲在內(nèi)存中,因此速度非???。

2. Redis 支持哪些數(shù)據(jù)類型?

  • string:鍵值對存儲,類似 Java 中的 HashMap,一個 key 對應(yīng)一個 value,value 最大為 512M;
  • list:一個雙向鏈表,支持從兩端去操作數(shù)據(jù);
  • set:無序不重復(fù)的集合,類似 Java 的 HashSet,可以方便地求兩個集合的交集差集并集等;
  • zset:與 set 相比,多了一個表示優(yōu)先級的 score,可以用來做排行榜;
  • hash:映射表,一個 key 對應(yīng)一組鍵值對,適合用來存儲對象;

3. Redis 有哪些應(yīng)用場景?

  • 做緩存,存儲熱點(diǎn)數(shù)據(jù);
  • 做分布式鎖;
  • 做消息隊列;

4. 說說 Redis 的線程模型

  • Redis 基于 Reactor 模式開發(fā)了網(wǎng)絡(luò)事件處理器,被稱為文件事件處理器;
  • Reactor 模式就是由一個非阻塞的線程來接收所有請求,然后再分派不同的 handler中去執(zhí)行具體邏輯;
  • Redis 的文件事件處理器由多個套接字、IO多路復(fù)用程序、文件事件分派器和事件處理器構(gòu)成;
  • Redis 的文件事件處理器首先使用 IO 多路復(fù)用程序監(jiān)聽多個套接字,并根據(jù)套接字執(zhí)行的任務(wù)來為套接字關(guān)聯(lián)事件處理器;當(dāng)被監(jiān)聽的套接字要執(zhí)行 accept、read、write 等操作時,文件事件分派器就會調(diào)用之前關(guān)聯(lián)好的事件處理器來執(zhí)行相關(guān)操作。

5. Redis 到底是多線程的還是單線程的?

  • 整個 Redis 并不是單線程的,但是執(zhí)行命令的模塊是單線程的,所以我們說 Redis 是單線程的;另外,Redis 6.0 開始,對于網(wǎng)絡(luò)事件的讀寫也引入了多線程,不過執(zhí)行命令的模塊還是單線程的。

6. 對于 Redis 管道技術(shù)有了解嗎?

  • 管道技術(shù)是一種客戶端技術(shù),通過客戶端執(zhí)行 redis 命令的時候,正常流程是客戶端請求服務(wù)端,服務(wù)端執(zhí)行完了給客戶端響應(yīng),客戶端收到響應(yīng)后繼續(xù)請求服務(wù)端發(fā)送下一個執(zhí)行的命令。就是每執(zhí)行一條命令就需要經(jīng)過 “請求 --- 響應(yīng)” 這么一個來回。要執(zhí)行的命令一多,這樣的來回在網(wǎng)絡(luò)中的消耗也就變多了,管道技術(shù)的原理簡單地說就是把所有的命令先發(fā)送過去,然后等服務(wù)端執(zhí)行完統(tǒng)一響應(yīng),這樣就減少了網(wǎng)絡(luò)消耗。

7. 什么是 Redis 的事務(wù)?

  • Redis 事務(wù)和關(guān)系型數(shù)據(jù)庫的事務(wù)不一樣,它是一組命令的集合,可以保證一組命令按照順序執(zhí)行,其他客戶端提交過來的命令不能插入到事務(wù)管理的命令集合中。它不保證原子性,單條命令的執(zhí)行是原子性的,但是不能保證一組命令的執(zhí)行的原子性,即事務(wù)管理的某個命令執(zhí)行失敗了,其他命令還是會執(zhí)行,也不支持回滾。事務(wù)相關(guān)命令有:watch,監(jiān)視一個或多個 key,如果 key 被別的客戶端修改,則事務(wù)被打斷;multi,開啟事務(wù);exec,執(zhí)行事務(wù);discard,丟棄事務(wù);unwatch,取消對 key 的監(jiān)視。

8. 你是如何保證 Redis 數(shù)據(jù)的可靠性的?
對 Redis 進(jìn)行持久化。持久化的方式有兩種,RDB 和 AOF。

  • RDB 就是每隔一段時間以快照的方式將內(nèi)存中的數(shù)據(jù)保存到磁盤的 dump.rdb 文件中,默認(rèn)開啟。觸發(fā) RDB 的方式有兩種,手動觸發(fā)和自動觸發(fā)。手動觸發(fā)就是手動執(zhí)行 SAVE 或者 BGSAVE 命令,SAVE 會阻塞服務(wù)器進(jìn)程,而 BGSAVE 會在后臺完成執(zhí)行。自動觸發(fā)策略可以在 Redis 的配置文件中進(jìn)行配置,比如 save 1000 1,就是在 1000 秒內(nèi),至少有 1 條數(shù)據(jù)發(fā)生了變化,那就會觸發(fā) BGSAVE,就數(shù)據(jù)寫到磁盤中,這種策略可以配置多條。RDB 的缺點(diǎn)很明顯,就是可能會導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失,優(yōu)點(diǎn)就是恢復(fù)數(shù)據(jù)比較快。
  • AOF 就是會記錄寫操作的命令,追加到 appendonly.aof 文件中,Redis 還會對 appendonly.aof 文件進(jìn)行重寫,去掉重復(fù)命令,減小其體積。重寫也可以手動觸發(fā)和自動觸發(fā),手動觸發(fā)就是執(zhí)行 BGREWRITEAOF 命令即可重寫 AOF 文件,自動觸發(fā)可以在配置文件中配置策略,比如 auto-aof-rewrite-percentage 100 表示文件增量大于 100% 時進(jìn)行重寫,auto-aof-rewrite-min-size 64mb 表示 AOF 文件體積大于 64m 時就進(jìn)行重寫??梢栽谂渲梦募信渲?AOF 的寫入命令的策略,appendfsync Everysec 表示每秒記錄一次,默認(rèn)就是該策略,還可以配置 appendfsync Always,記錄每次寫操作, appendfsync No,由操作系統(tǒng)決定何時記錄寫操作。AOF 的優(yōu)點(diǎn)是可以不造成數(shù)據(jù)的丟失,缺點(diǎn)是 IO 操作比較多。

一般會同時開啟 RDB 和 AOF,同時開啟的情況下,會優(yōu)先根據(jù) AOF 文件來恢復(fù)數(shù)據(jù)。


9. 如何保證 Redis 中的數(shù)據(jù)都是熱點(diǎn)數(shù)據(jù)?
當(dāng) Redis 中的數(shù)據(jù)集上升到一定程度后,會根據(jù)內(nèi)存淘汰策略淘汰數(shù)據(jù)。內(nèi)存淘汰策略有如下幾種:

  • noeviction:內(nèi)存不足時寫操作報異常;
  • allkeys lru:在所有 key 中選擇最近最少使用的進(jìn)行刪除;
  • allkeys random:在所有 key 中隨機(jī)選擇一個進(jìn)行刪除;
  • volatile lru:在過期 key 中選擇最近最少使用的進(jìn)行刪除;
  • volatile random:在過期 key 中隨機(jī)選擇一個刪除;
  • volatile ttf:優(yōu)先刪除更早過期的 key。

10. 對于過期的 key,Redis 是如何處理的?
Redis 有三種過期鍵刪除策略:

  • 定時過期:到了過期時間就刪除,對內(nèi)存友好,但是對 CPU 不太友好;
  • 惰性過期:當(dāng)用到了 key 的時候去判斷是否過期了,過期了就刪除,對 CPU 友好,但是對內(nèi)存不太友好;
  • 定期過期:定期檢查 key 是否過期,過期就進(jìn)行刪除;

Redis 同時使用了惰性過期和定期過期兩種策略。


掃描二維碼

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
狂神說Java——Redis最全教程
Redis高級特性及應(yīng)用場景
讀完這篇文章,就基本搞定了Redis數(shù)據(jù)庫
Redis 指南
Redis的數(shù)據(jù)類型、事務(wù)以及持久化
《我想進(jìn)大廠》之Redis奪命連環(huán)11問
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服