From: http://www.cnblogs.com/knowledgesea/p/5008594.html
序言
本篇主要目的有二:
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系列博文:雙擊地址
