Redis系列之key操作命令與Redis中的事務詳解(六)

張龍豪發表於2015-12-02

序言

本篇主要目的有二:

1、展示所有資料型別中key的所有操作命令,以供大家學習,查閱,更深入的挖掘redis潛力。

2、掌握redis中的事務,讓你的資料完整性一致性擁有更優的保障。

redis命令之key操作命令一覽

#檢視命令keys,此命令支援glob-style的萬用字元格式,*表示可以匹配任意一個或多個字元,?表示任意一個字元,[abc]表示a、b、c中的任意一個字元#

redis 127.0.0.1:6379>flushdb    ----清除當前資料庫。

redis 127.0.0.1:6379>set strkey a  ---新增string型別資料

redis 127.0.0.1:6379>sadd setkey 1 2 3   --新增set型別的資料

redis 127.0.0.1:6379>rpush listkey la   --新增list型別的資料

redis 127.0.0.1:6379>zadd zsetkey 0 za   ---新增zset型別的資料

redis 127.0.0.1:6379>hset hashkey name zlh    ---新增hash型別的資料,這幾條為操作key的示例資料。

redis 127.0.0.1:6379>keys  *key   ---輸出結果為所有以'key'字元結尾的key鍵。strkey , setkey, listkey, zsetkey, hashkey。

#刪除命令del,後面可以跟多個key,表示同時刪除多個key#

redis 127.0.0.1:6379>del strkey   --刪除string資料型別的key ,strkey

redis 127.0.0.1:6379>del hashkey zsetkey   ----刪除多個key,一個hash型別的hashkey,一個zset型別的zsetkey。

#判斷key是否存在的命令exists,存在輸出1,不存在輸出0#

redis 127.0.0.1:6379>exists strkey   ---strkey被上面的命令刪除啦,所以不存在,輸出0.

redis 127.0.0.1:6379>exists listkey   ---輸出結果為1,因為存在。

#將當前資料庫的key移到指定資料庫中的命令move,如果當前庫不存在該key或者指定庫中已存在,將不予操作返回資料為0#

redis 127.0.0.1:6379>move listkey 2   ---將當前資料庫的listkey,移到資料庫id為2的庫中。當前庫中將不存在listkey。

redis 127.0.0.1:6379>select 2   ---開啟id為2的資料庫

redis 127.0.0.1:6379[2]>exists listkey    ---當前資料庫為2,輸出結果為1,存在listkey,遷移成功。注意埠號後面多了個資料庫id

#重新命名命令rename,如果新命名在資料庫中已存在,則覆蓋資料庫中的值#

redis 127.0.0.1:6379>flushdb   ---清空當前資料庫,重新整理資料

redis 127.0.0.1:6379>set youname tom   ----賦值

redis 127.0.0.1:6379>set myname zlh     ---賦值

redis 127.0.0.1:6379>rename myname newmyname   ---重寫myname為newmyname

redis 127.0.0.1:6379>get newmyname     ----輸出zlh

redis 127.0.0.1:6379>rename newmyname youname    ---重新newmyname為youname,由於原來存在youname且值為tom,這裡將覆蓋tom變為zlh

redis 127.0.0.1:6379>get youname   ---輸出結果為zlh

#設定過期時間命令expire key seconds,expireat key timestamp,這兩個命名前者指定key的過期時間是相對與當前時間的秒,後者指定為過期時間是相對與1970/1/1#

redis 127.0.0.1:6379>flushdb   ---清空當前資料庫,重新整理資料。

redis 127.0.0.1:6379>set name zlh   ---賦值

redis 127.0.0.1:6379>expire name 30    ----自命令執行開始,30秒後name過期

redis 127.0.0.1:6379>expireat name 1000000000000000   ---自1970/1/1日零點起的1000000000000000秒後過期。

#檢視可以的過期時間命令ttl key,不存在或者 超時返回-1#

redis 127.0.0.1:6379>ttl name  ---返回name的剩餘過期時間,輸出為3,說明再有3秒就過期啦。

#清除key的過期時間命令persist,清除原有key的過期時間,使其持久化儲存#

redis 127.0.0.1:6379>persist name   ---如果name當前存在過期時間則清除,設name為持久化儲存。

#隨機從資料庫返回一個key的命令randomkey#

redis 127.0.0.1:6379>randomkey    ---輸出結果為mekey,mekey為資料庫中隨機返回出來的。

#返回key存放的資料型別命令type key,資料型別string,list,set,zset,hash,以字串的型別返回#

redis 127.0.0.1:6379>type mekey   ---輸出結果為string

Redis中事務的相關操作命令一覽

redis中的事務跟關係型資料庫中的事務是一個相似的概念,但是有不同之處。關係型資料庫事務執行失敗後面的sql語句不在執行,而redis中的一條命令執行失敗,其餘的命令照常執行。

redis中開啟一個事務是使用multi,相當於begin tran,exec提交事務,discard回滾事務。下面寫幾個例子供理解。

1、沒有錯誤的命令的事務被執行

Note:首先flushdb清空資料庫,multi宣告開啟事務,隨後的兩個命令被填入redis事務的命令佇列中,到exec就執行啦佇列中的所有命令輸出結果。

2、有失敗命令的事務被執行

Note:lpop只能用於list資料型別,這裡用在了string型別的操作,所以出錯,但是在redis中其後的命令仍被執行。

3、回滾事務

Note:首先情況資料庫,然後設定name為zlh,開啟事務,再次設定name為tom,然後discard回滾事務,再次獲得的name值還是zlh而沒有被設定為tom,資料資料回滾成功了。

4、監控指定的keys,被監控的keys在事務之前發生修改,且事務中包含該key,如果事務執行exec,則exec將放棄所有事務中的命令。

Note:name在事務中改為Jim不成功,是因為用watch監控啦name,且在事務之前name發生改變,事務中的執行命令中包含name的操作。

小結

如果你在看到本文後有什麼疑問,請加入部落格左上角群,一起交流學習。

我的redis系列博文:雙擊地址

相關文章