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

序言

本篇主要目的有二:html

一、展現全部數據類型中key的全部操做命令,以供你們學習,查閱,更深刻的挖掘redis潛力。redis

二、掌握redis中的事務,讓你的數據完整性一致性擁有更優的保障。sql

redis命令之key操做命令一覽

#查看命令keys,此命令支持glob-style的通配符格式,*表示能夠匹配任意一個或多個字符,?表示任意一個字符,[abc]表示a、b、c中的任意一個字符#數據庫

redis 127.0.0.1:6379>flushdb    ----清除當前數據庫。dom

redis 127.0.0.1:6379>set strkey a  ---添加string類型數據學習

redis 127.0.0.1:6379>sadd setkey 1 2 3   --添加set類型的數據spa

redis 127.0.0.1:6379>rpush listkey la   --添加list類型的數據htm

redis 127.0.0.1:6379>zadd zsetkey 0 za   ---添加zset類型的數據blog

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回滾事務。下面寫幾個例子供理解。

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

Note:首先flushdb清空數據庫,multi聲明開啓事務,隨後的兩個命令被填入redis事務的命令隊列中,到exec就執行啦隊列中的全部命令輸出結果。

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

Note:lpop只能用於list數據類型,這裏用在了string類型的操做,因此出錯,可是在redis中其後的命令仍被執行。

三、回滾事務

Note:首先狀況數據庫,而後設置name爲zlh,開啓事務,再次設置name爲tom,而後discard回滾事務,再次得到的name值仍是zlh而沒有被設置爲tom,數據數據回滾成功了。

四、監控指定的keys,被監控的keys在事務以前發生修改,且事務中包含該key,若是事務執行exec,則exec將放棄全部事務中的命令。

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

小結

若是你在看到本文後有什麼疑問,請加入博客左上角羣,一塊兒交流學習。

個人redis系列博文:雙擊地址

相關文章
相關標籤/搜索