1. 程式人生 > >1.2 Redis的命令

1.2 Redis的命令

1.2 Redis的命令

1、redis的五種資料型別

1.1、redis的key

redis的key是字串型別,如果中間有空格或者轉義字元等,要用“ ”。

  1. 命名建議:物件型別:物件ID:物件屬性
  2. 多個單詞之間以“.”來分隔
  3. key的命名應該在可讀的情況下,儘量簡短

1.2、redis的value支援五種資料型別

redis是目前一個非常優秀的key-value儲存系統。和Memcached類似,它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合)、zset(sorted set有序集合)和hash(雜湊型別)。還是一個nosql資料庫。

  1. String:字串,可以儲存String、Integer、Float型的資料,甚至是二進位制資料,一個字串的最大容量是512M
  2. List:字串List,底層實現上不是陣列,而是連結串列
  3. Set:字串Set,無序不可重複,是通過HashTable實現的
  4. Hash:按Hash方式來存放字串
  5. ZSet:字串Set,有序且不可重複,根據Score來排序。底層使用散列表和跳躍表來實現,所以讀取中間資料也很快

2、redis的命令

2.1、對Keys的操作命令

2.1.1、Keys:獲得符合規則的鍵名列表

keys pattern 查詢相應的key,pattern是支援glob風格的萬用字元格式。
在redis裡,允許模糊查詢key

萬用字元 作用
* 通配任意多個字元
? 通配單個字元
[] 通配括號內的某1個字元
\x 匹配字元x,用於轉義符號
redis 127.0.0.1:6379> flushdb
OK
redis 127.0.0.1:6379> keys *
(empty list or set)
redis 127.0.0.1:6379> mset one 1 two 2 three 3 four 4
OK
redis 127.0.0.1:6379> keys o*
1) "one"
redis 127.0.0.1:6379> key *o
(error) ERR unknown command 'key'
redis 127.0.0.1:6379> keys *o
1) "two"
redis 127.0.0.1:6379> keys ???
1) "one"
2) "two"
redis 127.0.0.1:6379> keys on?
1) "one"
redis 127.0.0.1:6379> set ons yes
OK
redis 127.0.0.1:6379> keys on[eaw]
1) "one"

2.1.2、EXISTS key [key …]:判斷鍵值是否存在

exists key:判斷key是否存在,返回1/0

2.1.3、del:刪除key

del key1 key2 … Keyn:刪除1個或多個鍵
返回值: 不存在的key忽略掉,返回真正刪除的key的數量

注意:del命令不支援萬用字元,但可以結合linux管道和xargs命令來自定義刪除

例子:redis-cli keys k* | xargs redis-cli del

2.1.4、TYPE key:獲取鍵值的資料型別

有string,link,set,order set, hash

2.1.5、RENAME key newkey:給key賦一個新的key名

注意:如果newkey已存在,則newkey的原值被覆蓋

2.1.6、RENAMENX key newkey:如果不存在,則改名

返回:發生修改返回1,未發生修改返回0
注: nx–> not exists,即newkey不存在時,作改名動作

2.1.7、MOVE key db:移動key到其他資料庫

move key db
(注意: 一個redis程序,打開了不止一個數據庫, 預設開啟16個數據庫,從0到15編號,
如果想開啟更多資料庫,可以從配置檔案修改)
select 1:使用1號資料庫

redis 127.0.0.1:6379[1]> select 2
OK
redis 127.0.0.1:6379[2]> keys *
(empty list or set)
redis 127.0.0.1:6379[2]> select 0
OK
redis 127.0.0.1:6379> keys *
1) "name"
2) "cc"
3) "a"
4) "b"
redis 127.0.0.1:6379> move cc 2
(integer) 1
redis 127.0.0.1:6379> select 2
OK
redis 127.0.0.1:6379[2]> keys *
1) "cc"
redis 127.0.0.1:6379[2]> get cc
"3"

2.1.8、RANDOMKEY:返回一個隨機key

2.1.9、TTL/PTTL key:查詢key的生命週期

返回: TTL/PTTL key——秒數/毫秒

注意:對於不存在的key或已過期的key/不過期的key,都返回-1
Redis2.8中,對於不存在的key,返回-2

2.1.10、EXPIRE key seconds:設定key的生命週期,以秒為單位

expire key 整型值
作用: 設定key的生命週期,以秒為單位

同理:
pexpire key 毫秒數, 設定生命週期
pttl key, 以毫秒返回生命週期

返回值:設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

首先建立一個 key 並賦值:
redis 127.0.0.1:6379> SET runooobkey redis
OK
為 key 設定過期時間:
redis 127.0.0.1:6379> EXPIRE runooobkey 60
(integer) 1

以上例項中我們為鍵,runooobkey 設定了過期時間為 1 分鐘,1分鐘後該鍵會自動刪除。

2.1.11、PERSIST key:把指定key置為永久有效

2.1.12、DUMP key:用於序列化給定 key ,並返回被序列化的值。

返回值:如果 key 不存在,那麼返回 nil 。 否則,返回序列化之後的值。

首先,我們在 redis 中建立一個 key 並設定值。
redis> SET greeting “hello, dumping world!”
OK
現在使用 DUMP 序列化鍵值。
redis> DUMP greeting
“\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde”
redis> DUMP not-exists-key
(nil)

2.1.13、EXPIREAT key timestamp:用於以 UNIX 時間戳(unix timestamp)格式設定 key 的過期時間。key 過期後將不再可用。

返回值:設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

首先建立一個 key 並賦值:
redis 127.0.0.1:6379> SET runoobkey redis
OK
為 key 設定過期時間:
redis 127.0.0.1:6379> EXPIREAT runoobkey 1293840000
(integer) 1
EXISTS runoobkey
(integer) 0

2.1.14、PEXPIRE key milliseconds

Redis PEXPIRE 命令和 EXPIRE 命令的作用類似,但是它以毫秒為單位設定 key 的生存時間,而不像 EXPIRE 命令那樣,以秒為單位。

返回值:設定成功,返回 1,key 不存在或設定失敗,返回 0

首先建立一個 key 並賦值:
redis> SET mykey “Hello”
“OK”
redis> PEXPIRE mykey 1500
(integer) 1
redis> TTL mykey
(integer) 1
redis> PTTL mykey
(integer) 1498

2.1.15、PEXPIREAT key milliseconds-timestamp:用於設定 key 的過期時間,以毫秒計。key 過期後將不再可用。

返回值:設定成功返回 1 。 當 key 不存在或者不能為 key 設定過期時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新 key 的過期時間)返回 0 。

首先建立一個 key 並賦值:
redis 127.0.0.1:6379> SET runoobkey redis
OK
為 key 設定過期時間:
redis 127.0.0.1:6379> PEXPIREAT runoobkey 1555555555005
(integer) 1

2.2、對String型別的操作命令

2.2.1、SET key value [EX seconds] [PX milliseconds] [NX|XX]:用於設定給定 key 的值。如果 key 已經儲存其他值, SET 就覆寫舊值,且無視型別。

set key value [ex 秒數] / [px 毫秒數] [nx] /[xx]

set a 1 ex 10    , 10秒有效
Set a 1 px 9000  , 9秒有效

注意:如果ex、px同時寫,以後面的有效期為準
如 set a 1 ex 100 px 9000,實際有效期是9000毫秒

nx::表示key不存在時,執行操作
xx::表示key存在時,執行操作

2.2.2、 GET key:用於獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字串型別,返回一個錯誤。

返回值:返回 key 的值,如果 key 不存在時,返回 nil。 如果 key 不是字串型別,那麼返回一個錯誤。

2.2.3、del key [key …]:刪除key

2.2.4、INCR/DECR key:遞增或遞減整數值

Redis Incr 命令將 key 中儲存的數字值增一。

  • 如果 key 不存在,那麼 key 的值會先被初始化為 0 ,然後再執行 INCR 操作。
  • 如果值包含錯誤的型別,或字串型別的值不能表示為數字,那麼返回一個錯誤。
  • 本操作的值限制在 64 位(bit)有符號數字表示之內。

返回值:執行 INCR 命令之後 key 的值。

redis> SET page_view 20
OK
redis> INCR page_view
(integer) 21
redis>GET page_view # 數字值在 Redis 中以字串的形式儲存
“21”

2.2.5、INCRBY/DECRBY key increment:遞增或遞減整數值,可指定增減的數值

redis 127.0.0.1:6379> incrby age 90
(integer) 92

2.2.6、INCRBYFLOAT key increment:遞增或遞減浮點數值

incrbyfloat key floatnumber:floatnumber可為正負

redis 127.0.0.1:6379> incrbyfloat age 3.5
“95.5”

2.2.7、APPEND key value:在用於為指定的 key 追加值。

  • 如果 key 已經存在並且是一個字串, APPEND 命令將 value 追加到 key 原來的值的末尾。
  • 如果 key 不存在, APPEND 就簡單地將給定 key 設為 value ,就像執行 SET key value 一樣。

返回值:追加指定值之後, key 中字串的長度。

對不存在的 key 執行 APPEND
redis> EXISTS myphone # 確保 myphone 不存在
(integer) 0
redis> APPEND myphone “nokia” # 對不存在的 key 進行 APPEND ,等同於 SET myphone “nokia”
(integer) 5 # 字元長度
對已存在的字串進行 APPEND
redis> APPEND myphone " - 1110" # 長度從 5 個字元增加到 12 個字元 (integer) 12
redis> GET myphone “nokia - 1110”

2.2.8、GETRANGE key start end:獲取字串中 [start, stop]範圍的值

getrange key start stop:是獲取字串中 [start, stop]範圍的值
注意:對於字串的下標,左數從0開始,右數從-1開始

redis 127.0.0.1:6379> set title 'chinese'
OK
redis 127.0.0.1:6379> getrange title 0 3
"chin"
redis 127.0.0.1:6379> getrange title 1 -2
"hines"

注意:
1: start>=length, 則返回空字串
2: stop>=length,則擷取至字元結尾
3: 如果start 所處位置在stop右邊, 返回空字串

2.2.9、SETRANGE key offset value:把字串的offset偏移位元組,改成value

redis 127.0.0.1:6379> set greet hello
OK
redis 127.0.0.1:6379> setrange greet 2 x
(integer) 5
redis 127.0.0.1:6379> get greet
“hexlo”

注意: 如果偏移量>字元長度, 該字元自動補0x00

redis 127.0.0.1:6379> setrange greet 6 !
(integer) 7
redis 127.0.0.1:6379> get greet
“heyyo\x00!”

2.2.10、STRLEN key:返回鍵值的長度

2.2.12、MGET key [key …]:獲取多個key的值

返回所有(一個或多個)給定 key 的值。 如果給定的 key 裡面,有某個 key 不存在,那麼這個 key 返回特殊值 nil 。

2.2.13、MSET key value [key value …]:一次性設定多個鍵值

2.2.14、BITCOUNT key [start end]:獲取範圍內為1的二進位制位數

2.2.15、GETBIT key offset:用於對 key 所儲存的字串值,獲取指定偏移量上的位(bit)

getbit key offset

redis 127.0.0.1:6379> set char A
OK
redis 127.0.0.1:6379> getbit char 1
(integer) 1
redis 127.0.0.1:6379> getbit char 2
(integer) 0
redis 127.0.0.1:6379> getbit char 7
(integer) 1

2.2.16、SETBIT key offset value :用於對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)

返回值:指定偏移量原來儲存的位。

redis> SETBIT bit 10086 1
(integer) 0
redis> GETBIT bit 10086
(integer) 1
redis> GETBIT bit 100 # bit 預設被初始化為 0
(integer) 0

注意:
1:如果offset過大,則會在中間填充0,
2: offset最大大到多少
3:offset最大2^32-1,可推出最大的的字串為512M

Setbit 的實際應用

場景: 1億個使用者, 每個使用者 登陸/做任意操作 ,記為 今天活躍,否則記為不活躍

每週評出: 有獎活躍使用者: 連續7天活動 每月評,等等…

思路:

Userid dt active
1 2013-07-27 1
1 2013-0726 1

如果是放在表中, 1:表急劇增大,2:要用group ,sum運算,計算較慢

用: 點陣圖法 bit-map
Log0721: ‘011001…0’

log0726 : ‘011001…0’
Log0727 : ‘0110000…1’

1: 記錄使用者登陸: 每天按日期生成一個位圖, 使用者登陸後,把user_id位上的bit值置為1

2: 把1周的點陣圖 and 計算, 位上為1的,即是連續登陸的使用者

redis 127.0.0.1:6379> setbit mon 100000000 0
(integer) 0
redis 127.0.0.1:6379> setbit mon 3 1
(integer) 0
redis 127.0.0.1:6379> setbit mon 5 1
(integer) 0
redis 127.0.0.1:6379> setbit mon 7 1
(integer) 0
redis 127.0.0.1:6379> setbit thur 100000000 0
(integer) 0
redis 127.0.0.1:6379> setbit thur 3 1
(integer) 0
redis 127.0.0.1:6379> setbit thur 5 1
(integer) 0
redis 127.0.0.1:6379> setbit thur 8 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 100000000 0
(integer) 0
redis 127.0.0.1:6379> setbit wen 3 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 4 1
(integer) 0
redis 127.0.0.1:6379> setbit wen 6 1
(integer) 0
redis 127.0.0.1:6379> bitop and res mon feb wen
(integer) 12500001

如上例,優點:
1: 節約空間, 1億人每天的登陸情況,用1億bit,約1200WByte,約10M 的字元就能表示
2: 計算方便

2.2.17、BITOP operation destkey key [key …]:對key1,key2…keyN作operation,並將結果儲存到 destkey 上

bitop operation destkey key1 [key2 …]

對key1,key2…keyN作operation,並將結果儲存到 destkey 上。
operation 可以是 AND 、 OR 、 NOT 、 XOR

redis 127.0.0.1:6379> setbit lower 7 0
(integer) 0
redis> 127.0.0.1:6379> setbit lower 2 1
(integer) 0
redis 127.0.0.1:6379> get lower
" "
redis 127.0.0.1:6379> set char Q
OK
redis 127.0.0.1:6379> get char
“Q”
redis 127.0.0.1:6379> bitop or char char lower
(integer) 1
redis 127.0.0.1:6379> get char
“q”

注意: 對於NOT操作, key不能多個

2.2.18、GETSET key value:獲取並返回舊值,設定新值

redis 127.0.0.1:6379> set cnt 0
OK
redis 127.0.0.1:6379> getset cnt 1
“0”
redis 127.0.0.1:6379> getset cnt 2
“1”

2.2.19、SETEX key seconds value:為指定的 key 設定值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。

返回值:設定成功時返回 OK 。

redis 127.0.0.1:6379> SETEX mykey 60 redis
OK redis 127.0.0.1:6379> TTL mykey
60
redis 127.0.0.1:6379> GET mykey
"redis

2.2.20、SETNX key value:在指定的 key 不存在時,為 key 設定指定的值。

返回值:設定成功,返回 1 。 設定失敗,返回 0 。

redis> EXISTS job # job 不存在
(integer) 0
redis> SETNX job “programmer” # job 設定成功
(integer) 1
redis> SETNX job “code-farmer” # 嘗試覆蓋 job ,失敗
(integer) 0
redis> GET job # 沒有被覆蓋
“programmer”

2.2.21、Msetnx key value [key value …]:用於所有給定 key 都不存在時,同時設定一個或多個 key-value 對。

返回值:當所有 key 都成功設定,返回 1 。 如果所有給定 key 都設定失敗(至少有一個 key 已經存在),那麼返回 0 。

對不存在的 key 進行 MSETNX

redis> MSETNX rmdbs “MySQL” nosql “MongoDB” key-value-store “redis”
(integer) 1
redis> MGET rmdbs nosql key-value-store

  1. “MySQL”
  2. “MongoDB”
  3. “redis”

MSET 的給定 key 當中有已存在的 key

redis> MSETNX rmdbs “Sqlite” language “python” # rmdbs 鍵已經存在,操作失敗
(integer) 0
redis> EXISTS language # 因為 MSET是原子性操作,language 沒有被設定
(integer) 0
redis> GET rmdbs # rmdbs 也沒有被修改
“MySQL”

2.2.22、Psetex key milliseconds value:以毫秒為單位設定 key 的生存時間。

返回值:設定成功時返回 OK 。

redis 127.0.0.1:6379> PSETEX mykey 1000 “Hello”
OK redis 127.0.0.1:6379> PTTL mykey
999
redis 127.0.0.1:6379> GET mykey

  1. “Hello”

2.3、對List型別的操作命令

link 連結串列結構
Redis列表是簡單的字串列表,按照插入順序排序。你可以新增一個元素到列表的頭部(左邊)或者尾部(右邊)
一個列表最多可以包含 個元素 (4294967295, 每個列表超過40億個元素)。

2.3.1、LPUSH/RPUSH key value [value …]:將一個或多個值插入到列表頭/尾部

LPUSH key value [value …]:將一個或多個值插入到列表頭部。 如果 key 不存在,一個空列表會被建立並執行 LPUSH 操作。 當 key 存在但不是列表型別時,返回一個錯誤。
注意:在 Redis 2.4 版本以前的 LPUSH 命令,都只接受單個 value 值。
可用版本:>= 1.0.0
返回值:執行 LPUSH 命令後,列表的長度

192.168.25.111:6379> LPUSH list1 "one"
(integer) 1
192.168.25.111:6379> LPUSH list1 "two"
(integer) 2
192.168.25.111:6379> LRANGE list1 0 -1
1) "two"
2) "one"

RPUSH key value [value …] :同上

2.3.2、LRANGE key start stop:返回連結串列中[start ,stop]中的元素

返回列表中指定區間內的元素,區間以偏移量 START 和 END 指定。 其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。
返回值:一個列表,包含指定區間內的元素。

192.168.25.111:6379> LPUSH list1 "one"
(integer) 1
192.168.25.111:6379> LPUSH list1 "two"
(integer) 2
192.168.25.111:6379> LRANGE list1 0 -1
1) "two"
2) "one"
192.168.25.111:6379> LRANGE list1 -2 0
1) "two"
192.168.25.111:6379> LRANGE list1 -2 1
1) "two"
2) "one"
192.168.25.111:6379> LRANGE list1 -1 1
1) "one"
192.168.25.111:6379> LRANGE list1 -1 100
1) "one"

0 -1:展示所有元素

2.3.3、LINDEX key index:通過索引獲取列表中的元素

你也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

192.168.25.111:6379> LRANGE list1 -2 1
1) "two"
2) "one"
192.168.25.111:6379> LINDEX list1 -2
"two"
192.168.25.111:6379> LINDEX list1 -1
"one"
192.168.25.111:6379> LINDEX list1 -3         #如果指定索引值不在列表的區間範圍內,返回 nil 。
(nil)

返回值:列表中下標為指定索引值的元素。

2.3.4、LPOP/RPOP key:移除並返回列表的第一個/最後一個元素

LPOP key
返回值:返回值為移除的元素。 當列表 key 不存在時,返回 nil 。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> LPOP list1
"three"
192.168.25.111:6379> LRANGE list1 -3 2
1) "two"
2) "one"

2.3.5、LLEN key:計算連結串列的元素個數

返回列表的長度。 如果列表 key 不存在,則 key 被解釋為一個空列表,返回 0 。 如果 key 不是列表型別,返回一個錯誤。
返回值:列表的長度。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> LLEN list1
(integer) 3

2.3.6、LREM key count value:根據引數 count 的值,移除列表中與引數 VALUE 相等的元素

count 的值可以是以下幾種:

  • count > 0 : 從表頭開始向表尾搜尋,移除與 VALUE 相等的元素,數量為 COUNT 。
  • count < 0 : 從表尾開始向表頭搜尋,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值。
  • count = 0 : 移除表中所有與 VALUE 相等的值。

返回值:被移除元素的數量。 列表不存在時返回 0 。

192.168.25.111:6379> LREM list1 2 two
(integer) 1
192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "one"

2.3.7、LTRIM key start stop:只保留指定區間內的元素

對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
返回值:命令執行成功時,返回 ok 。

192.168.25.111:6379> LTRIM list1 0 1
OK
192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"

2.3.8、BLPOP/BRPOP key [key …] timeout:移出並獲取列表的第一個/最後一個元素

移出並獲取列表的第一個/最後一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
返回值:如果列表為空,返回一個 nil 。 否則,返回一個含有兩個元素的列表,第一個元素是被彈出元素所屬的 key ,第二個元素是被彈出元素的值。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> BLPOP list1 100
1) "list1"
2) "three"
192.168.25.111:6379> BLPOP list1 100
1) "list1"
2) "two"
192.168.25.111:6379> BLPOP list1 100
1) "list1"
2) "one"
192.168.25.111:6379> BLPOP list1 100
(nil)
(100.08s)

在以上例項中,操作會被阻塞,如果指定的列表 key list1 存在資料則會返回第一個元素,否則在等待100秒後會返回 nil 。

作用:等待彈出key的尾/頭元素,
Timeout為等待超時時間,如果timeout為0,則一直等待
場景:長輪詢Ajax,線上聊天時,能夠用到

2.3.9、 RPOPLPUSH source destination:移除列表的最後一個元素,並將該元素新增到另一個列表並返回

返回值:被彈出的元素。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> RPOPLPUSH list1 list2
"one"
192.168.25.111:6379> RPOPLPUSH list1 list2
"two"
192.168.25.111:6379> RPOPLPUSH list1 list2
"three"
192.168.25.111:6379> LRANGE list1 -3 2
(empty list or set)
192.168.25.111:6379> LRANGE list2 -3 2
1) "three"
2) "two"
3) "one"

場景: task + bak 雙鏈表完成安全佇列
在這裡插入圖片描述
業務邏輯:
1:Rpoplpush task bak
2:接收返回值,並做業務處理
3:如果成功,rpop bak 清除任務. 如不成功,下次從bak表裡取任務

2.3.10、BRPOPLPUSH source destination timeout

從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。

返回值:假如在指定時間內沒有任何元素被彈出,則返回一個 nil 和等待時長。 反之,返回一個含有兩個元素的列表,第一個元素是被彈出元素的值,第二個元素是等待時長。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> BRPOPLPUSH list1 list2 10
"one"
192.168.25.111:6379> BRPOPLPUSH list1 list2 10
"two"
192.168.25.111:6379> BRPOPLPUSH list1 list2 10
"three"
192.168.25.111:6379> BRPOPLPUSH list1 list2 10
(nil)
(10.03s)

2.3.11、LINSERT key BEFORE|AFTER pivot value:在列表的元素前或者後插入元素

當指定元素不存在於列表中時,不執行任何操作。
當列表不存在時,被視為空列表,不執行任何操作。
如果 key 不是列表型別,返回一個錯誤。
返回值:如果命令執行成功,返回插入操作完成之後,列表的長度。 如果沒有找到指定元素 ,返回 -1 。 如果 key 不存在或為空列表,返回 0 。

192.168.25.111:6379> LRANGE list1 -3 2
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> LINSERT list1 before two "I"
(integer) 4
192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "I"
3) "two"
4) "one"

2.3.12、LPUSHX key value:將一個值插入到已存在的列表頭部,列表不存在時操作無效

返回值:LPUSHX 命令執行之後,列表的長度。

192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> LPUSHX list1 ylx
(integer) 4
192.168.25.111:6379> LRANGE list1 0 -1
1) "ylx"
2) "three"
3) "two"
4) "one"

2.3.13、LSET key index value:通過索引來設定元素的值

當索引引數超出範圍,或對一個空列表進行 LSET 時,返回一個錯誤。
返回值:操作成功返回 ok ,否則返回錯誤資訊。

192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> LSET list1 1 ylx
OK
192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "ylx"
3) "one"

2.3.14、RPUSHX key value:將一個值插入到已存在的列表尾部(最右邊)。如果列表不存在,操作無效。

返回值:執行 Rpushx 操作後,列表的長度。

192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> RPUSHX list1 ylx
(integer) 4
192.168.25.111:6379> LRANGE list1 0 -1
1) "three"
2) "two"
3) "one"
4) "ylx"

2.4、對Set型別的操作命令

集合的性質唯一性無序性、確定性

Redis 中集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是 O(1)。

集合中最大的成員數為(4294967295, 每個集合可儲存40多億個成員)。

2.4.1、SADD key member [member …]:將一個或多個成員元素加入到集合中,已經存在於集合的成員元素將被忽略

  • 假如集合 key 不存在,則建立一個只包含新增的元素作成員的集合。
  • 當集合 key 不是集合型別時,返回一個錯誤。

注意:在Redis2.4版本以前, SADD 只接受單個成員值。

返回值:被新增到集合中的新元素的數量,不包括被忽略的元素。

192.168.25.111:6379> SADD set1 one two three
(integer) 3
192.168.25.111:6379> SMEMBERS set1
1) "three"
2) "two"
3) "one"

2.4.2、SCARD key:返回集合中元素的個數

返回值:集合的數量。 當集合 key 不存在時,返回 0 。

192.168.25.111:6379> SMEMBERS set1
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> SCARD set1
(integer) 3

2.4.3、SDIFF key [key …]:返回給定集合之間的差集,不存在的集合 key 將視為空集

差集的結果來自前面的 FIRST_KEY ,而不是後面的 OTHER_KEY1,也不是整個 FIRST_KEY OTHER_KEY1…OTHER_KEYN 的差集。

返回值:包含差整合員的列表。

192.168.25.111:6379> SMEMBERS set1
1) "three"
2) "two"
3) "one"
192.168.25.111:6379> SMEMBERS set2
1) "three"
2) "five"
3) "four"
192.168.25.111:6379> SDIFF set1 set2
1) "two"
2) "one"

2.4.4、SDIFFSTORE destination key [key …]:將給定集合之間的差集儲存在指定的集合中。如果指定的集合 key 已存在,則會被覆蓋

返回值:結果集中的元素數量。

192.168.25.111:6379> SDIFFSTORE set3 set1 set2
(integer) 2
192.168.25.111:6379> SMEMBERS set3
1) "two"
2) "one"

2.4.5、SINTER key [key …]:返回給定所有給定集合的交集

不存在的集合 key 被視為空集。 當給定集合當中有一個空集時,結果也為空集(根據集合運算定律)。

返回值:交整合員的列表。

192.168.25.111:6379> SINTER set1 set2
1) "three"

2.4.6、SINTERSTORE destination key [key …]:將給定集合之間的交集儲存在指定的集合中

如果指定的集合已經存在,則將其覆蓋。

返回值:返回儲存交集的集合的元素數量。

192.168.25.111:6379> SINTERSTORE set4 set1 set2
(integer) 1
192.168.25.111:6379> SMEMBERS set4
1) "three"

2.4.7、SISMEMBER key member:判斷value是否在key集合中

返回值:如果成員元素是集合的成員,返回 1 。 如果成員元素不是集合的成員,或 key 不存在,返回 0 。

192.168.25.111:6379> SISMEMBER set1 one
(integer) 1
192.168.25.111:6379> SISMEMBER set1 one1
(integer) 0

2.4.8、SMEMBERS key:返回集合中的所有的成員

不存在的集合 key 被視為空集合。

返回值:集合中的所有成員。

192.168.25.111:6379> SMEMBERS set1
1) "three"
2) "two"
3) "one"

2.4.9、SMOVE source destination member:把source中的value刪除,並新增到dest集合中

將指定成員 member 元素從 source 集合移動到 destination 集合。

  • SMOVE 是原子性操作。
  • 如果 source 集合不存在或不包含指定的 member 元素,則 SMOVE 命令不執行任何操作,僅返回 0 。否則, member 元素從 source 集合中被移除,並新增到 destination 集合中去。
  • 當 destination 集合已經包含 member 元素時, SMOVE 命令只是簡單地將 source 集合中的 member 元素刪除。
  • 當 source 或 destination 不是集合型別時,返回一個錯誤。

返回值:如果成員元素被成功移除,返回 1 。 如果成員元素不是 source 集合的成員,並且沒有任何操作對 destination 集合執行,那麼返回 0 。

192.168.25.111:6379> SMOVE set1 set2 one
(integer) 1
192.168.25.111:6379> SMEMBERS set2
1) "three"
2) "five"
3) "four"
4) "one"

2.4.10、SPOP key [count]:移除集合中的指定 key 的一個或多個隨機元素

隨機–體現了無序性
移除後會返回移除的元素。

該命令類似 Srandmember 命令,但 SPOP 將隨機元素從集合中移除並返回,而 Srandmember 則僅僅返回隨機元素,而不對集合進行任何改動。

返回值:被移除的隨機元素。 當集合不存在或是空集時,返回 nil 。

2.4.11、SRANDMEMBER key [count]:返回集合key中,隨機的1個元素

從 Redis 2.6 版本開始, Srandmember 命令接受可選的 count 引數:

  • 如果 count 為正數,且小於集合基數,那麼命令返回一個包含 count 個元素的陣列,陣列中的元素各不相同。
  • 如果 count 大於等於集合基數,那麼返回整個集合。
  • 如果 count 為負數,那麼命令返回一個數組,陣列中的元素可能會重複出現多次,而陣列的長度為 count 的絕對值。

該操作和 SPOP 相似,但 SPOP 將隨機元素從集合中移除並返回,而 Srandmember 則僅僅返回隨機元素,而不對集合進行任何改動。

返回值:只提供集合 key 引數時,返回一個元素;如果集合為空,返回 nil 。 如果提供了 count 引數,那麼返回一個數組;如果集合為空,返回空陣列。

2.4.12、SREM key member [member …]:移除集合中的一個或多個成員元素,不存在的成員元素會被忽略

當 key 不是集合型別,返回一個錯誤。

在 Redis 2.4 版本以前, SREM 只接受單個成員值。

返回值:被成功移除的元素的數量,不包括被忽略的元素。

192.168.25.111:6379> SREM set1 one
(integer) 1
192.168.25.111:6379> SMEMBERS set1
1) "three"
2) "two"

2.4.13、SUNION key [key …]:返回給定集合的並集,不存在的集合 key 被視為空集

返回值:並整合員的列表。

2.4.14、SUNIONSTORE destination key [key …]:將給定集合的並集儲存在指定的集合 destination 中。如果 destination 已經存在,則將其覆蓋。

返回值:結果集中的元素數量。

2.4.15、SSCAN key cursor [MATCH pattern] [COUNT count]:用於迭代集合中鍵的元素

返回值:陣列列表。

192.168.25.111:6379> SSCAN set1 0 match *o*
1) "0"
2) 1) "two"
   2) "one"

2.5、對Hash型別的操作命令

Redis hash 是一個string型別的field和value的對映表,hash特別適合用於儲存物件。

2.5.1、HDEL key field [field …]:用於刪除雜湊表 key 中的一個或多個指定欄位,不存在的欄位將被忽略

返回值:被成功刪除欄位的數量,不包括被忽略的欄位。

192.168.25.111:6379> HSET hash1 field1 one
(integer) 1
192.168.25.111:6379> HDEL hash1 field1
(integer) 1
192.168.25.111:6379> HDEL hash1 field1
(integer) 0
192.168.25.111:6379> HGETALL hash1
(empty list or set)

2.5.2、HEXISTS key field:檢視雜湊表的指定欄位是否存在

返回值:如果雜湊表含有給定欄位,返回 1 。 如果雜湊表不含有給定欄位,或 key 不存在,返回 0 。

192.168.25.111:6379> HEXISTS hash1 field1
(integer) 0
192.168.25.111:6379> HSET hash1 field1 one
(integer) 1
192.168.25.111:6379> HEXISTS hash1 field1
(integer) 1

2.5.3、HGET key field:返回雜湊表中指定欄位的值

返回值:返回給定欄位的值。如果給定的欄位或 key 不存在時,返回 nil 。

192.168.25.111:6379> HGET hash1 field1
"one"

2.5.4、HGETALL key:用於返回雜湊表中,所有的欄位和值

在返回值裡,緊跟每個欄位名(field name)之後是欄位的值(value),所以返回值的長度是雜湊表大小的兩倍。
返回值:以列表形式返回雜湊表的欄位及欄位值。 若 key 不存在,返回空列表。

192.168.25.111:6379> HGETALL hash1
1) "field1"          # 欄位名
2) "one"             # 欄位的值(value)

2.5.5、HINCRBY key field increment:用於為雜湊表中的欄位值加上指定增量值

  • 增量也可以為負數,相當於對指定欄位進行減法操作。
  • 如果雜湊表的 key 不存在,一個新的雜湊表被建立並執行 HINCRBY 命令。
  • 如果指定的欄位不存在,那麼在執行命令前,欄位的值被初始化為 0 。
  • 對一個儲存字串值的欄位執行 HINCRBY 命令將造成一個錯誤。
    本操作的值被限制在 64 位(bit)有符號數字表示之內。

返回值:執行 HINCRBY 命令之後,雜湊表中欄位的值。

192.168.25.111:6379> HSET hash1 field1 10
(integer) 0
192.168.25.111:6379> HGET hash1 field1
"10"
192.168.25.111:6379> HINCRBY hash1 field1 2
(integer) 12

2.5.6、HINCRBYFLOAT key field increment:用於為雜湊表中的欄位值加上指定浮點數增量值

如果指定的欄位不存在,那麼在執行命令前,欄位的值被初始化為 0 。

返回值:執行 Hincrbyfloat 命令之後,雜湊表中欄位的值。

192.168.25.111:6379> HGET hash1 field1
"2.1"
192.168.25.111:6379> HINCRBYFLOAT hash1 field1 0.1
"2.2"

2.5.7、HKEYS key:用於獲取雜湊表中的所有域(field)

返回值:包含雜湊表中所有域(field)列表。 當 key 不存在時,返回一個空列表。

192.168.25.111:6379> HKEYS hash1
1) "field1"

2.5.8、HMGET key field [field …]:用於返回雜湊表中,一個或多個給定欄位的值

如果指定的欄位不存在於雜湊表,那麼返回一個 nil 值。

返回值:一個包含多個給定欄位關聯值的表,表值的排列順序和指定欄位的請求順序一樣。

192.168.25.111:6379> HMGET hash1 field1
1) "2.3"

2.5.9、HMSET key field value [field value …]:用於同時將多個 field-value (欄位-值)對設定到雜湊表中

此命令會覆蓋雜湊表中已存在的欄位。

如果雜湊表不存在,會建立一個空雜湊表,並執行 HMSET 操作。

返回值:如果命令執行成功,返回 OK 。

192.168.25.111:6379> HMSET hash1 field1 2.2
OK
192.168.25.111:6379> HMGET hash1 field1
1) "2.2"

2.5.10、HLEN key:用於獲取雜湊表中欄位的數量

返回值:雜湊表中欄位的數量。 當 key 不存在時,返回 0 。

192.168.25.111:6379> HLEN hash1
(integer) 1

2.5.11、HSET key field value:用於為雜湊表中的欄位賦值

  • 如果雜湊表不存在,一個新的雜湊表被建立並進行 HSET 操作。
  • 如果欄位已經存在於雜湊表中,舊值將被覆蓋。

返回值:如果欄位是雜湊表中的一個新建欄位,並且值設定成功,返回 1 。 如果雜湊表中域欄位已經存在且舊值已被新值覆蓋,返回 0 。

192.168.25.111:6379> HSET hash1 field1 2.7
(integer) 0
192.168.25.111:6379> HGET hash1 field1
"2.7"

2.5.12、HSETNX key field value:用於為雜湊表中不存在的的欄位賦值

  • 如果雜湊表不存在,一個新的雜湊表被建立並進行 HSET 操作。
  • 如果欄位已經存在於雜湊表中,操作無效。
  • 如果 key 不存在,一個新雜湊表被建立並執行 HSETNX 命令。

返回值:設定成功,返回 1 。 如果給定欄位已經存在且沒有操作被執行,返回 0 。

192.168.25.111:6379> HSETNX hash1 field2 33
(integer) 1
192.168.25.111:6379> HGET hash1 field2
"33"

2.5.13、HVALS key:返回雜湊表所有域(field)的值

返回值:一個包含雜湊表中所有域(field)值的列表。 當 key 不存在時,返回一個空表。

192.168.25.111:6379> HVALS hash1
1) "2.7"
2) "33"

2.5.14、HSCAN key cursor [MATCH pattern] [COUNT count]:迭代雜湊表中的鍵值對

2.6、對ZSet型別的操作命令

Redis 有序集合和集合一樣也是string型別元素的集合,且不允許重複的成員。

不同的是每個元素都會關聯一個double型別的分數。redis正是通過分數來為集合中的成員進行從小到大的排序。

有序集合的成員是唯一的,但分數(score)卻可以重複。

集合是通過雜湊表實現的,所以新增,刪除,查詢的複雜度都是O(1)。

相關推薦

1.2 Redis命令

1.2 Redis的命令 1、redis的五種資料型別 1.1、redis的key 1.2、redis的value支援五種資料型別 2、redis的命令 2.1、對Keys的操作命令 2.1.1、

1.2-Linux命令幫助的獲取詳解

命令 linux 幫助 外部命令:都有一個可執行程序,位於文件系統某目錄下: which,whereis shell程序搜尋可執行程序文件的路徑定義在PATH環境變量中: # echo $PATH 註意:自左至右內部命令:#help COMMAND外部命令:

1.2 redis

day07筆記 Linux 推薦的歌: 浪子回頭 去年回顧 mariadb 1.yum安裝 yum install mariadb-server mariadb -y 2.yum安裝好之後,啟動服務端,只有通過yum安裝的軟體才可以用systemctl systemctl start mariadb 3

7.2 redis命令

redis命令:redis-cli 進入Redis環境Help @string 獲取所有string型別幫助Help @list 獲取所有list型別幫助set 123 456 定義一個key=123,value=456的值get 123

4.1 df命令 4.2 du命令 4.3/4.4 磁盤分區

4.1 df命令 4.2 du命令 4.3/4.4 磁盤分區4.1 df命令4.2 du命令4.3/4.4 磁盤分區擴展學習 parted分區gpt格式 http://www.apelearn.com/bbs/thread-7243-1-1.html4.1 df命令df -h查看swapdf -i 查看系統使

0.1 使用w查看系統負載 - 10.2 vmstat命令 - 10.3 top命令 - 10.4 sar命令 - 10.5 nload命令

使用 查看 系統負載 - 10.1 使用w查看系統負載 - 10.2 vmstat命令 - 10.3 top命令 - 10.4 sar命令 - 10.5 nload命令 # 10.1 使用w查看系統負載 ![mark](http://oqxf7c508.bkt.clouddn.com/blo

4.1 df命令;4.2 du命令;4.3——4.4 磁盤分區

磁盤分區4.1 df命令1.1 查看磁盤分區命令:df[root@hao-01 ~]# df磁盤分區空間有空余,無法在寫入,原因:inode空間占滿了!第一列——文件系統:分區名稱第二列——1K-塊:這塊分區的總大小第三列——已用:已經使用了多少第四列——可用:還剩下多少第五列——已用%:可用的百分比第六列—

三周第四次課 4.1 df命令 4.2 du命令 4.3/4.4 磁盤分區

df du 磁盤分區 4.1 df命令1、df命令查看磁盤情況命令查看inodes4.2 du命令1、du命令du命令查看目錄的大小4.3/4.4 磁盤分區磁盤分區使用fdisk 命令進行查看重啟後能識別出硬盤三周第四次課 4.1 df命令 4.2 du命令 4.3/4.4 磁盤分區

10.1 使用w查看系統負載 10.2 vmstat命令 10.3 top命令 10.4 sar命令

分享圖片 mark tle bold 被攻擊 margin src 攻擊 top 10.1-使用w查看系統負載10.2 vmstat命令1、vmstat命令Vmstat 1 表示每1秒,顯示一次Vmstat 1 5 表示每1秒顯示,共顯示5次10.3 top命令92個進程,

10.1 使用w查看系統負載 10.2 vmstat命令 10.3 top命令 10.4 sar命令 10.5 nload命令

僵屍進程 line 一行 uptime rtp ica blog lis png [root@lizhipeng01 ~]# w 17:43:46 up 6 min, 1 user, load average: 0.00, 0.04, 0.05 負載,1

2.1/2.2 系統目錄結構 2.3 ls命令 2.4 文件類型 2.5 alias命令

筆記筆記筆記2.1/2.2 系統目錄結構2.3 ls命令2.4 文件類型2.5 alias命令 筆記: 系統目錄結構 ls /bin 存放的是用戶可以使用的命令(圖表還有很多) ls / sbin 存放的是管理員命令(管理員才能使用的命令) ls /boot 存放的是系統啟動文件

三周第四次課 4.1 df命令 4.2 du命令 4.3/4.4 磁盤分區 擴展學習 part

學習 打卡三周第四次課4.1 df命令4.2 du命令4.3/4.4 磁盤分區擴展學習 parted分區gpt格式 http://www.apelearn.com/bbs/thread-7243-1-1.html # df 查看文件系統的使用情況 # free 查看swap分區 #

2.redis-help使用,基本命令

nds append 幫助 end AR color div str redis redis 幫助 127.0.0.1:6379> help redis-cli 3.0.4 Type: "help @<group>" to get a list of c

1.2.2 標準命令概述

mes 目錄 不同 uil 其中 install 執行 man god Go語言中包含了大量用於處理Go語言代碼的命令和工具。其中,go命令就是最常用的一個,它有許多子命令。這些子命令都擁有不同的功能,如下所示。 l build:用於編譯給定的代碼包或Go語言源碼文件及其依

1.2.1bat腳本命令 DIR 顯示磁盤目錄與重定向符號 通配符

attribute -- cto -c 大小 訪問 日期 file 產生 文員、網管必會技能:Windows命令行bat/cmd批處理腳本的編寫應用之文件管理應用2.1.2.1bat腳本命令 DIR 顯示磁盤目錄與重定向符號 通配符課程地址:http://edu.51cto

2.1.2基礎之命令行壓縮工具7z zip壓縮文件

size color 命令 col .exe %d 開始 name 當前 Windows命令行batcmd腳本的應用之自動備份 異地備份2.1.2基礎之命令行壓縮工具7z zip壓縮文件 課程地址:http://edu.51cto.com/course/15056.html

Win10下Celery4.2.1基於redis的部署與錯誤

Celery是一個分散式非同步任務的神器,由Python開發但是其通訊協議可以支援其它語言。它還可以設定定時任務,設定多個任務佇列並路由任務到指定的佇列;同時還提供了執行時的一些監控和管理介面。 安裝 安裝python3.7(官網下載直接安裝) 安裝celery庫(pip ins

Redis2)-----初識Redis-----基礎redis命令

hash型別(雜湊map)HMSET mymap1 name "qingruihappy" description "suning" age "20" sex "man" sex "man" sex "man" sex "man"HMSET mymap2 name "qingruihappy" descrip

Atitit 微信小程式的部署流程文件 目錄 1.1. 設定https 參照 Atitit tomcat linux 常用命令 1 1.2. 增加證書 騰訊雲和阿里雲都可申請免費證書,但要一天

Atitit 微信小程式的部署流程文件   目錄 1.1. 設定https  參照 Atitit tomcat linux 常用命令 1 1.2. 增加證書   騰訊雲和阿里雲都可申請免費證書,但要一天稽核  可以淘寶購買證書快速寫

Atitit redis使用場合總結 使用場景 目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2. 1、查詢最

Atitit redis使用場合總結 使用場景          目錄 1.1. 3. Session 儲存 1 1、 配置資料查詢 1 2. 排行榜應用,取TOP N操作 1 1.2.     1