Redis數據類型

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:leftright刪除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總結

它是一個字符串鏈表,leftright均可以插入添加;

若是鍵不存在,建立新的鏈表;

若是鍵已存在,新增內容;

若是值全移除,對應的鍵也就消失了。

鏈表的操做不管是頭和尾效率都極高,但假如是對中間元素進行操做,效率就很慘淡了。

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:獲取valuezset中的下標位置

#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/

相關文章
相關標籤/搜索