面試題彙總

1. 你們項目哪裏用到redis/Redis你們怎麼用的

erp項目:
1、uuid對應的menuid

品優購:
1、 用戶的購物車。

2、 用戶的支付日誌。

3、 手機對應的驗證碼。

4、 模板id對應的品牌。

5、 模板id對應的規格。

6、 條目名稱對應的模板id。

7、 秒殺id對應的商品。

淘淘商城:
1、 token對應的用戶信息。

想看到更多細節,可以參考JavaEE-面試-redis的面試思路引導

2. 什麼場景會選用redis

1、熱數據:經常會被查詢,但是不經常被修改或者刪除的數據,例如推薦商品、熱門搜索、最新列表

2、計數器:諸如統計點擊數等應用,因爲Redis是單線程,性能效率高,可以避免併發問題。

3、隊列:在一些秒殺搶購中,常常會用到隊列,它能把併發請求變成串行。

4、排行榜:sorted set可以排序

3. redis可以存儲什麼數據類型

key-va-ue

va-ue分爲string、-ist、set、map,map最常用

4. redis具體怎麼存儲

這個是問具體api?

操作可以用jedis或者spring-data-redis。

5. 工作中Redis的持久方案,你們是怎麼做的

持久方案有兩種。RDB和AOF。一種是定時快照,一種是每次操作就緩存一次。

RDB:
RDB方式的持久化是通過快照(snapshotting)完成的,當符合一定條件時Redis會自動將內存中的數據進行快照並持久化到硬盤。RDB是Redis默認採用的持久化方式,在redis.conf配置文件中默認有save 90 1對應操作,一般可以按照自己需求進行優化,在redis.conf中配置dir指定rdb快照文件的位置,配置dbfi-enam指定rdb快照文件的名稱。
AOF持久化(一般不使用):
默認情況下Redis沒有開啓AOF(append on-y fi-e)方式的持久化,可以通過appendon-y參數開啓:appendon-y yes,開啓AOF持久化後每執行一條會更改Redis中的數據的命令,Redis就會將該命令寫入硬盤中的AOF文件。AOF文件的保存位置和RDB文件的位置相同,都是通過dir參數設置的,默認的文件名是appendon-y.aof,可以通過appendfi-ename參數修改:appendfi-ename
appendon-y.aof
對比:
rdb:可以設置間隔多長時間保存一次(redis不用任何配置默認的持久化方案)
優點:讓redis的數據存取速度變快
缺點:服務器斷電時會丟失部分數據(數據的完整性得不到保障)
aof:可以設置實時保存
優點:持久化良好,能夠保障數據的完整性
缺點:大大降低了redis系統的存取速度

6. redis怎麼更新的

Redis更新,方案可以有多種:
方案1:後臺點擊更新緩存按鈕,從DB查找最新數據集合,刪除原緩存數據,存儲新數據到緩存
缺點:更新過程中刪除掉緩存後剛好有業務在查詢,那麼這個時候返回的數據會是空,會影響用戶體驗
方案2:前臺獲取數據時發現沒有緩存數據就會去數據庫同步數據到緩存
缺點:當併發請求獲取緩存數據不存在的時候,就會產生併發的查詢數據的操作
方案3:後臺點擊更新緩存按鈕,從DB查找最新數據集合,這裏不刪除緩存,通過遍歷數據覆蓋和刪除掉無效的數據
缺點:邏輯相對麻煩,而且更新機制無法通用;
方案4:需要操作人員去操作,或者定時調度,提前加載好數據,前臺獲取緩存的時候需要先得到緩存數據對應的Redis Key,然後根據key去讀取緩存數據。
第4種更新方案使用提前加載到緩存,然後在切換需要顯示的緩存數據,可以解決1,2,3中的問題。比如,你可以半夜的時候,進行任務調度,把常用的數據可以先存到redis。
redis內存不足,濫用

7. redis緩存怎麼設置大小

在redis目錄中,找到redis.conf,找到# maxmemory,後面加上maxmemory16gb,就可以修改緩存大小爲16gb

8. Redis怎麼和數據庫同步

方案1:我們會先去redis中判斷數據是否存在,如果存在,則直接返回緩存好的數據。而如果不存在的話,就會去數據庫中,讀取數據,並把數據緩存到Redis中。適用場合:如果數據量比較大,但不是經常更新的情況(比如用戶排行)
方案2:先去redis中判斷數據是否存在,如果存在,則直接更新對應的數據(這一步會把對應更新過的key記錄下來,比如也保存到redis中比如:key爲:save_update_keys【用-push列表記錄】),並把更新後的數據返回給頁面。而如果不存在的話,就會去先更新數據庫中內容,然後把數據保存一份到Redis中。

9. Redis你們怎麼部署的

Redis在生產環境我們會配置成集羣環境,Redis集羣個數爲單數個,所以我們一般會配置成3個以上,爲了保證高可用,會在每臺機器上安裝2個Redis,給每條集羣結點做一個從節點,一點主節點掛了,從節點能立刻頂上。爲了讓Redis集羣更健康,我們還需要配置哨兵策略來監控Redis集羣。

10. redis怎麼做集羣

爲了保證可以進行投票,需要至少3個主節點。每個主節點都需要至少一個從節點,所以需要至少3個從節點,一共需要6臺redis服務器可以使用6個redis實例6個redis實例的端口號,7001~7006,因爲集羣中每個redis除了端口號,其他配置其實一樣,所以我們可以先配置好一個集羣的redis,然後賦值,修改端口號即可。6臺準備完畢之後,需要開啓集羣策略,然後再這基礎上創建集羣環境。

11. redis主從數據如何同步

全量同步:
Redis全量複製一般發生在S-ave初始化階段,這時S-ave需要將Master上的所有數據都複製一份。具體步驟如下:
  1)從服務器連接主服務器,發送SYNC命令;
  2)主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的所有寫命令;
  3)主服務器BGSAVE執行完後,向所有從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令;
  4)從服務器收到快照文件後丟棄所有舊數據,載入收到的快照;
  5)主服務器快照發送完畢後開始向從服務器發送緩衝區中的寫命令;
  6)從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩衝區的寫命令;
增量同步:
Redis增量複製是指S-ave初始化後開始正常工作時主服務器發生的寫操作同步到從服務器的過程。
增量複製的過程主要是主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令
Redis主從同步策略:
主從剛剛連接的時候,進行全量同步;全同步結束後,進行增量同步。當然,如果有需要,s-ave 在任何時候都可以發起全量同步。redis 策略是,無論如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步。

12. 還有怎麼知道redis是否掛了,掛了以後怎麼處理

通過哨兵策略來監聽Redis
哨兵也是 Redis 服務器,只是它與我們平時提到的 Redis 服務器職能不同,哨兵負責監視普通的 Redis 服務器,提高一個服務器集羣的健壯和可靠性。哨兵和普通的 Redis 服務器所用的是同一套服務器框架,這包括:網絡框架,底層數據結構,訂閱發佈機制等。

13. redis穿透怎麼解決

穿透:
緩存穿透是指查詢一個一定不存在的數據,由於緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,造成緩存穿透。
解決方案:
對所有可能查詢的參數以hash形式存儲,在控制層先進行校驗,不符合則丟棄。還有最常見的則是採用布隆過濾器,將所有可能存在的數據哈希到一個足夠大的bitmap中,一個一定不存在的數據會被這個bitmap攔截掉,從而避免了對底層存儲系統的查詢壓力。
也可以採用一個更爲簡單粗暴的方法,如果一個查詢返回的數據爲空(不管是數 據不存在,還是系統故障),我們仍然把這個空結果進行緩存,但它的過期時間會很短,最長不超過五分鐘。

14. redis服務器掛了怎麼辦

Redis-Sentine- redis的哨兵模式
Redis-Sentine-是官方推薦的高可用解決方案,當redis在做master-s-ave的高可用方案時,假如master宕機了,redis本身(以及其很多客戶端)都沒有實現自動進行主備切換,而redis-sentine-本身也是獨立運行的進程,可以部署在其他與redis集羣可通訊的機器中監控redis集羣。
它的主要功能有一下幾點
1、不時地監控redis是否按照預期良好地運行;
2、如果發現某個redis節點運行出現狀況,能夠通知另外一個進程(例如它的客戶端);
3、能夠進行自動切換。當一個master節點不可用時,能夠選舉出master的多個s-ave(如果有超過一個s-ave的話)中的一個來作爲新的master,其它的s-ave節點會將它所追隨的master的地址改爲被提升爲master的s-ave的新地址。
4、哨兵爲客戶端提供服務發現,客戶端鏈接哨兵,哨兵提供當前master的地址然後提供服務,如果出現切換,也就是master掛了,哨兵會提供客戶端一個新地址。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章