1.String字符串java
string是redis最基本的類型,你能夠理解成與Memcached如出一轍的類型,一個key對應一個value。web
string類型是二進制安全的。意思是redis的string能夠包含任何數據。好比jpg圖片或者序列化的對象。redis
string類型是Redis最基本的數據類型,一個redis中字符串value最多能夠是512M。安全
1)Redis Keyapp
#keys *spa 127.0.0.1:6379> keys *3d (empty list or set)對象
#set k1 v1blog 127.0.0.1:6379> set k1 v1排序 OK
#exists key:判斷某個key是否存在 127.0.0.1:6379> EXISTS k1 (integer) 1
#move key db:移動key到別處 127.0.0.1:6379> MOVE k1 1 (integer) 1 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 127.0.0.1:6379> select 1 OK 127.0.0.1:6379[1]> keys * 1) "k1"
#expire key:爲給定的key設置過時時間 #ttl key:查看還有多少秒過時,-1表示永不過時,-2表示已過時 127.0.0.1:6379> keys * 1) "k3" 2) "k2" 3) "k1" 127.0.0.1:6379> EXPIRE k1 10 (integer) 1 127.0.0.1:6379> ttl k1 (integer) 4 127.0.0.1:6379> keys * 1) "k3" 2) "k2"
#type key:查看key是什麼類型 127.0.0.1:6379> type k1 string
|
2)Redis String
#set|get|del|append|strlen 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> get k1 "v1" 127.0.0.1:6379> del k1 (integer) 1 127.0.0.1:6379> get k1 (nil) 127.0.0.1:6379> APPEND k2 xxxx (integer) 6 127.0.0.1:6379> get k2 "v2xxxx" 127.0.0.1:6379> STRLEN k2 (integer) 6
#Incr|decr|incrby|decrby #注:value值必定要是數字才能進行加減 127.0.0.1:6379> set k1 1 OK 127.0.0.1:6379> INCR k1 (integer) 2 127.0.0.1:6379> get k1 "2" 127.0.0.1:6379> DECR k1 (integer) 1 127.0.0.1:6379> get k1 "1" 127.0.0.1:6379> INCRBY k1 10 (integer) 11 127.0.0.1:6379> get k1 "11" 127.0.0.1:6379> DECRBY k1 10 (integer) 1
#getrange key start end:獲取指定區間範圍內的值,相似between......and的關係.從零到負一表示所有 #setrange key start str:設置指定區間範圍內的值,格式是setrange key值 具體值 127.0.0.1:6379> set k1 abcdefgh OK 127.0.0.1:6379> GETRANGE k1 0 -1 "abcdefgh" 127.0.0.1:6379> GETRANGE k1 0 2 "abc" 127.0.0.1:6379> SETRANGE k1 1 xxx (integer) 8 127.0.0.1:6379> GETRANGE k1 0 -1 "axxxefgh"
#setex key time value:設置帶過時時間的key,動態設置 #setnx key value:在 key 不存在時設置 key 的值。 127.0.0.1:6379> SETEX k1 15 hello OK 127.0.0.1:6379> get k1 "hello" 127.0.0.1:6379> ttl k1 (integer) 9 127.0.0.1:6379> ttl k1 (integer) -2 127.0.0.1:6379> get k1 (nil) 127.0.0.1:6379> SETNX k1 hello (integer) 1 127.0.0.1:6379> get k1 "hello" 127.0.0.1:6379> setnx k1 hello2 (integer) 0 127.0.0.1:6379> get k1 "hello" 127.0.0.1:6379> SETNX k6 hello2 (integer) 1 127.0.0.1:6379> get k6 "hello2"
#mset key1 value1 key2 value2 ...:同時設置一個或多個 key-value 對 #mget key1 key2 ...:獲取全部(一個或多個)給定 key 的值 #msetnx k1 value1 key2 value2...:同時設置一個或多個 key-value 對,當且僅當全部給定 key 都不存在 127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6379> mget k1 k2 k3 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> MSETNX k3 v4 k4 v4 (integer) 0 127.0.0.1:6379> MSETNX k4 v4 k5 v5 (integer) 1
#getset key value:將給定 key 的值設爲 value ,並返回 key 的舊值(old value) 127.0.0.1:6379> get k1 "v1" 127.0.0.1:6379> getset k1 hello "v1" 127.0.0.1:6379> get k1 "hello" |
2.List列表
Redis 列表是簡單的字符串列表,按照插入順序排序。你能夠添加一個元素導列表的頭部(左邊)或者尾部(右邊)。底層實際是個鏈表
#lpush key value1 value2...|rpush key value1 value2...|lrange key start end[0 -1爲所有] 127.0.0.1:6379> LPUSH list1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> LRANGE list1 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> RPUSH list2 1 2 3 4 5 (integer) 5 127.0.0.1:6379> LRANGE list2 0 -1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5"
#LPOP list|RPOP list 127.0.0.1:6379> LPOP list1 "5" 127.0.0.1:6379> LPOP list2 "1" 127.0.0.1:6379> RPOP list1 "1" 127.0.0.1:6379> RPOP list2 "5"
#lindex key index:按照索引下標得到元素(從上到下) 127.0.0.1:6379> LRANGE list1 0 -1 1) "4" 2) "3" 3) "2" 127.0.0.1:6379> LRANGE list2 0 -1 1) "2" 2) "3" 3) "4" 127.0.0.1:6379> LINDEX list1 3 (nil) 127.0.0.1:6379> LINDEX list1 2 "2" 127.0.0.1:6379> LINDEX list2 2 "4"
#llen key 127.0.0.1:6379> LLEN list1 (integer) 3
#LREM key num value:從left往right刪除num 個值等於value的元素,返回的值爲實際刪除的數量 #LREM list3 0 值,表示刪除所有給定的值。零個就是所有值 127.0.0.1:6379> RPUSH list3 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 (integer) 15 127.0.0.1:6379> LREM list3 (error) ERR wrong number of arguments for 'lrem' command 127.0.0.1:6379> LREM list3 2 3 (integer) 2 127.0.0.1:6379> LRANGE list3 0 -1 1) "1" 2) "1" 3) "1" 4) "2" 5) "2" 6) "2" 7) "3" 8) "4" 9) "4" 10) "4" 11) "5" 12) "5" 13) "5"
#LTRIM key start end:截取指定索引區間的元素 127.0.0.1:6379> LPUSH list1 1 2 3 4 5 6 (integer) 6 127.0.0.1:6379> LRANGE list1 0 -1 1) "6" 2) "5" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> LTRIM list1 2 3 OK 127.0.0.1:6379> LRANGE list1 0 -1 1) "4" 2) "3"
#RPOPLPUSH key1 key2:移除列表的最後一個元素,並將該元素添加到另外一個列表並返回 127.0.0.1:6379> LPUSH list1 1 2 3 (integer) 3 127.0.0.1:6379> LPUSH list2 4 5 6 (integer) 3 127.0.0.1:6379> LRANGE list1 0 -1 1) "3" 2) "2" 3) "1" 127.0.0.1:6379> LRANGE list2 0 -1 1) "6" 2) "5" 3) "4" 127.0.0.1:6379> RPOPLPUSH list1 list2 "1" 127.0.0.1:6379> LRANGE list1 0 -1 1) "3" 2) "2" 127.0.0.1:6379> LRANGE list2 0 -1 1) "1" 2) "6" 3) "5" 4) "4"
#LSET key index value:將index位置的值更換爲value 127.0.0.1:6379> LRANGE list1 0 -1 1) "3" 2) "2" 127.0.0.1:6379> LSET list1 1 xxx OK 127.0.0.1:6379> LRANGE list1 0 -1 1) "3" 2) "xxx"
#LINSERT key before|after index value:在list某個已有值的前|後再添加具體值 127.0.0.1:6379> LPUSH list1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> LRANGE list1 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> LINSERT list1 before 3 java (integer) 6 127.0.0.1:6379> LRANGE list1 0 -1 1) "5" 2) "4" 3) "java" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> LINSERT list1 after 3 javaweb (integer) 7 127.0.0.1:6379> LRANGE list1 0 -1 1) "5" 2) "4" 3) "java" 4) "3" 5) "javaweb" 6) "2" 7) "1" |
List總結
它是一個字符串鏈表,left、right均可以插入添加; 若是鍵不存在,建立新的鏈表; 若是鍵已存在,新增內容; 若是值全移除,對應的鍵也就消失了。 鏈表的操做不管是頭和尾效率都極高,但假如是對中間元素進行操做,效率就很慘淡了。 |
3.Set集合
Redis的Set是string類型的無序集合。它是經過HashTable實現的。
#sadd|smembers|sismember 127.0.0.1:6379> sadd set1 1 1 2 2 3 3 (integer) 3 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> SISMEMBER set1 1 (integer) 1 127.0.0.1:6379> SISMEMBER set1 a (integer) 0
#SCARD:獲取集合裏面的元素個數 127.0.0.1:6379> SCARD set1 (integer) 3
# SREM key value:刪除集合中元素 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> SREM set1 1 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "2" 2) "3"
# SRANDMEMBER key num:隨機出幾個值 #num:超過最大數量就所有取出.若是寫的值是負數,好比-3 ,表示須要取出3個,可是可能會有重複值 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD set1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SRANDMEMBER set1 2 1) "5" 2) "2" 127.0.0.1:6379> SRANDMEMBER set1 2 1) "3" 2) "4" 127.0.0.1:6379> SRANDMEMBER set1 2 1) "3" 2) "1" 127.0.0.1:6379> SRANDMEMBER set1 2 1) "3" 2) "1"
#SPOP key:隨機出棧 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> SPOP set1 "4" 127.0.0.1:6379> SPOP set1 "1" 127.0.0.1:6379> SPOP set1 "2" 127.0.0.1:6379> SMEMBERS set1 1) "3" 2) "5"
#SMOVE key1 key2:將key1裏的某個值賦給key2 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD set1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SMEMBERS set1 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 127.0.0.1:6379> smove set1 set2 1 (integer) 1 127.0.0.1:6379> SMEMBERS set1 1) "2" 2) "3" 3) "4" 4) "5" 127.0.0.1:6379> SMEMBERS set2 1) "1"
#SDIFF key1 key2:在ey1裏面而不在後面任何一個key2裏面的項 #SINTER key1 key2:在key1中且在key2中含有 #SUNION key1 key2:在key1中且在key2中的並集 127.0.0.1:6379> FLUSHALL OK 127.0.0.1:6379> SADD set1 1 2 3 4 5 (integer) 5 127.0.0.1:6379> SADD set2 4 5 6 7 8 (integer) 5 127.0.0.1:6379> SDIFF set1 set2 1) "1" 2) "2" 3) "3" 127.0.0.1:6379> SDIFF set2 set1 1) "6" 2) "7" 3) "8" 127.0.0.1:6379> SINTER set1 set2 1) "4" 2) "5" 127.0.0.1:6379> SUNION set1 set2 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6" 7) "7" 8) "8"
|
4.Hash哈希
Redis hash 是一個鍵值對集合。
Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。相似於Java的Map的<String,Object>。
#hset|hget|hmset|hmget|hgetall|hdel 127.0.0.1:6379> HSET hash1 k1 v1 (integer) 1 127.0.0.1:6379> HGET hash1 k1 "v1" 127.0.0.1:6379> HMSET hash2 id 1 name pluto age 24 OK 127.0.0.1:6379> HGETALL hash1 1) "k1" 2) "v1" 127.0.0.1:6379> HGETALL hash2 1) "id" 2) "1" 3) "name" 4) "pluto" 5) "age" 6) "24" 127.0.0.1:6379> HDEL hash1 k1 (integer) 1 127.0.0.1:6379>
#HLEN:計算hash的長度 127.0.0.1:6379> HLEN hash1 (integer) 0 127.0.0.1:6379> HLEN hash2 (integer) 3
#HEXISTS hashname key:在key裏面的某個值的key 127.0.0.1:6379> HGETALL hash2 1) "id" 2) "1" 3) "name" 4) "pluto" 5) "age" 6) "24" 127.0.0.1:6379> HEXISTS hash2 id (integer) 1 127.0.0.1:6379> HEXISTS hash2 email (integer) 0
#HKEYS|HVALS 127.0.0.1:6379> HKEYS hash2 1) "id" 2) "name" 3) "age" 127.0.0.1:6379> HVALS hash2 1) "1" 2) "pluto" 3) "24"
#HINCRBY|HINCRBYFLOAT:增長整數|增長小數 127.0.0.1:6379> HINCRBY hash2 age 2 (integer) 26 127.0.0.1:6379> HINCRBY hash2 age 2 (integer) 28 127.0.0.1:6379> HINCRBY hash2 age 2 (integer) 30 127.0.0.1:6379> hset hash2 score 91.5 (integer) 1 127.0.0.1:6379> HGETALL hash2 1) "id" 2) "1" 3) "name" 4) "pluto" 5) "age" 6) "30" 7) "score" 8) "91.5" 127.0.0.1:6379> HINCRBYFLOAT hash2 score 0.5 "92"
#HSETNX hash key value:不存在賦值,存在了不賦值 127.0.0.1:6379> HGETALL hash2 1) "id" 2) "1" 3) "name" 4) "pluto" 5) "age" 6) "30" 7) "score" 8) "92" 127.0.0.1:6379> HSETNX hash2 name plutoo (integer) 0 127.0.0.1:6379> HSETNX hash2 email pluto@pluto.com (integer) 1 127.0.0.1:6379> HGETALL hash2 1) "id" 2) "1" 3) "name" 4) "pluto" 5) "age" 6) "30" 7) "score" 8) "92" 9) "email" 10) "pluto@pluto.com" |
5.Zset
Redis zset 和 set 同樣也是string類型元素的集合,且不容許重複的成員。
不一樣的是每一個元素都會關聯一個double類型的分數。
redis正是經過分數來爲集合中的成員進行從小到大的排序。zset的成員是惟一的,但分數(score)卻能夠重複。
在set基礎上,加一個score值。以前set是k1 v1 v2 v3,如今zset是k1 score1 v1 score2 v2。
#ZADD |ZRANGE 127.0.0.1:6379> ZADD zset1 60 v1 70 v2 80 v3 90 v4 (integer) 4 127.0.0.1:6379> ZADD zset1 60 v1 70 v2 80 v3 90 v4 (integer) 0 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379> ZRANGE zset1 0 -1 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90"
#ZRANGEBYSCORE key start end #ZRANGEBYSCORE key start (end:不包含end #ZRANGEBYSCORE key (start (end:不包含start end #ZRANGEBYSCORE key start end limit index num:返回限制,開始位置index 截取num個相似於分頁
127.0.0.1:6379> ZRANGEBYSCORE zset1 60 90 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379> ZRANGEBYSCORE zset1 60 (90 1) "v1" 2) "v2" 3) "v3" 127.0.0.1:6379> ZRANGEBYSCORE zset1 (60 (90 1) "v2" 2) "v3" 127.0.0.1:6379> ZRANGEBYSCORE zset1 60 90 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379> ZRANGEBYSCORE zset1 60 90 limit 2 2 1) "v3" 2) "v4" 127.0.0.1:6379> ZRANGEBYSCORE zset1 60 90 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90"
#ZRANGE:刪除元素,項的值能夠是多個 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "v1" 2) "v2" 3) "v3" 4) "v4" 127.0.0.1:6379> ZREM zset1 v1 (integer) 1 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "v2" 2) "v3" 3) "v4" 127.0.0.1:6379> ZREM zset1 v2 v3 (integer) 2 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "v4"
#ZCARD key:獲取集合中元素個數 #ZCOUNT key start end:獲取分數區間內元素個數 #ZRANK zset value:獲取value在zset中的下標位置 #ZSCORE zset value:按照值得到對應的分數 127.0.0.1:6379> ZADD zset1 60 v1 70 v2 80 v3 90 v4 100 v5 (integer) 5 127.0.0.1:6379> ZCARD zset1 (integer) 5 127.0.0.1:6379> ZCOUNT zset1 60 80 (integer) 3 127.0.0.1:6379> ZRANK zset1 v2 (integer) 1 127.0.0.1:6379> zscore zset1 v1 "60"
#|ZRANK|ZREVRANK key values:正序|逆序得到下標索引值 127.0.0.1:6379> ZRANGE zset1 0 -1 1) "v1" 2) "v2" 3) "v3" 4) "v4" 5) "v5" 127.0.0.1:6379> ZREVRANK zset1 v1 (integer) 4 127.0.0.1:6379> ZREVRANK zset1 v5 (integer) 0 127.0.0.1:6379> ZRANK zset1 v1 (integer) 0 127.0.0.1:6379> ZRANK zset1 v5 (integer) 4
#ZRANGE|ZREVRANGE :正序|逆序輸出[key,value] 127.0.0.1:6379> ZRANGE zset1 0 -1 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90" 9) "v5" 10) "100" 127.0.0.1:6379> ZREVRANGE zset1 0 -1 withscores 1) "v5" 2) "100" 3) "v4" 4) "90" 5) "v3" 6) "80" 7) "v2" 8) "70" 9) "v1" 10) "60"
#ZRANGEBYSCORE|ZREVRANGEBYSCORE zset1 90 60 withscores:分數範圍的正|反輸出 127.0.0.1:6379> ZRANGEBYSCORE zset1 60 90 withscores 1) "v1" 2) "60" 3) "v2" 4) "70" 5) "v3" 6) "80" 7) "v4" 8) "90" 127.0.0.1:6379> ZREVRANGEBYSCORE zset1 60 90 withscores (empty list or set) 127.0.0.1:6379> ZREVRANGEBYSCORE zset1 90 60 withscores 1) "v4" 2) "90" 3) "v3" 4) "80" 5) "v2" 6) "70" 7) "v1" 8) "60"
|
參考文檔:Http://redisdoc.com/