redis入門--基礎數據結構篇

概述:

  • redis是key-value的數據結構,每條數據都是⼀個鍵值對
  • 鍵的類型是字符串
  • 注意:鍵不能重複

  • 值得類型有五種:string(字符串),list(列表),hash(字典),set(集合),zset(有序的集合)

數據操作

  • 保存
  • 修改
  • 獲取
  • 刪除

命令文章鏈接:http://redis.cn/commands.html

string(字符串)

字符串類型是Redis中最爲基礎的數據存儲類型,內部表示是一個字符數組

它在Redis中是二進制安全的,這便意味着該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。

在Redis中字符串類型的Value最多可以容納的數據長度是512M

保存/獲取

如果設置的鍵不存在則爲添加,如果設置的鍵已經存在則修改

set key value  設置

get key         獲取


127.0.0.1:6379> set hometown leshan 
OK
127.0.0.1:6379> get hometown 
"leshan"
127.0.0.1:6379> set hometown chengdu
OK
127.0.0.1:6379> get hometown 
"chengdu"
127.0.0.1:6379>

批量鍵值對

mset key1 value1 key2 value2 ....   設置
mget key1 key2 .....   獲取


127.0.0.1:6379> set name1 onion
OK
127.0.0.1:6379> set name2 tom 
OK
127.0.0.1:6379> mget name1
1) "onion"
127.0.0.1:6379> mget name1 name2 
1) "onion"
2) "tom"
127.0.0.1:6379> mget name1 name2 name3 
1) "onion"
2) "tom"
3) (nil)
127.0.0.1:6379> 
127.0.0.1:6379> mset name1 qqq name2 wwww name3 eeee
OK
127.0.0.1:6379> mget name1 name2 name3 
1) "qqq"
2) "wwww"
3) "eeee"
127.0.0.1:6379> 

設置過期時間

setex key seconds value

127.0.0.1:6379> setex name 5 tina
OK
127.0.0.1:6379> get name 
"tina"
127.0.0.1:6379> get name 
(nil)
127.0.0.1:6379> 

鍵命令

查找鍵、判斷鍵是否存在

鍵查找     keys <pattern>

判斷鍵是否存在   exist <key> 

判斷鍵的類型    type <key> 

刪除鍵   del [key...]

查看生存時間  ttl  <key>

#匹配所有的鍵
127.0.0.1:6379> KEYS * 
1) "name2"
2) "hometown"
3) "name1"
4) "name3"
#匹配n開頭的鍵
127.0.0.1:6379> keys n*
1) "name2"
2) "name1"
3) "name3"
#判斷鍵是否存在
127.0.0.1:6379> EXISTS hometown 
(integer) 1
127.0.0.1:6379> EXISTS home
(integer) 0
127.0.0.1:6379>
判斷鍵的類型 
127.0.0.1:6379> type name
none
127.0.0.1:6379> type name1
string
127.0.0.1:6379>
#ttl 生存時間
127.0.0.1:6379> setex name 20 tina 
OK
127.0.0.1:6379> 
127.0.0.1:6379> ttl name 
(integer) 16
127.0.0.1:6379> ttl name 
(integer) 15
127.0.0.1:6379> ttl name 
(integer) 14
127.0.0.1:6379> ttl name 

 

hash類型

  • hash⽤於存儲對象,對象的結構爲屬性、值
  • 值的類型爲string

設置單個屬性      hset key field value

設置多個屬性      hmset key field1 value1 field2 value2 ...

獲取所有的key    hkeys  key

獲取⼀個屬性的值  hget key field

獲取多個屬性的值   hmget key field1 field2 ...

獲取所有屬性的值    hvals key

刪除   

  • 刪除整個hash鍵及值,使⽤del命令
  • 刪除屬性,屬性對應的值會被⼀起刪除

  • hdel key field1 field2 ...

#設置單個
127.0.0.1:6379> hset books java "think in java"
(integer) 1
#設置多個
127.0.0.1:6379> HMSET user name onion age 20 hometown "leshan"
OK
#獲取所有的key
127.0.0.1:6379> HKEYS user
1) "name"
2) "age"
3) "hometown"
#獲取屬性的值
127.0.0.1:6379> hget user age 
"20"
127.0.0.1:6379> hmget user age hometown 
1) "20"
2) "leshan"
127.0.0.1:6379> 
#獲取所有的屬性的值
127.0.0.1:6379> HVALS user
1) "onion"
2) "20"
3) "leshan"
#刪除
127.0.0.1:6379> hdel user name age 
(integer) 2
127.0.0.1:6379> HVALS user
1) "leshan"
127.0.0.1:6379> 
127.0.0.1:6379> del user
(integer) 1
127.0.0.1:6379> HVALS user
(empty list or set)

 

list類型

  • 列表的元素類型爲string
  • 按照插⼊順序排序
  • 注意它是鏈表不是數組,意味着插入和刪除非常快,時間複雜度O(1),但是查詢慢O(n)
  • redis 列表結構常用於做異步隊列使用,將需要延後處理的任務結構體序列化成字符串,塞進列表,另一個線程從這個列表中輪詢數據進行處理

在左側插⼊數據   lpush key value1 value2 ...

在右側插⼊數據   rpush key value1 value2 ...

在指定元素的前或後插⼊新元素   linsert key before或after 現有元素 新元素

獲取

  • 返回列表⾥指定範圍內的元素

    • start、stop爲元素的下標索引
    • 索引從左側開始,第⼀個元素爲0
    • 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素

           lrange key start stop

設置指定索引位置的元素值

  • 索引從左側開始,第⼀個元素爲0
  • 索引可以是負數,表示尾部開始計數,如-1表示最後⼀個元素

            lset key index value

刪除

  • 刪除指定元素

    • 將列表中前count次出現的值爲value的元素移除
    • count > 0: 從頭往尾移除
    • count < 0: 從尾往頭移除
    • count = 0: 移除所有

    lrem key count value

#右進左出:隊列
127.0.0.1:6379> RPUSH num 1 2 3 4 5 
(integer) 5
127.0.0.1:6379> LLEN num 
(integer) 5
127.0.0.1:6379> LPOP num 
"1"
127.0.0.1:6379> LPOP num 
"2"
127.0.0.1:6379> LPOP num 
"3"
127.0.0.1:6379> LPOP num 
"4"
127.0.0.1:6379> LPOP num 
"5"
127.0.0.1:6379> 
#左進左出,棧  
127.0.0.1:6379> LPUSH num2 1 2 3 4 
(integer) 4
127.0.0.1:6379> lpop num2 
"4"
127.0.0.1:6379> lpop num2 
"3"
127.0.0.1:6379> lpop num2 
"2"
127.0.0.1:6379> lpop num2 
"1"
127.0.0.1:6379> lpop num2 
(nil)
127.0.0.1:6379> 


127.0.0.1:6379> LPUSH a 1 2 3 4 5 6 7 8 9 0
(integer) 10
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> LRANGE a 0 -1   #獲取所有的元素 O(n)
 1) "0"
 2) "9"
 3) "8"
 4) "7"
 5) "6"
 6) "5"
 7) "4"
 8) "3"
 9) "2"
10) "1"
127.0.0.1:6379> ltrim a  4 8   #保留區間裏的值 兩邊都是閉區間[]
OK
127.0.0.1:6379> LRANGE a 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
127.0.0.1:6379>

#刪除
127.0.0.1:6379> lpush a2 a b a b a b 
(integer) 6
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "b"
4) "a"
5) "b"
6) "a"
127.0.0.1:6379> lrem a2 -2 b  #從右側第2個開始刪除兩個b
(integer) 2
127.0.0.1:6379> lrange a2 0 -1
1) "b"
2) "a"
3) "a"
4) "a"
127.0.0.1:6379> 

set類型

  • ⽆序集合
  • 元素爲string類型
  • 元素具有唯⼀性,不重複  (去重)
  • 說明:對於集合沒有修改操作

添加元素   sadd key member1 member2 ...

返回所有的元素     smembers key

刪除指定元素    srem key

 

#添加
127.0.0.1:6379> SADD books python java c go 
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> SADD books python java c go 
(integer) 0
#查看
127.0.0.1:6379> SMEMBERS books 
1) "python"
2) "go"
3) "c"
4) "java"
#刪除
127.0.0.1:6379> SREM books python 
(integer) 1
127.0.0.1:6379> SMEMBERS books 
1) "go"
2) "c"
3) "java"

 

zset類型(有序集合)

  • sorted set,有序集合
  • 元素爲string類型
  • 元素具有唯⼀性,不重複
  • 每個元素都會關聯⼀個double類型的score,表示權重,通過權重將元素從⼩到⼤排序
  • 說明:沒有修改操作

它是一個set,保證內部value的唯一性,可以爲每個value賦予一個score,表示這個value 的排序權重。

內部實現“跳躍表”的數據結構

添加

zadd key score1 member1 score2 member2 ...

127.0.0.1:6379> zadd name 4 tim 5 tom 6 tina 7 onion 
(integer) 4

獲取

  • 返回指定範圍內的元素
  • start、stop爲元素的下標索引
  • 索引從左側開始,第⼀個元素爲0
  • 索引可以是負數,表示從尾部開始計數,如-1表示最後⼀個元素

zrange key start stop

  • 返回score值在min和max之間的成員

zrangebyscore key min max

  • 返回成員member的score值

zscore key member

#獲取name 中所有的value
127.0.0.1:6379> ZRANGE name 0 -1 
1) "tim"
2) "tom"
3) "tina"
4) "onion"
#獲取權重 5-7 的元素值
127.0.0.1:6379> ZRANGEBYSCORE name 5 7 
1) "tom"
2) "tina"
3) "onion"
#獲取onion 的權重
127.0.0.1:6379> ZSCORE name onion
"7"

刪除

  • 刪除指定元素

    zrem key member1 member2 ...

  • 刪除權重在指定範圍的元素

zremrangebyscore key min max

 

#刪除 成員 tom 
127.0.0.1:6379> ZRANGE name 0 4
1) "tim"
2) "tom"
3) "tina"
4) "onion"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> ZREM name tom 
(integer) 1
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
2) "tina"
3) "onion"
#刪除去權重在6-7 之間的成員
127.0.0.1:6379> zremrangebyscore name 6 7 
(integer) 2
127.0.0.1:6379> ZRANGE name 0 -1
1) "tim"
127.0.0.1:6379>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章