Redis面試筆記大全

整理的Redis筆記大全,非常的全,歡迎一起交流學習。

1.什麼是redis?

Redis 是一個基於內存的高性能key-value數據庫。 

 

2.Reids的特點  

1) Key-Value類型的內存數據庫,

2)支持保存多種數據結構,

3)Redis的主要缺點是數據庫容量受到物理內存的限制,不能用作海量數據的高性能讀寫,

 

3.使用redis有哪些好處?   

(1) 速度快 
(2) 支持豐富數據類型,支持string,list,set,sorted set,
hash 
(3) 支持事務,

(4) 豐富的特性:可用於緩存,消息,按key設置過期時間,過期後將會自動刪除

 

4.redis相比memcached有哪些優勢?   

(1) memcached所有的值均是簡單的字符串,redis作爲其替代者,支持更爲豐富的數據類型 
(2) redis的速度比memcached快很多

(3) redis可以持久化其數據

 

5.redis持久化的幾種方式

1)、快照(snapshots),rdb策略
  默認開啓,Redis把數據快照存放在磁盤上的二進制文件中,文件名爲dump.rdb。你可以配置Redis的持久化策略,例如數據集中每N秒鐘有超過M次更新,就將數據寫入磁盤;或者你可以手工調用命令SAVE或BGSAVE。

下面是默認的快照保存配置

save 900 1

save 300 10

save 60 10000
2)、
AOF
  快照模式並不十分健壯,當系統停止,或者無意中Redis被kill掉,最後寫入Redis的數據就會丟失。你可以在配置文件中打開AOF模式,每一秒持久化一次。

默認沒開啓,每秒一次,只要有寫操作即備份系統


6.redis 最適合的場景  

(1)、會話緩存(Session Cache),購物車信息

(2)、全頁緩存(FPC)

(3)、隊列
(4),排行榜/計數器

(5)、發佈/訂閱

 

7.Redis支持的Java客戶端都有哪些?

Redisson、Jedis

 

8.文章點擊排行榜,由文章名稱和點擊次數構成,使用哪個數據類型比較方便?

zset,分數、排序(默認根據分數從小到大排序)

 

9.如何用string數據類型表達mysql中的一行數據?

可以將整行表示成一個json字符串

10.如果存儲一個班學生的身份證,並且方便統計總個數,用哪個數據類型?

1)set,scard

2)hash,hlen

 

11.zset的分數是什麼意思?

分數就是一個double類型的數字,比較精密。

 

12.如何根據分數大小倒序排列?

zrevrange

 

13.查找分數在80-90分之間的學生姓名

zrangbyscore kaoshi 80 90

 

14.如何立即(實時)備份?

save: 阻塞 Redis 主進程,直到保存完成爲止

bgsave: fork 出一個子進程,異步備份

 

15.RDB默認配置文件名後綴是什麼?

dump.rdb

 

16.如何開啓AOF持久化?

appendonly yes 

 

17.你如何理解redis集羣的水平擴展?

水平擴展/橫向擴展,只需要增加/減少機器即可,原來的結構不需要改變。有16384個槽,這是可能需要重新劃分槽。

 

18.解釋CAP?

CAP理論

C:consistency(一致性):數據能在多個副本之間保持一致性

A:avalibility(可用性) :對於用戶的每一個操作在一定時間段內都應該有響應

P:Partition-tolerence to partition(分區容錯性):分佈式網絡中部分網絡不可用時, 系統依然正常對外提供服務

三者不可共存,可用性和一致性是一對冤家,在容忍網絡分區的前提下,要麼犧牲數據的一致性,要麼犧牲寫操作的可用性。

redis滿足AP,放棄了部分C,這是redis的CAP策略。

 

19.如何理解分區容錯性:分佈式系統在遇到任何網絡分區故障的時候,仍然能夠保證對外提供滿足一致性和可用性的服務,除非是整個網絡環境都發生了故障。

20.一臺主庫可以擁有多個從庫,但是一個從庫只能隸屬於一個主庫,對嗎?

對,也就是說在主從架構中只有一個master

 

21.redis集羣的負載均衡策略?

分槽

 

23.什麼是守護進程?如何在守護進程模式下運行redis?

daemize yes

 

24.如何修改redis實例的運行端口?

port 6380

 

25.如何關閉redis?

shutdown save|unsave命令

./redis-cli -p 6379 shutdown

 

26.如何手動進行持久化?

save

bgsave

 

27.寫出登錄主機192.168.3.3上端口爲7000密碼爲ads999的redis實例的命令?

redis-cli -h 192.168.3.3 -p 7000 -a ads999

 

28.如何獲取一個key還有多長時間過期?

ttl keyname

-1 永不過期

-2 已經過期

5 還剩5秒過期

 

29.如何從第5個庫中隨機獲取一個key的名稱,寫出命令?

select 4

randomkey

 

30.key值可以修改嗎?如何能修改的話如何修改?

可以,rename oldname newname

 

31.如何獲取第5個庫內key的總個數?寫出命令

select 4

dbsize

 

32.如何判斷一個key的數據類型?

type

 

33.如何判斷wangming是不是屬於集合student中的元素?

SISMEMBER students wangming

 

34.如何爲一個redis添加訪問密碼?

redis.conf

requirepass admin132

 

35.rdb持久化和aof持久化的不同之處?默認恢復時先讀取哪種持久化文件?

先選擇aof.

 

36.如果在一個主從複製架構中,爲了提高整個架構的吞吐率,在master中持久化好還是在slave中持久化好?

slave

37.主從架構中,一個master可以有N多個slave,對嗎?各個slave之間是什麼關係?

1)第一種架構,一主多從,各個slave沒有關係,但是數據各個slave最終一致。因爲是異步複製,所以不保證實時一致。

2)第二種架構,級聯關係,slave有關係、

 

38.主從架構中,master和所有slave的值最終都是一樣的,對嗎?

對。

 

39.一個redis集羣至少要3個master,可以沒有slave也可以有多個slave,對嗎?

對,最小的配置時3個master,0個slave.

 

40.一個redis集羣如果要求每個master必須有1個slave的話,該集羣至少需要6個redis實例,對嗎?

對。

 

41.解釋一下主從之間的異步複製?

在複製的同時也可以響應客戶端的請求,不必等待複製成功再響應用戶。

異步複製代理的結果就是我們並不知道複製是否成功,不能100%確定是否複製成功,不是實時的。

 

42.集羣中的master實例是彼此互聯的,並且數據彼此同步,對嗎

不對。彼此互聯是對的,數據沒有同步。槽的分配原理,數據存儲在槽中。

 

43.如果在配置文件中禁用持久化後,執行save命令還會生成持久化文件嗎?

會,不衝突。禁用持久化只是取消了自動持久化操作。

 

44.如果事務執行失敗,返回值是什麼?

1)如果在命令行中返回的是nil

2)如果在jedis客戶端返回的是null

 

45.在jedis中執行事務,如果成功了,返回值是什麼數據類型?怎麼知道事務中第2個命令的返回值是多少?

jedis返回List對象,該list存着每一個命令的執行結果。get(1)

 

46.主從複製架構中,並不能保證主從實時複製,也不保證一定複製成功,對嗎

對,異步複製。

 

47.簡述集羣的負載均衡原理?

通過對槽的分配達到負載均衡,首先槽的個數一定16384並且在master節點按照比較平均的算法將這些槽分配到

 

歡迎進入qq羣:894294771,一起學習交流。

 

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