Redis 相關功能和實用命令(五)

慢查詢原因分析

由於 Redis 是單線程的,它內部維護了一個命令隊列,所以當有耗時的命令出現時,比如 keys *,後面的命令會被阻塞,通查查出慢查詢可以對服務進一步優化。

  1. 設置慢查詢閥值:默認10 毫秒,以微秒爲單位

    6379>config set slowlog-log-slower-than 10000

    可直接修改 redis.conf 加上 slowlog-log-slower-than 10000

    slow-max-len 用來設置慢查詢條數

  2. 執行 slowlog get 獲取慢查詢,格式如下

    img

一般會定期將慢查詢進行導出到 mysql 或其它存儲,用於業務人員查看哪裏出現了慢查詢

管道 pipeline

上篇文章展示了在控制檯中如何使用管道來導入 mysql 數據 ,但管道一般在應用程序中使用

 Object execute = redisTemplate.execute(new RedisCallback<Object>() {
     @Override
     public Object doInRedis(RedisConnection connection) throws DataAccessException {
         connection.openPipeline();
         for (int i = 0; i < 1000000; i++) {
             String key = "123" + i;
             connection.set(key.getBytes(), key.getBytes());
         }
         List<Object> result = connection.closePipeline();
         return result;
     }
 });

發佈訂閱 (publish/subscribe)

Redis 的發佈訂閱比較簡單,不適合於專業的場景,會有消息丟失,無法回溯等問題,這個發佈訂閱一般是用在 Redis 內部使用,比如哨兵的監控

專業的發佈訂閱建議還是使用 kafka 或者 rabbitmq

rabbitmq 可參考我的另一篇文章 Rabbitmq

一些實用命令

  • 查詢連接的佔用情況,哪臺主機佔用多少連接,用於排查連接耗光問題

    redis-cli -a <密碼> client list  | awk '{print $1}' | cut -d "=" -f2 | cut -d: -f 1 | sort  -n | uniq -c 
  • 查詢當前內存使用情況

    6379> info Memory

  • 在所有 key 裏面返回隨機一個 key ,可以用於抽獎

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