Redis 筆記系列(六)——redis鍵相關命令筆記

 redis有關key的命令

(1)查看當前庫的全部key及get、set的衍生操做

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>

 

 

(2)查看某個鍵是否存在

命令: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>

 

 

(3)將當前庫的某個鍵值對移動獲得其餘庫。

命令: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]>

 

(4)給當前庫的某個key設置有效時間,過時後自動清除

命令: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>

 

(5)查看某個鍵的有效期還有多久(秒)

命令: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有將鍵的從新設置爲永久有效的命令。

 

(6)將鍵設置爲永久有效。

將鍵從新賦予本身自己的值,能夠做爲一種消除過時時間的手段。但正規的命令應該是: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]>

 

 

 

(7)查看某個鍵的類型

命令: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"

 

 

(8)最後拓展:

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]>
相關文章
相關標籤/搜索