日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis开发与运维 笔记一

發布時間:2023/12/10 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis开发与运维 笔记一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全局命令
dbsize命令在計算鍵總數時不會遍歷所有鍵,而是直接獲取Redis內置的鍵總數變量,所以dbsize命令的時 間復雜度是O(1)。而keys命令會遍歷所有鍵,所以它的時間復雜度是O(n),當Redis保存了大量鍵時,線上環境禁止使用

單線程架構
Redis使用了單線程架構和I/O多路復用模型來實現高性能的內存數據庫服務。

為什么Redis使用單線程模型會達到每秒萬級別的處理能力呢?可以將其歸結為三點:

  • 純內存訪問,Redis將所有數據放在內存中,內存的響應時長大約為100納秒,這是Redis達到每秒萬級別訪問的重 要基礎。
  • 非阻塞I/O,Redis使用epoll作為I/O多路復用技術的實現,再加上Redis自身的事件處理 模型將epoll中的連接、讀寫、關閉都轉換為事件,不在網絡I/O上浪費過多的時間。
  • 第三,單線程避免了線程切換和競態產生的消耗。
  • 但是單線程會有一個問題:對于每個命令的執行時間是有要求的。如果某個命令執行過長,會造成其他 命令的阻塞,對于Redis這種高性能的服務來說是致命的,所以Redis是面向快速執行場景的數據庫。


    字符串

    字符串類型的值實際可以是字符串(簡單的字符串、復雜的字符串(例如JSON、XML))、數字(整數、浮點數),甚至是二進制(圖片、音頻、視頻),但是值最大不能超過512MB。

    命令
    incr命令用于對值做自增操作,返回結果分為三種情況:
    ·值不是整數,返回錯誤。
    ·值是整數,返回 自增后的結果。
    ·鍵不存在,按照值為0自增,返回結果為1。

    典型的業務場景
    緩存
    業務名:對象名:id:[屬性]”作為鍵名(也可以不是分號)。例如MySQL的數據庫名為vs,用戶表名為 user,那么對應的鍵可以用"vs:user:1","vs:user:1:name"來表示,如果當前Redis只被一個業務使 用,甚至可以去掉“vs:”。如果鍵名比較長,例如“user:{uid}:friends:messages:{mid}”,可以 在能描述鍵含義的前提下適當減少鍵的長度,例如變為“u:{uid}:fr:m:{mid}”,從而減少由于鍵 過長的內存浪費。


    鍵管理

    單個鍵管理
    如果在rename之前,鍵java已經存在,那么它的值也將被覆蓋。
    為了防止被強行rename,Redis提供了renamenx命令,確保只有newKey不存在時候才被覆蓋。

    在使用重命名命令時需要注意
    ·由于重命名鍵期間會執行del命令刪除舊的鍵,如果鍵對應的值比較大,會存在阻塞Redis的可能性,這點不要忽視。
    ·如果rename和renamenx中的key和newkey如果是相同的,在Redis3.2和之前版本返回結果略有不同。 Redis3.2中會返回OK

    鍵過期
    ttl命令和pttl都可以查詢鍵的剩余過期時間,但是pttl精度更高可以達到毫秒級別,有3種返回值:
    ·大于等于0的整數:鍵剩余的過期時間(ttl是秒,pttl是毫秒)。
    ·-1:鍵沒有設置過期時間。
    ·-2:鍵不存在。

    如果過期時間為負值,鍵會立即被刪除,猶如使用del命令一樣。
    persist命令可以將鍵的過期時間清除。
    對于字符串類型鍵,執行set命令會去掉過期時間,這個問題很容易在開發中被忽視。

    遷移鍵
    遷移過程分為兩步
    1)在源Redis上,dump命令會將鍵值序列化,格式采用的是RDB格式。
    2)在目標Redis上,restore命令 將上面序列化的值進行復原,其中ttl參數代表過期時間,如果ttl=0代表沒有過期時間。

    有關dump+restore有兩點需要注意:第一,整個遷移過程并非原子性的,而是通過客戶端分步完成的。 第二,遷移過程是開啟了兩個客戶端連接,所以dump的結果不是在源Redis和目標Redis之間進行傳輸。

    migrate命令具有原子性
    第一,整個過程是原子執行的,不需要在多個Redis實例上開啟客戶端的,只需要在源Redis上執行 migrate命令即可。第二,migrate命令的數據傳輸直接在源Redis和目標Redis上完成的。第三,目標Redis 完成restore后會發送OK給源Redis,源Redis接收后會根據migrate對應的選項來決定是否在源Redis上刪 除對應的鍵。

    遍歷鍵
    上面為了遍歷所有的鍵,pattern直接使用星號,這是因為pattern使用的是glob風格的通配符:

    • *代表 匹配任意字符。
    • 代表匹配一個字符。
    • []代表匹配部分字符,例如[1,3]代表匹配1,3,[1-10]代表匹 配1到10的任意數字。
    • \x用來做轉義,例如要匹配星號、問號需要進行轉義。

    數據庫管理
    默認使用的就是0號數據庫,當選擇其他數據庫時,會有[index]的前綴標識,其中index就是數據庫的索引下標。

    總結

    以上是生活随笔為你收集整理的Redis开发与运维 笔记一的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。