DBSIZE查看當前庫的key的個數,keys * 查看當前庫的全部key。java
127.0.0.1:6379> DBSIZE (integer) 0 127.0.0.1:6379> 127.0.0.1:6379> keys * (empty list or set) 127.0.0.1:6379>
先獲取當前值返回,再設置值redis
127.0.0.1:6379> get k4 "thanks" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> getset k4 welcome "thanks" 127.0.0.1:6379> get k4 "welcome"
獲取多個,設置多個bash
127.0.0.1:6379> mget k1 k2 k3 k4 1) "99" 2) "i love anyone but ye to leave" 3) (nil) 4) "welcome" 127.0.0.1:6379> 127.0.0.1:6379> mset k1 100 k2 'I love you, but have to leave.' k3 v3 k4 thanks OK 127.0.0.1:6379> mget k1 k2 k3 k4 1) "100" 2) "I love you, but have to leave." 3) "v3" 4) "thanks" 127.0.0.1:6379>
命令:exists 【key名稱】大數據
127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> set k2 v2 OK 127.0.0.1:6379> set k3 v3 OK 127.0.0.1:6379> exists k1 (integer) 1 127.0.0.1:6379> exists k10 (integer) 0 127.0.0.1:6379> 127.0.0.1:6379>
在使用Java經過Jedis來操做redis中的鍵值對時,須要判斷某個鍵是否存在時就能夠用到EXISTS命令。(Jedis是Redis的Java客戶端)spa
以下面的代碼即是java經過jedis訪問本地的redis服務的示例。unix
//鏈接本地Jedis服務 Jedis jedis = new Jedis("127.0.0.1",6379); //查看服務是否運行,打出PONG,表示OK System.out.println("connection is ok =====> : " + jedis.ping());
只要將這些redis命令掌握,就能夠輕鬆的在java程序中經過jedis對redis進行操做。code
若是想在設置某個鍵的值時但願:若是該鍵存在不賦值,該鍵不存在則設置value。那麼能夠用命令:事務
setnx 【key名稱】【value值】get
1) "k3" 2) "k2" 3) "k1" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> get k3 "hello" 127.0.0.1:6379> setnx k3 bye (integer) 0 127.0.0.1:6379> get k3 "hello" 127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> setnx k4 thanks (integer) 1 127.0.0.1:6379> get k4 "thanks" 127.0.0.1:6379>
若是須要同時操做多個不存在則設置,能夠用命令:博客
msetnx 【key名稱1】【value值1】【key名稱2】【value值2】... ...
可是須要注意的是,msetnx 就像一個完整的事務,一旦一個setnx不成功,則整個都完蛋。
127.0.0.1:6379> keys * 1) "k2" 2) "k1" 3) "k4" 127.0.0.1:6379> msetnx k3 v3 k4 v4 k5 v5 (integer) 0 127.0.0.1:6379> keys * 1) "k2" 2) "k1" 3) "k4" 127.0.0.1:6379> get k4 "thanks" 127.0.0.1:6379>
命令:move 【key名稱】 【其餘庫的dbid】
127.0.0.1:6379> 127.0.0.1:6379> keys * 1) "k3" 2) "k1" 3) "k2" 127.0.0.1:6379> move k3 2 (integer) 1 127.0.0.1:6379> keys * 1) "k1" 2) "k2" 127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> keys * 1) "k3" 127.0.0.1:6379[2]>
命令:expire 【key名稱】【過時時間(單位:秒)】
下面設置了key3的有效期是10秒,而後不停的查看本地庫的鍵列表,10秒以後,k3消失。
127.0.0.1:6379[2]> EXPIRE k3 10 (integer) 1 127.0.0.1:6379[2]> keys * 1) "k3" 127.0.0.1:6379[2]> keys * 1) "k3" 127.0.0.1:6379[2]> keys * 1) "k3" 127.0.0.1:6379[2]> keys * (empty list or set) 127.0.0.1:6379[2]> keys *
若是是想設置key的value的同時設置過時時限,用命令:
setex 【key名稱】【過時時間(單位:秒)】【value值】
127.0.0.1:6379> setex k3 600 hello OK 127.0.0.1:6379> ttl k3 (integer) 593 127.0.0.1:6379>
命令:ttl 【鍵的名稱】
ttl 即 time to live
下面咱們在當前庫建了k一、k二、k3三個鍵值對。而後k1不設置有效期,即永久的;k2設置1小時,即3600秒;k3設置爲5秒鐘過時。
以後咱們能夠經過ttl來查看每一個鍵過時的秒數。
若是是-1,則表示永久有效,不存在過時;若是是-2,則表示已通過期或者該鍵根本未曾存在。
非負數則表示剩餘的秒數。
127.0.0.1:6379[2]> set k1 v1 OK 127.0.0.1:6379[2]> set k2 v2 OK 127.0.0.1:6379[2]> set k3 v3 OK 127.0.0.1:6379[2]> expire k2 3600 (integer) 1 127.0.0.1:6379[2]> expire k3 5 (integer) 1 127.0.0.1:6379[2]> keys * 1) "k3" 2) "k1" 3) "k2" 127.0.0.1:6379[2]> keys * 1) "k1" 2) "k2" 127.0.0.1:6379[2]> 127.0.0.1:6379[2]> get k1 "v1" 127.0.0.1:6379[2]> get k2 "v2" 127.0.0.1:6379[2]> get k3 (nil) 127.0.0.1:6379[2]> 127.0.0.1:6379[2]> 127.0.0.1:6379[2]> ttl k1 (integer) -1 127.0.0.1:6379[2]> ttl k2 (integer) 3547 127.0.0.1:6379[2]> ttl k3 (integer) -2 127.0.0.1:6379[2]>
這裏咱們須要引出一個問題:
若是一個已經設置了有效期的鍵被再次set了新的值那麼,它的有效期是:
A. 繼續原先的已經消耗的有效期,即便用剩餘的有效時間以後過時;
B. 仍是過時時間會被重置爲原先一開始的過時時間長度;
C. 仍是過時時間設置被消除成爲永久有效
答案是C
127.0.0.1:6379[2]> ttl k2 (integer) 3097 127.0.0.1:6379[2]> set k2 v2222 OK 127.0.0.1:6379[2]> ttl k2 (integer) -1 127.0.0.1:6379[2]>
在作一點擴展:若是set k2的新值與原先的值同樣呢,這時候k2的值至關於沒有變化,那麼其過時時間會被消除掉嗎?
答案是,不管你設置的新值與舊值是否相同,過時時間的設置都會被消除。
127.0.0.1:6379[2]> EXPIRE k2 3600 (integer) 1 127.0.0.1:6379[2]> ttl k2 (integer) 3593 127.0.0.1:6379[2]> ttl k2 (integer) 3583 127.0.0.1:6379[2]> set k2 v2222 OK 127.0.0.1:6379[2]> ttl k2 (integer) -1 127.0.0.1:6379[2]>
因此,將鍵從新賦予本身自己的值,能夠做爲一種消除過時時間的手段。但這是旁門左道,redis有將鍵的從新設置爲永久有效的命令。
將鍵從新賦予本身自己的值,能夠做爲一種消除過時時間的手段。但正規的命令應該是:persist k1
127.0.0.1:6379[2]> get k1 "v1" 127.0.0.1:6379[2]> EXPIRE k1 5000 (integer) 1 127.0.0.1:6379[2]> ttl k1 (integer) 4995 127.0.0.1:6379[2]> PERSIST k1 (integer) 1 127.0.0.1:6379[2]> ttl k1 (integer) -1 127.0.0.1:6379[2]>
命令:type 【key名稱】
咱們查看以前的k2類型,是string類型;再設置一個k4類型,爲4,結果仍是string類型。還記得上一篇博客的redis五大數據類型嗎?千萬別還傻傻覺得「是否是有可能會是integer」。
若是建立一個list,用lpush。咱們能夠看到其數據類型爲list。
注意,查看list的時候不能用get,應該藉助於lrange命令查看它的0到最後(用-1表示)的整個列表。
127.0.0.1:6379[2]> type k2 string 127.0.0.1:6379[2]> set k4 4 OK 127.0.0.1:6379[2]> type k4 string 127.0.0.1:6379[2]> 127.0.0.1:6379[2]> lpush k5 1 2 3 4 5 (integer) 5 127.0.0.1:6379[2]> type k5 list 127.0.0.1:6379[2]> lrange k5 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1"
key的命令還有不少,你能夠查閱redisdoc.com。下面列幾個結束本文:
(1) pttl 查看某個鍵過時時間,可是單位是ms。
127.0.0.1:6379[2]> 127.0.0.1:6379[2]> EXPIRE k1 5000 (integer) 1 127.0.0.1:6379[2]> pttl k1 (integer) 4993502 127.0.0.1:6379[2]>
(2) del 刪除鍵
127.0.0.1:6379[2]> del k1 (integer) 1 127.0.0.1:6379[2]> get k1 (nil) 127.0.0.1:6379[2]>
(3) dump 序列化某個鍵的值:注意是對值自己,而不是鍵;值相同,序列化值相同。
127.0.0.1:6379[2]> set k1 gdgd OK 127.0.0.1:6379[2]> DUMP k1 "\x00\x04gdgd\a\x00\xa1\xe6=s\xa9\xbf\x83\xec" 127.0.0.1:6379[2]> set k6 abc OK 127.0.0.1:6379[2]> DUMP k6 "\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8" 127.0.0.1:6379[2]> set k7 abc OK 127.0.0.1:6379[2]> DUMP k7 "\x00\x03abc\a\x00&\x9e\xe5\xceI\xb8w\xf8" 127.0.0.1:6379[2]>
(4) expireat 把某個鍵設置過時時間,但過時的時間設置的是一個unix時間戳值,即一個具體的時刻。
127.0.0.1:6379[2]> EXPIREAT k1 1478357279 (integer) 1 127.0.0.1:6379[2]> ttl k1 (integer) 23 127.0.0.1:6379[2]> ttl k1 (integer) 21 127.0.0.1:6379[2]> ttl k1 (integer) 15 127.0.0.1:6379[2]> ttl k1 (integer) 11 127.0.0.1:6379[2]> ttl k1 (integer) 8 127.0.0.1:6379[2]> ttl k1 (integer) 7 127.0.0.1:6379[2]> ttl k1 (integer) 3 127.0.0.1:6379[2]> ttl k1 (integer) 1 127.0.0.1:6379[2]> ttl k1 (integer) -2 127.0.0.1:6379[2]> get k1 (nil) 127.0.0.1:6379[2]>
(5) pexpire 設置某個鍵的過時時間,可是單位是ms。
127.0.0.1:6379[2]> ttl k2 (integer) -1 127.0.0.1:6379[2]> PEXPIRE k2 500 (integer) 1 127.0.0.1:6379[2]> ttl k2 (integer) -2 127.0.0.1:6379[2]>