[Redis] Key命令與五種數據的操作(基本指令)

作者:不一定會持續更新。

Key命令

  • 在查找key的時候支持正則

格式:

keys pattern

範例:

keys *    # 查所有key,常用
keys 'k*' # 查名稱包含[開頭為k]的key

檢查Key是否存在

格式(可多個): 存在返回1,不存在返回0

exists key1

範例:

exists k0
exists k1
exists k0 k1
exists k0 k1 k2 k3

查看Key對應的value的類型(Type)

格式:

type key

redis⽀持的五種類型:

  1. string
  2. list
  3. set
  4. zset
  5. hash

刪除Key

格式:

del key1
del key1 key2 key3 # 刪除多個

設置Key過期時間

如果在一開始就沒有指定過期時間,Key會一直存在,直到用Del才會移除,
在已有的Key設置過期時間(以秒為單位):

expire key seconds

查看Key的有效時間:

格式:

ttl key

String字符串

字符串類型是Redis中最為基礎的數據存儲類型,它在Redis中是二進制安全的,這便意味著該類型可以接受任何格式的數據,如JPEG圖像數據或Json對象描述信息等。在Redis中字符串類型的Value最多可以容納的數據長度是512M。

想了解更多命令可參考:String

Set、Setnx 設置key與value & 設置多個

  • 如果設置的key不存在則添加,若key已存在則修改value。

格式:

set key value # 設置一個
mset key1 value1 key2 value2 key2 value2 # 設置多個

設置一個key與value:

set name hello
  • 如果設置的key存在則不做任何動作。
setnx name hello
  • 設置多個key與value:
mset k1 hello k2 hi k3 good

設置過期時間

  • 為key設定value值,並且設定過期時間

格式:

setex key seconds value # 以秒為單位

範例:

setex ice 5 cream # 設置5秒後過期
get ice # cream
get ice # 5秒後在獲取會回nil
  • 在key的value內追加值

格式:

append key value

原本k3的value是good,我在k3的value追加值:

append k3 morning

但若是原本沒有key的話,會設置一個新的key與value

獲取value & 多個valeu

  • get:根據鍵獲取值,如果不存在此鍵則返回nil

格式:

get key
mget key1 key2 key3 # 獲取多個值

範例:

mget k1 k2 k3 

List列表

列表的元素類型為有序列的字符串
想了解更多命令可參考:List

增加

  • 從左/右側添加數據
lpush key value1 value2 value3 ....valueN  # 左側
rpush key value1 value2 value3 ....valueN  # 右側

下圖為從左/右側加入數據的範例:

lpush Llist A B C D E
rpush Rlist R O P W Z
lrange Llist 0 5
lrange Rlist 0 5

lpush的第一個元素(0)是E,因為lpush插入的方式是像下方影片的插入方式,
所以原本第一個A才會在最後。(右側則不舉例)


  • 指定位置添加數據
    可指定要在某一元素的前或後插入新的元素

格式:

linsert key before/after 現有元素 插入的新元素

範例:

lrange Llist 0 -1  # 顯示Llist的所有元素
linsert Llist before B b1  # 在現有元素B的前方插入新元素b1

修改指定位置的value

  1. 索引可以是負數
  2. 最左側為第一個元素0
  3. 最後一個元素是-1

格式:

lset key index value

範例:

lrange Llist 0 -1
lset Llist 1 Z

這裡要注意的是,第一個元素是0,所以把原本的元素1:D改成了Z

獲取value

  • 獲取列表內指定範圍的值
  1. 索引可以是負數
  2. 最左側為第一個元素0
  3. 最後一個元素是-1

格式:

lrange key start stop  

常用的顯示所有元素方式為:lrange key 0 -1

刪除某個/多個元素

  • 刪除指定的值

格式:

lrem key count value

移除元素可以是一個或多個,都是照count來決定移除的數量和方向。

  1. count > 0 : 從元素0開始,移除count個與value相同的元素
  2. count < 0 : 從最後一個元素,移除count個與value相同的元素
  3. count = 0 : 移除表中與value相同的元素

範例:

rpush lrem_test aa bb cc oo aa zz bb aa rr aa  # 先建立一個list
lrange lrem_test 0 -1  # 檢視一下新創立的list
lrem lrem_test 2 aa  # 刪除2個與aa相同的元素 (下方圖一)
lrem lrem_test -1 aa  # 移除表中後面數的第1個與aa相同的元素 (下方圖二)
lrem lrem_test 0 bb  # 移除表中與bb相同的元素 (下方圖三)

(下方為圖一)

(下方為圖二)

(下方為圖三)

想了解更多命令可參考:lrem

Set集合

  • ⽆序集合
  • 元素為字符串類型
  • 元素具有唯唯性,不重複
  • Set集合沒有修改操作
    想了解更多命令可參考:Set集合

增加

添加元素格式:

sadd key member1 member2 ...

範例:

sadd aset Abby Kitty Bobby

獲取

獲取所有元素格式:

smembers key

下圖顯示結果,很像list的

刪除

删除指定元素格式:

srem key value

list刪除方式是lrem,集合的刪除方式是srem,只要看頭是l或s就能知道是什麼數據,
集合的值不能重複,所以不需指定index。

zset有序集合

可以當作是Set的升級版,在基礎上加了”權重”。

  1. 有序的集合
  2. 元素為字符串類型
  3. 元素具有唯一性,不可重複
  4. score表示權重,可以是整數或浮點數,通過權重將從⼩到大元素排序
  5. 與集合一樣,沒有修改操作

增加

格式如下:

zadd key score1 member1 score2 member2 ...

範例:

zadd zset_test 4 Abby 5 Kitty 6 Lucy 1 Bocky 4 Pocky 1 Happy

獲取member與score

與List獲取元素很相似,zset是有序集合,但不需設數量,因為集合不能有重複的元素。

  1. 需指定開始與結束位置
  2. 索引由左至右,索引可以是負數
  3. 第一個元素為0,-1表示最后⼀个元素

格式:

zrange key start stop

範例:

zrange zset_test 0 -1
  • 獲取score在min與max之間的值

格式:

zrangebyscore key min max

範例:

zrangebyscore zset_test 1 2
  • 獲取member的score值

格式:

zscore key member

範例為:獲取Bocky、Happy(member)的score

刪除

  • 删除指定的member

格式:

zrem key member1 member2 ....

範例:

zrem zset_test Pocky
  • 删除有score值指定範圍的member

格式:

zremrangebyscore key min max

範例:

zremrangebyscore zset_test 1 2  # 刪除集合zset_test中權重值是1~2之間的元素

範例的Bocky、Happy的score值為1。

hash

  • 用於存儲對象,對象的結構為屬性(field)與值(value)
  • 值的類型為字符串
    (滿像python的dict)

增加

  • 設置單個屬性

hset: 如果給定的Key不存在則建立,若存在則覆蓋,成功返回1
hsetnx: 如果給定的key已經存在,則不執行該命令,返回0

格式:

hset key field value

範例:

hset today very happy
  • 設置多個屬性
    如果有一樣field的名稱但不同的value,則會覆蓋掉。
    格式:
hmset key field1 value1 field2 value2 ...

範例:

hmset yesterday very happy sometimes read often playgames

獲取field與value

  • 獲取所有field(属性)

格式:

hkeys key

範例:

hkeys yesterday
  • 獲取key裡面所有的value

格式:

hvals key
  • 獲取field的value

格式:

hget key field # 獲取一個value
hmget key field1 field2 field3 ...  # 獲取多value

範例:

hget yesterday very
hmget yesterday very sometimes often 

刪除属性

  • 刪除整個hash則使用del(與string一樣)
  • 刪除field(屬性)時,value(值)也會一併刪除

格式:

hdel key field1 field2 ...  

注意:
del是刪除key,hdel才是刪除屬性

發佈留言

內容索引