Redis的那些最多見面試問題--附連接

Redis 持久化的方式

rdb(快照,Snapshots)

缺省狀況狀況下,Redis把數據快照存放在磁盤上的二進制文件中,文件名爲dump.rdb。你能夠配置Redis的持久化策略,例如數據集中每N秒鐘有超過M次更新,就將數據寫入磁盤;或者你能夠手工調用命令SAVE或BGSAVE。html

AOF

快照模式並不十分健壯,當系統中止,或者無心中Redis被kill掉,最後寫入Redis的數據就會丟失。這對某些應用也許不是大問題,但對於要求高可靠性的應用來講,面試

15.redis的緩存失效策略和主鍵失效機制

做爲緩存系統都要按期清理無效數據,就須要一個主鍵失效和淘汰策略.redis

在Redis當中,有生存期的key被稱爲volatile。在建立緩存時,要爲給定的key設置生存期,當key過時的時候(生存期爲0),它可能會被刪除。緩存

一、影響生存時間的一些操做

生存時間能夠經過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆蓋原來的數據,也就是說,修改key對應的value和使用另外相同的key和value來覆蓋之後,當前數據的生存時間不一樣。dom

好比說,對一個 key 執行INCR命令,對一個列表進行LPUSH命令,或者對一個哈希表執行HSET命令,這類操做都不會修改 key 自己的生存時間。另外一方面,若是使用RENAME對一個 key 進行更名,那麼更名後的 key的生存時間和更名前同樣。code

RENAME命令的另外一種多是,嘗試將一個帶生存時間的 key 更名成另外一個帶生存時間的 another_key ,這時舊的 another_key (以及它的生存時間)會被刪除,而後舊的 key 會更名爲 another_key ,所以,新的 another_key 的生存時間也和本來的 key 同樣。使用PERSIST命令能夠在不刪除 key 的狀況下,移除 key 的生存時間,讓 key 從新成爲一個persistent key 。server

二、如何更新生存時間

能夠對一個已經帶有生存時間的 key 執行EXPIRE命令,新指定的生存時間會取代舊的生存時間。過時時間的精度已經被控制在1ms以內,主鍵失效的時間複雜度是O(1)。htm

EXPIRE和TTL命令搭配使用,TTL能夠查看key的當前生存時間。設置成功返回 1;當 key 不存在或者不能爲 key 設置生存時間時,返回 0 。blog

最大緩存配置

在 redis 中,容許用戶設置最大使用內存大小內存

server.maxmemory

默認爲0,沒有指定最大緩存,若是有新的數據添加,超過最大內存,則會使redis崩潰,因此必定要設置。redis 內存數據集大小上升到必定大小的時候,就會實行數據淘汰策略。

redis 提供 6種數據淘汰策略:

  • volatile-lru:從已設置過時時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰
  • volatile-ttl:從已設置過時時間的數據集(server.db[i].expires)中挑選將要過時的數據淘汰
  • volatile-random:從已設置過時時間的數據集(server.db[i].expires)中任意選擇數據淘汰
  • allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰
  • allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰
  • no-enviction(驅逐):禁止驅逐數據。

連接

Redis的那些最多見面試問題

相關文章
相關標籤/搜索