1. 程式人生 > >PHP面試題 之 redis

PHP面試題 之 redis

Redis的快取策略和主鍵失效機制

 作為快取系統都要定期清理無效資料,就需要一個主鍵失效和淘汰策略.

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

1、影響生存時間的一些操作

    生存時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆蓋原來的資料,也就是說,修改key對應的value和使用另外相同的key和value來覆蓋以後,當前資料的生存時間不同。

   比如說,對一個 key 執行INCR命令,對一個列表進行LPUSH命令,或者對一個雜湊表執行HSET命令,這類操作都不會修改 key 本身的生存時間。另一方面,如果使用RENAME對一個 key 進行改名,那麼改名後的 key 的生存時間和改名前一樣。

  RENAME命令的另一種可能是,嘗試將一個帶生存時間的 key 改名成另一個帶生存時間的 another_key ,這時舊的 another_key (以及它的生存時間)會被刪除,然後舊的 key 會改名為 another_key ,因此,新的 another_key 的生存時間也和原本的 key 一樣。使用PERSIST命令可以在不刪除 key 的情況下,移除 key 的生存時間,讓 key 重新成為一個persistent key 。 

2、如何更新生存時間

可以對一個已經帶有生存時間的 key 執行EXPIRE命令,新指定的生存時間會取代舊的生存時間。過期時間的精度已經被控制在1ms之內,主鍵失效的時間複雜度是O(1),
   EXPIRE和TTL命令搭配使用,TTL可以檢視key的當前生存時間。設定成功返回 1;當 key 不存在或者不能為 key 設定生存時間時,返回 0 。

 最大快取配置

  在 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(驅逐):禁止驅逐資料

    注意這裡的6種機制,volatile和allkeys規定了是對已設定過期時間的資料集淘汰資料還是從全部資料集淘汰資料,後面的lru、ttl以及random是三種不同的淘汰策略,再加上一種no-enviction永不回收的策略。

使用策略規則

1、如果資料呈現冪律分佈,也就是一部分資料訪問頻率高,一部分資料訪問頻率低,則使用allkeys-lru
 2、如果資料呈現平等分佈,也就是所有的資料訪問頻率都相同,則使用allkeys-random

三種資料淘汰策略:

ttl和random比較容易理解,實現也會比較簡單。主要是Lru最近最少使用淘汰策略,設計上會對key 按失效時間排序,然後取最先失效的key進行淘汰

相關推薦

PHP試題 redis

Redis的快取策略和主鍵失效機制 作為快取系統都要定期清理無效資料,就需要一個主鍵失效和淘汰策略. 在Redis當中,有生存期的key被稱為volatile。在建立快取時,要為給定的key設定

php試題二——數據結構和算法(高級部分)

ash item name queue lis 雙向 joseph test 數據結構和算法 二、數據結構和算法 1.使對象可以像數組一樣進行foreach循環,要求屬性必須是私有。(Iterator模式的PHP5實現,寫一類實現Iterator接口)(騰訊) <?

PHP試題文件目錄操作

als brush 文件名 func ram class png 後綴 extension 獲取文件後綴,遍歷目錄層次 /** * 5種方式獲取文件後綴名 * 這道題其實就是考函數substr() strrchr() array_pop() strrpos() str

試題redis的過期時間原理

1、消極方法:每次訪問key時判斷key是否已經過期; 2、積極方法;週期性的從設定了過期時間的key中選擇一部分的key進行刪除   a、隨機測試20個帶有timeout資訊的key   b、如果超過25%的key被刪除,則重複執行整個流程 以下是redis官網原文 Specifically th

試題redis的記憶體回收策略

1、maxmemory-policy noeviction(預設):記憶體空間不足會報錯 2、allkeys-lru:最少使用的資料去淘汰 3、allkeys-random:隨機淘汰一些key 4、volatile-random:在已經設定了過期的時間去隨機淘汰      

php試題,各大企業常見的php試題

1. 寫一個函式,儘可能高效的,從一個標準 url 裡取出檔案的副檔名 例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php 答:<?php $url = “http://www.sina.com.

php試題五——PHP綜合應用(高階部分)

五、PHP綜合應用 1.寫出下列服務的用途和預設埠(新浪網技術部) ftp、ssh、http、telnet、https ftp:File Transfer Protocol,檔案傳輸協議,是應用層的協議,它基於傳輸層,為使用者服務,它們負責進行檔案的傳輸,其預設埠是2

php試題四——Linux部分(高階部分)

1.請解釋下列10個shell命令的用途(新浪網技術部) top、ps、mv、find、df、cat、chmod、chgrp、grep、wc top:該命令提供了實時對系統處理器狀態的監控,它能夠實時顯示系統中各個程序的資源佔用情況。該命令可以按照對CPU、記憶體使用

試題Memcached與Redis的區別

Redis Memcached 網路IO模型 單執行緒的IO複用的網路模型 多執行緒的非阻塞IO複用的網路模型 資料支援型別 key-value資料型別 還支援list,set,zset,hash等資料結構的儲存 key-value形式

php試題6-memcache和redis的區別

Memcache和Redis區別: 1.Redis和Memcache在寫入效能上面差別不大,讀取效能上面尤其是批量讀取效能上面Memcache更強 共同點:Memcache,Redis 都是記憶體資

PHP】高階試題十萬個為什麼?(一)

成功不是將來才有的,而是從決定去做的那一刻起,持續累積而成。 現在也已經工作三年時間了,PHP在平時工作中天天都會使用,但是內心總是感覺差點什麼,覺得自己對PHP這門語言瞭解的還不夠,故下定決心,整理了一下平時工作所學所用,提出各種各樣的問題,

PHP試題詳解

今天 服務 等待 速度 用途 har pda 說明 lose 自己從網上找了幾份常考到的PHP面試題進行了整理,然後才有了這份PHP面試題,並且我把所有的題目進行了詳細分析和代碼分析,希望可以對大家有幫助,謝謝大家。 這份試題我也上傳到了百度雲,有需要的可以直接去百度雲下載

PHP試題,自己幾斤幾兩,看看就知道了

mysql配置 圖片 緩存 共享 負載 垂直 cookie 區別 簡歷 網上看到的一篇比較高級的面試題,自己幾斤幾兩,看看就知道了。想要往架構這方面的可以去找找答案了 0.簡單做一下自我介紹,? 然後談一下近三年來你的得意之作?1.面試官看過你的簡歷,會問一些你做的項目

10個值得深思的PHP試題

number 進制 程序 false convert val 數字轉換 str1 long 第一個問題關於弱類型 $str1 = ‘yabadabadoo‘; $str2 = ‘yaba‘; if (strpos($str1,$str2)) { echo "/""

PHP試題及答案解析(8)—PHP綜合應用題

java應用程序 外殼 sleep 服務應用程序 解釋 源碼 use lee eve 1.寫出下列服務的用途和默認端口。 ftp、ssh、http、telnet、https ftp:File Transfer Protocol,文件傳輸協議,是應用層的協議,它基於傳輸層,

2017年最新企業試題shell(一)

2017年最新企業面試題之shell2017年最新企業面試題之shell(一)**********************************************企業Shell面試題1:批量生成隨機字符文件名案例 ********************************************

2017年最新企業試題shell(三)

2017年最新企業面試題之shell(三)2017年最新企業面試題之shell(三)練習題1:寫一個shell腳本,類似於日誌切割,系統有個logrotate程序,可以完成歸檔。但現在我們要自己寫一個shell腳本實現歸檔。舉例: 假如服務的輸出日誌是1.log,我要求每天歸檔一個,1.log第二天就變成1.

【前端小小白的學習路】整理幾道試題(HTTP協議)【轉】

ase 賬號 檢測 提交數據 大型數據集 tor 添加 描述 分享 轉自:http://www.cnblogs.com/ranyonsue/p/5984001.html HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸

js試題求數組最值

pre 面試 可能 cti clas return n) ole arr 今天繼續分享js常見的面試題,求數組最大值,最小值,這裏列舉4種常見解法,還有其他方法也可以實現,讀者知道可以私信我,我將把意見列舉到博客中,歡迎提出意見。 第一種,利用數組排序 1 var arr

2017年8道php試題(真題+答案)

php 高級php1、<?php echo count(strlen(“http://php.net”)); ?>的執行結果是? 答案:1 講解:count(var)是用來統計數組或對象的元素個數的。當var是null或者空數組時,結果為0。如果var是普通變量,則返回1。正常情況下返回var中的