日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

通過Proxy Query Cache優化熱點Key問題

為更好地改善對熱點Key的發起大量讀請求導致的訪問傾斜,云數據庫 Tair(兼容 Redis)新增代理查詢緩存功能(Proxy Query Cache),啟用該功能后,代理節點會緩存熱點Key對應的請求和查詢結果,當在有效時間內收到同樣的請求時直接返回結果至客戶端,無需和后端的數據分片交互。

前提條件

  • 實例為Tair(企業版)內存型或持久內存型。

  • 實例為集群架構代理模式或讀寫分離架構。

應用場景

需要解決或預防熱點Key的讀請求引發的訪問傾斜問題,即由于大量的讀請求集中在某些Key形成了熱點Key,從而導致某些數據分片的CPU使用率和流量使用率持續保持高位并接近100%。

重要

由于代理節點中緩存的熱點Key的查詢結果在有效時間內不會更新,需要確認業務上能接受在數據更新到代理緩存失效之前的這段時間(即代理緩存的有效期)內,讀取到的是舊數據。這是對強一致性的犧牲,以換取更高的系統性能和穩定性。業務邏輯需要能夠容忍這種可能出現的短暫數據不一致現象,確保即使在數據略有延遲的情況下,也不會影響到核心業務流程。

工作原理

圖 1. Proxy Query Cache原理Proxy Query Cache原理

云數據庫 Tair(兼容 Redis)會根據高效的排序和統計算法識別出實例中存在的熱點Key(通常熱點Key的QPS大于5,000),開啟該功能后,代理節點Proxy會根據設定的規則緩存熱點Key的請求和查詢結果(僅緩存熱點Key的查詢結果,無需緩存整個Key)。當在緩存有效時間內收到相同的請求時,Proxy會直接返回結果至客戶端,無需和后端的數據分片執行交互。如果熱點Key的查詢結果發生改變,緩存不會更新。

說明

您可以通過實例診斷功能分析實例是否存在訪問傾斜;您還可以通過實時Top Key統計功能查詢實例的熱點Key信息。

設置方法及參數說明

您需要通過修改實例參數的方式管理該功能,各參數解釋如下。具體操作,請參見設置實例參數。

參數

說明

query_cache_enabled

是否啟用代理查詢緩存功能,取值:

  • 0:不啟用,默認值。

  • 1:啟用。

重要

啟用代理查詢緩存功能的使用場景:

  • 熱點Key的查詢結果更新頻率低或者更新頻率穩定,通過合理設置過期時間最大可能避免臟讀。

  • 業務能接受緩存(Proxy Query Cache)在有效時間內可能出現的數據不一致。

query_cache_mode

代理查詢緩存的工作模式,取值:

  • 0:只緩存數據分片推送的熱點Key的查詢結果,默認值。

  • 1:緩存所有Key的查詢結果并進行根據最近最少使用算法LRU(Least Recently Used)進行淘汰。

重要

由于代理節點的緩存空間有限(代理節點每個線程100 MB),如果設置該參數的值為1,代理節點將按照LRU算法進行淘汰,可能降低緩存的命中率,從而引起整體性能的下降。

query_cache_expire

緩存數據的有效時間,單位為毫秒,取值:100~60000,默認值為1000

示例:熱點新聞榜單

熱點新聞榜單數據放在讀寫分離架構的實例中,榜單每15分鐘刷新一次,偶爾會出現熱點新聞導致此業務QPS達到5000以上。評估榜單能接受的最大數據延遲時間為30秒,開啟Proxy Query Cache后,將有效時間設置為30秒。

重要
  • 如果緩存的數據在有效期內被修改,修改后的數據不會同步至緩存中,即相同的讀請求會獲取到緩存中的臟數據,直至緩存失效。

  • 您需要根據具體的業務場景和對臟數據的容忍度謹慎評估該參數的值,該值設置過小會降低緩存的命中率,設置過大會導致客戶端在較長的時間內讀取到的是臟數據。

相關命令

您可以連接云數據庫 Tair(兼容 Redis)實例,執行下述命令,查詢Querycache的使用情況,連接方法請參見通過redis-cli連接實例。

QUERYCACHE KEYS

命令格式:QUERYCACHE KEYS

命令描述:查詢代理節點中已緩存的所有熱點Key,將返回每個熱點Key的數據庫名和Key名稱信息。

命令示例:

QUERYCACHE KEYS

返回示例:

1) 1) (integer) 0
   2) "key:000000000003"
2) 1) (integer) 0
   2) "key:000000000001"
3) 1) (integer) 0
   2) "key:000000000002"
4) 1) (integer) 0
   2) "key:000000000000"

QUERYCACHE INFO

命令格式:QUERYCACHE INFO

命令描述:獲取代理查詢緩存的運行情況。

命令示例:

QUERYCACHE INFO

返回示例:

1) "put_qps:4.00"
2) "get_qps:16570.00"
3) "hit_rate:99.98"
4) "memory_size:180"
5) "query_count:4"
6) "bandwidth_limit_query_cnt:0"
7) "qps_limit_query_cnt:0"

返回示例說明:

  • put_qps:數據節點每秒往Querycache寫入的次數。

  • get_qps:客戶端每秒從Querycache中讀取的次數。

  • hit_rate:緩存的命中率。

  • memory_size:緩存數據占用的內存容量,單位為字節。

  • query_count:已緩存的請求的數量。

  • bandwidth_limit_query_cnt:因帶寬限制訪問Querycache被限流的次數,默認未開啟限制。

  • qps_limit_query_cnt:因QPS限制訪問Querycache被限流的次數,默認未開啟限制。

QUERYCACHE LISTALL

命令格式:QUERYCACHE LISTALL

命令描述:獲取已緩存的所有請求命令。

命令示例:

QUERYCACHE LISTALL

返回示例:

1) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000000\r\n"
   3) (integer) 668
2) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000001\r\n"
   3) (integer) 668
3) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000003\r\n"
   3) (integer) 668
4) 1) (integer) 0
   2) "*2\r\n$3\r\nGET\r\n$16\r\nkey:000000000002\r\n"
   3) (integer) 667

返回示例說明:每個請求命令的信息由三行信息組成,分別為數據庫名、請求命令的完整內容(格式遵照Redis協議規范)、剩余生存時間(單位為毫秒)。