Redis鍵、數據庫管理

Redis鍵管理

鍵重命名mysql

       rename oldKey newkey    //格式redis

       rename oldKey newKey     //若oldKey以前存在則被覆蓋sql

       set name james ;set name1 mike //數據初始化數據庫

       renamenx name name1 //重命名失敗,只有當name1不存在才能更名服務器

返回隨機鍵  運維

        dbsize          //redis有16個庫,查看當前庫的鍵值對總數dom

        randomkey  //返回隨機鍵spa

鍵過時:線程

        expire name:03 20  //鍵name:03 在10秒後過時unix

        ttl name:03        //查看過時按秒到計時,當返回-2說明已刪除

        pttl name:03       //查看過時按毫秒到時計

 

        set name:05 james  //初始化數據

        pexpire name:05 20000  //20000毫秒(20S)後過時

        expire name:06 -2  //直接過時,和del同樣

        expireat name:04 1516971599  //設置在2018/01/26 20:59:59過時

        時間轉時間戳:網址http://tool.chinaz.com/Tools/unixtime.aspx

 

        hset user:01 name james //初始化數據

        expire user:01 60     //設置60S右過時

        ttl user:01          //查看過時剩餘時間

        persist user:01       //去掉過時

        ttl user:1           //返回-1 能夠永久查詢不失效

 

注意:對於字符串重設值後,expire無效,

        set name james

        expire name 50

        ttl name

        set name james1 //此時expire取消

        ttl name   //返回-1, 長期有效

 

鍵的遷移:

把部分數據遷移到另外一臺redis服務器

1, move key db  //reids有16個庫, 編號爲0-15

   set name james1;  move name 5 //遷移到第6個庫

   select 5 ;//數據庫切換到第6個庫, get name  能夠取到james1

   這種模式不建議在生產環境使用,在同一個reids裏能夠玩

2, dump key;

   restore key ttl value    //實現不一樣redis實例的鍵遷移,ttl=0表明沒有過時時間

    例子:在A服務器上 192.168.1.111

   set name james;

   dump name; //  獲得"\x00\x05james\b\x001\x82;f\"DhJ"

   在B服務器上:192.168.1.118

   restore name 0 "\x00\x05james\b\x001\x82;f\"DhJ"

   get name  //返回james

3,migrate指令遷移到其它實例redis,在1.111服務器上將test移到118

migrate

192.168.1.118

6379  

test

0

1000

copy

replace

keys

指令

要遷移的目標IP

端口

遷移鍵值

目標庫

超時時間

遷移後不刪除原鍵

無論目標庫是不存在test鍵都遷移成功

遷移多個鍵

鍵的遍歷

  redis提供了兩個命令來遍歷全部的鍵

  1,鍵全量遍歷:

    mset country china city bj name james  //設置3個字符串鍵值對

    keys  * //返回全部的鍵, *匹配任意字符多個字符

    keys *y //以結尾的鍵,

    keys n*e //以n開頭以e結尾,返回name

    keys n?me  //  ?問號表明只匹配一個字符  返回name,全局匹配

    keys n?m*   //返回name

    keys [j,l]*  //返回以j l開頭的全部鍵  keys [j]ames 全量匹配james

    考慮到是單線程, 在生產環境不建議使用,若是鍵多可能會阻塞,若是鍵少,能夠

2,漸進式遍歷

    mset  a a b b c c d d e e f f g g h h i i j j k k l l m m n n o o p p q q r r s s t t u u v v w w x x y y z z    //初始化26個字母鍵值對

字符串類型:

     scan 0 match n* count 20 //匹配以n開頭的鍵,取20條,第一次scan 0開始

第二次從遊標4096開始取20個以n開頭的鍵,至關於一頁一頁的取

當最後返回0時,鍵被取完

好比將old:user開頭的元素全刪掉

注:可有效地解決keys命令可能產生的阻塞問題

  • 除scan字符串外:還有如下
  • SCAN 命令用於迭代當前數據庫中的數據庫鍵。
  • SSCAN 命令用於迭代集合鍵中的元素。
  • HSCAN 命令用於迭代哈希鍵中的鍵值對。
  • ZSCAN 命令用於迭代有序集合中的元素(包括元素成員和元素分值)。

    用法和scan同樣

 

redis數據庫管理

    select 0   //共16個庫, 0 --15, select切換數據庫

    set name james

    select 1

    get name  //隔離了,取不到,和mysql不一樣庫同樣

    flushdb: 只清空當前數據庫的鍵值對  dbsiz  0

    flushall:  清空全部庫的鍵值對  (這兩個指令慎用!!!!)

其中redis3.0之後的版本慢慢弱化了這個功能,如在redis cluster中只容許0數據庫緣由:

1,redis單線程,若是用多個庫,這些庫使用同一個CPU,彼此會有影響

2,多數據庫,調試與運維麻煩,如有一個慢查詢,會影響其它庫查詢速度

3,來回切換,容易混亂

相關文章
相關標籤/搜索