日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis面试题相关知识整理

發布時間:2024/1/17 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis面试题相关知识整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis面試題相關知識整理

  • 1.Redis的應用場景
  • 2.Redis的特點
  • 3.Redis對各種數據類型的操作
  • 4.Redis的持久化機制
  • 5.Redis的緩存穿透/緩存擊穿/緩存雪崩問題
  • 6.Redis的主從復制架構, sentinel哨兵模式
  • 7.memcache與redis的區別
  • 8.單線程的redis為什么這么快
  • 9.Redis的過期策略以及內存淘汰機制
  • 10.Redis為什么是單線程的
  • 11.有沒有嘗試進行多機redis的部署? 如何保證數據一致的?
  • 12.對于大量的請求怎么處理
  • 13.Redis常見性能問題和解決方案
  • 14.Redis實現分布式鎖
  • 15.Redis里面有1億個key, 其中有10w個key是以某個固定的已知的前綴開頭的, 如何將他們全部找出來

nosql數據庫的特點: 一切皆字節

1.Redis的應用場景

1.排行榜應用, 取topN操作(sorted set)
2.計數器應用(string)
?redis的命令都是原子性的, 你可以輕松地利用INCR, DECR命令來構建計數器系統
3.去重操作(set), 獲取某段時間所有數據結果(排重)
4.構建隊列系統
?使用list可以構建隊列系統, 使用sorted set甚至可以構建有優先級的隊列系統
5.緩存操作
?將數據直接存放到內存中, 性能優于Memcached, 數據結構更多樣化
6.實時系統
7.保存對象(hash)

2.Redis的特點

高效率: redis的讀取的速度大約11w次/s, 寫的速度大于8.1w次/s
原子性: redis的所有操作都是原子性的.
穩定性: 持久化, 主從復制(集群)
支持多種數據結構: String, hash, list, set, sorted set
其他特性: 支持過期時間, 支持單行事務, 消息訂閱

3.Redis對各種數據類型的操作

String:
?set key value get key getset key value
?incr key decr key
?setex key seconds value setnx key value

?strlen key
hash:
?hset key field value hget key field
?hkeys key hvals key

?hexist key field
list:
?lpushx key value rpushx key value llen key
?lpop key rpop key
?rpoplpush source destination

set:
?sadd key member1 member2 spop key
?ismember key member
sorted set:
?zadd key score member zrem key member
key:
?flushdb 清空redis數據
?keys pattern 模糊匹配
?expire key seconds ttl key
del key

4.Redis的持久化機制

RDB: (默認開啟)
?redis提供的一種基于快照機制實現的持久化方案. 而快照就類似于照相機, 會將一個服務器某個時刻的一個狀態整體保存下來, 快照文件一般都非常的小
?save 900 1
?save 300 10
?save 60 10000
AOF:
?redis提供的一種基于日志機制實現的持久化方案, 會將用戶操作的所有命令整體的記錄下來保存到日志文件中
?appendonly yes
?appendfsync always/everysec/no

5.Redis的緩存穿透/緩存擊穿/緩存雪崩問題

redis的緩存穿透問題:
?緩存穿透是指查詢一條數據庫中沒有且緩存中沒有的一條數據, 查了一遍緩存一遍數據庫(這兩次查詢都是多余的), 緩存穿透的解決方案有以下兩種:
?1.緩存空對象: 代碼維護較簡單, 但是效果不好
?2.布隆過濾器: 代碼維護復雜, 效果很好
redis的緩存擊穿問題:
?指一個key非常熱點, 在不停的扛著大并發, 大并發集中對這一個點進行訪問, 當這個key在失效的瞬間, 持續的大并發就穿破緩存,直接請求數據庫, 瞬間對數據庫的訪問壓力增大
?緩存擊穿這里強調的是并發, 造成緩存擊穿的原因有以下兩個:
??1.該數據沒有人查詢過, 第一次就大并發的訪問(冷門數據)
??2.添加到了緩存, redis有設置數據失效時間, 這條數據剛好失效, 大并發訪問(熱點數據)
redis的緩存雪崩問題:
?指在某一個時間段, 緩存集中過期失效, 此刻無數的請求直接繞開緩存, 直接請求數據庫
?造成緩存雪崩的原因, 有以下兩種:
??1.redis宕機
??2.大部分數據失效
?解決辦法:
??大多數系統設計者考慮用加鎖(最多的解決方案)或者隊列的方式保證來保證不會有大量的線程對數據庫一次性進行讀寫, 從而避免失效時大量的并發請求落到底層存儲系統上. 還有一個簡單方案就是將緩存失效時間分散開.
補充: 緩存更新
?除了緩存服務器自帶的緩存失效策略之外(Redis默認有6種策略), 我們還可以根據具體的業務需求進行自定義的緩存淘汰, 常見的策略有兩種:
?1.定時取清理過期的緩存 定期刪除
?2.當有用戶請求過來時, 再判斷這個請求所用到的緩存是否過期, 過期的話就去底層系統得到新數據并更新緩存. 惰性刪除
?兩者各有優劣, 第一種的缺點是維護大量緩存的key比較麻煩, 第二種的缺點就是每次用戶請求過來都要判斷緩存失效, 邏輯相對比較復雜! 具體用哪種方案, 大家可以根據自己的應用場景來權衡.

6.Redis的主從復制架構, sentinel哨兵模式

Redis的主從復制架構:
?在redis中, 用于可以通過執行SLAVEOF命令或者設置slaveof選項, 讓一個服務器去復制(replicate)另一個服務器, 我們稱呼被復制的服務器為主服務器(master), 而對主服務器進行復制的服務器被稱為從服務器(slave)
sentinel哨兵模式:
?sentinel架構是在redis主從復制架構的基礎上的
?sentinel(哨兵)是redis的高可用性解決方案: 由一個或多個sentinel實例組成的sentinel系統可以監視多個主服務器, 以及這些主服務器屬下的所有從服務器, 并在被監視的主服務器進入下線狀態時, 自動將下線主服務器屬下的某個從服務器升級為新的主服務器

7.memcache與redis的區別

1.存儲方式: memcache全存內存, redis存內存, 可持久化到磁盤
2.memcache支持字符串類型, redis支持string, hash, list, set, sorted set
3.redis支持數據備份.(主從復制架構)

8.單線程的redis為什么這么快

1.純內存操作
2.單線程操作
3.采用了非阻塞的? I/O多路復用機制

9.Redis的過期策略以及內存淘汰機制

Redis的過期策略:
?redis采用的是定期刪除 + 惰性刪除策略.
定期刪除: redis默認每100ms檢查, 是否有過期的key, 有則刪除對應key(隨機采樣 3/5/10)
惰性刪除: 獲取某個key時, redis檢查這個key是否過期, 過期則刪除

內存淘汰機制:
maxmemory-policy: 當內存達到maxmemory時,采用的內存回收策略:
?1.volatile-lru: 針對設置了過期時間的key采用lru算法進行回收
?2.allkeys-lru: 對所有鍵采用lru算法進行回收
?3.volatile-random: 針對設置了過期時間的鍵采用隨機回收
?4.allkeys-random: 對所有鍵隨機回收
?5.volatile-ttl: 過期時間最近(TTL最小)的鍵進行回收
?6.noeviction: 不進行任何回收, 對寫操作返回錯誤

關于LRU算法的補充:
? 大概就是說將Unix中的時間戳經過LRU算法后轉換為一種新的時間戳, Redis使用這個新的時間戳來計算過期時間.

想了解更多可查看這篇博客:
Redis底層詳解(八) LRU 算法:
https://blog.csdn.net/WhereIsHeroFrom/article/details/86501571

10.Redis為什么是單線程的

redis基于內存的操作, CPU不是Redis的瓶頸, 內存大小或網絡帶寬是, 且單線程容易實現.
也因為單線程, 所以redis的操作是原子性的, 只支持單行事務

11.有沒有嘗試進行多機redis的部署? 如何保證數據一致的?

主從復制, 讀寫分離
一類是主數據庫(master) 一類是從數據庫(slave), 主數據庫可以進行讀寫操作, 當發生寫操作的時候自動將數據同步到從數據庫, 而從數據庫一般是只讀的, 并接收主數據庫同步過來的數據.

12.對于大量的請求怎么處理

redis是一個單線程程序, 也就是說同一時刻它只能處理一個客戶端請求;
redis是通過IO多路復用來處理多個客戶端請求的

想了解更多可查看這篇博客:
redis實現高并發機制的原理及redis運行原理:
https://blog.csdn.net/m0_46459526/article/details/107130908?

13.Redis常見性能問題和解決方案

1.master最好不要做任何持久化工作
2.數據比較重要時, 可在slave開啟AOF everysec
3.避免在壓力大的主庫上增加從庫
4.主從復制不要用圖狀結構, 用單向鏈表結構更為穩定, 即:master <- slave1 <- slave2 <- slave3…

14.Redis實現分布式鎖

Redis中可以使用setnx命令實現分布式鎖, 再用expire給鎖加一個過期時間防止忘記了釋放
將key的值設置為value, 當且僅當key不存在. 若給定的key已經存在, 則setnx不做任何動作
解鎖:
使用del key命令就能釋放鎖
set指令有非常復雜的參數,這個應該是可以同步把setnx和expire合成一個條指令來用.

15.Redis里面有1億個key, 其中有10w個key是以某個固定的已知的前綴開頭的, 如何將他們全部找出來

使用keys pattern指定可以找出指定模式的key列表

總結

以上是生活随笔為你收集整理的Redis面试题相关知识整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。