一、Redis支持五種數據類型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。
(1) string類型是Redis最基本的數據類型,一個鍵最大能存儲512MB。可以包含任何數據。比如jpg圖片或者序列化的對象 。
操作命令 :Redis 的 SET 和 GET 命令
127.0.0.1:6379> set str a OK 127.0.0.1:6379> get str a (error) ERR wrong number of arguments for 'get' command 127.0.0.1:6379> get str a (error) ERR wrong number of arguments for 'get' command 127.0.0.1:6379> get str "a"
127.0.0.1:6379> set str b OK 127.0.0.1:6379> get str "b"
(2) Redis hash 是一個鍵值對集合,一個string類型的field和value的映射表,hash特別適合用於存儲對象,每個 hash 可以存儲 2的32次方 - 1 鍵值對(40多億)。
操作命令: Redis HMSET, HEGTALL 命令。(key:user:2 value:偶數個值)
127.0.0.1:6379> hmset user:2 a b c dd f d g (error) ERR wrong number of arguments for HMSET 127.0.0.1:6379> hmset user:2 a b c dd f d g 200 OK 127.0.0.1:6379> hgetall user:2
1) "a"
2) "b"
3) "c"
4) "dd"
5) "f"
6) "d"
7) "g"
8) "200"
127.0.0.1:6379> hmset user:2 a b c dd f d g 201 OK 127.0.0.1:6379> hmset user:2 a b c dd f d g (error) ERR wrong number of arguments for HMSET 127.0.0.1:6379> hmset user:2 a b c dd f d g (error) ERR wrong number of arguments for HMSET 127.0.0.1:6379> hmset user:2 a b c dd f d g e OK 127.0.0.1:6379> hmset user:2 a b c dd f d OK
(3)Redis list列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)。
操作命令: Redis lpush, lrange命令。
127.0.0.1:6379> lpush list a (integer) 1
127.0.0.1:6379> lpush list b (integer) 2
127.0.0.1:6379> lpush list c (integer) 3
127.0.0.1:6379> lrang list 0 3 (error) ERR unknown command 'lrang'
127.0.0.1:6379> lrange list 0 3
1) "c"
2) "b"
3) "a"
(4)Redis的Set是string類型的無序集合,且元素有唯一性,通過哈希表實現的,所以添加,刪除,查找的復雜度都是O(1)。每個集合可存儲 232 - 1個成員)
操作命令: Redis sadd, smembers命令。(成功:1 失敗:提示錯誤 重復:0)
127.0.0.1:6379> sadd set a (integer) 1
127.0.0.1:6379> sadd set b (integer) 1
127.0.0.1:6379> sadd set a (integer) 0
127.0.0.1:6379> sadd set c (integer) 1
127.0.0.1:6379> smember set (error) ERR unknown command 'smember'
127.0.0.1:6379> smembers set
1) "c"
2) "a"
3) "b"
(5)Redis zset(有序集合) 是string類型元素的集合,且不允許重復的成員,每個元素都會關聯一個double類型的數值,redis正是通過這個數值來為集合中的成員進行從小到大的排序,排序值可以重復。
操作命令: Redis zadd, srangbyscore 命令。
127.0.0.1:6379> zadd zset a (error) ERR wrong number of arguments for 'zadd' command 127.0.0.1:6379> zadd zset 0 a (integer) 1
127.0.0.1:6379> zadd zset 1 a (integer) 0
127.0.0.1:6379> zadd zset 1 b (integer) 1
127.0.0.1:6379> zadd zset 2 c (integer) 1
127.0.0.1:6379> zadd zset 4 d (integer) 1
127.0.0.1:6379> zadd zset 3 f (integer) 1
127.0.0.1:6379> zrangebyscore zset (error) ERR wrong number of arguments for 'zrangebyscore' command 127.0.0.1:6379> zrangebyscore zset 0 4
1) "a"
2) "b"
3) "c"
4) "f"
(6)執行 PING 命令,該命令用於檢測 redis 服務是否啟動。
(7)Redis DEL 命令用於刪除已存在的鍵,不存在的 key 會被忽略。
語法:DEL KEY_NAME
(8)Redis DUMP 命令用於序列化給定 key ,並返回被序列化的值。
語法:DUMP KEY_NAME
(9)Redis EXISTS 命令用於檢查給定 key 是否存在,若 key 存在返回 1 ,否則返回 0。
語法:EXISTS KEY_NAME
(10)Redis Expire 命令用於設置 key 的過期時間。key 過期后將不再可用,會自動刪除該key值。(秒為單位)。
語法:Expire KEY_NAME TIME_IN_SECONDS
(11)Redis Expireat 命令用於以 UNIX 時間戳(unix timestamp)格式設置 key 的過期時間,key 過期后將不再可用。
語法:Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
(12)Redis PEXPIREAT 命令用於設置 key 的過期時間,已毫秒技,key 過期后將不再可用。
語法:PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
(13)Redis Keys 命令用於查找所有符合給定模式 pattern 的 key 。
語法:KEYS PATTERN
(14)Redis MOVE 命令用於將當前數據庫的 key 移動到給定的數據庫 db 當中。
語法:MOVE KEY_NAME DESTINATION_DATABASE
(15)Redis PERSIST 命令用於移除給定 key 的過期時間,使得 key 永不過期。
語法:PERSIST KEY_NAME
(16)Redis Pttl 命令以毫秒為單位返回 key 的剩余過期時間。
語法:PTTL KEY_NAME
(17)Redis TTL 命令以秒為單位返回 key 的剩余過期時間。
語法:TTL KEY_NAME
(18)Redis RANDOMKEY 命令從當前數據庫中隨機返回一個 key 。
語法:RANDOMKEY
(19)Redis Rename 命令用於修改 key 的名稱 。
語法:RENAME OLD_KEY_NAME NEW_KEY_NAME
(20)Redis Renamenx 命令用於在新的 key 不存在時修改 key 的名稱 。
語法:RENAMENX OLD_KEY_NAME NEW_KEY_NAME
(21)Redis Type 命令用於返回 key 所儲存的值的類型。
語法:TYPE KEY_NAME
字符串常用命令
(1)Redis SET 命令用於設置給定 key 的值。如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。
語法:SET KEY_NAME VALUE
(2)Redis Get 命令用於獲取指定 key 的值。如果 key 不存在,返回 nil 。如果key 儲存的值不是字符串類型,返回一個錯誤。
語法:GET KEY_NAME
(3)Redis Getrange 命令用於獲取存儲在指定 key 中字符串的子字符串。字符串的截取范圍由 start 和 end 兩個偏移量決定(包括 start 和 end 在內)。
語法:GETRANGE KEY_NAME start end
(4)Redis Getset 命令用於設置指定 key 的值,並返回 key 舊的值。
語法:GETSET KEY_NAME VALUE
(5)Redis Getbit 命令用於對 key 所儲存的字符串值,獲取指定偏移量上的位(bit)。
語法:GETBIT KEY_NAME OFFSET
(6)Redis Mget 命令返回所有(一個或多個)給定 key 的值。 如果給定的 key 里面,有某個 key 不存在,那么這個 key 返回特殊值 nil 。
語法:MGET KEY1 KEY2 .. KEYN
(7)Redis Setbit 命令用於對 key 所儲存的字符串值,設置或清除指定偏移量上的位(bit)。
語法:Setbit KEY_NAME OFFSET
(8)Redis Setex 命令為指定的 key 設置值及其過期時間。如果 key 已經存在, SETEX 命令將會替換舊的值。
語法:SETEX KEY_NAME TIMEOUT VALUE
(9)Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在時,為 key 設置指定的值。
語法:SETNX KEY_NAME VALUE
(10)Redis Setrange 命令用指定的字符串覆蓋給定 key 所儲存的字符串值,覆蓋的位置從偏移量 offset 開始。
語法:SETRANGE KEY_NAME OFFSET VALUE
(11)Redis Strlen 命令用於獲取指定 key 所儲存的字符串值的長度。當 key 儲存的不是字符串值時,返回一個錯誤。
語法:STRLEN KEY_NAME
(12)Redis Mset 命令用於同時設置一個或多個 key-value 對。
語法:MSET key1 value1 key2 value2 .. keyN valueN
(13)Redis Msetnx 命令用於所有給定 key 都不存在時,同時設置一個或多個 key-value 對。
語法:MSETNX key1 value1 key2 value2 .. keyN valueN
(14)Redis Psetex 命令以毫秒為單位設置 key 的生存時間。
語法:PSETEX key1 EXPIRY_IN_MILLISECONDS value1
(15)Redis Incr 命令將 key 中儲存的數字值增一。如果 key 不存在,那么 key 的值會先被初始化為 0 ,然后再執行 INCR 操作。
語法:INCR KEY_NAME
(16)Redis Incrby 命令將 key 中儲存的數字加上指定的增量值。
語法:INCRBY KEY_NAME INCR_AMOUNT
(17)Redis Incrbyfloat 命令為 key 中所儲存的值加上指定的浮點數增量值。
語法:INCRBYFLOAT KEY_NAME INCR_AMOUNT
(18)Redis Decr 命令將 key 中儲存的數字值減一。
語法:DECR KEY_NAME
(19)Redis Decrby 命令將 key 所儲存的值減去指定的減量值。本操作的值限制在 64 位(bit)有符號數字表示之內。
語法:DECRBY KEY_NAME DECREMENT_AMOUNT
(20)Redis Append 命令用於為指定的 key 追加值。
語法:APPEND KEY_NAME NEW_VALUE
哈希(Hash)常用命令
(1)Redis Hdel 命令用於刪除哈希表 key 中的一個或多個指定字段,不存在的字段將被忽略。
語法:HDEL KEY_NAME FIELD1.. FIELDN
(2)Redis Hexists 命令用於查看哈希表的指定字段是否存在。
語法:HEXISTS KEY_NAME FIELD_NAME
(3)Redis Hget 命令用於返回哈希表中指定字段的值。
語法:HGET KEY_NAME FIELD_NAME
(4)Redis Hgetall 命令用於返回哈希表中,所有的字段和值。
語法:HGETALL KEY_NAME
(5)Redis Hincrby 命令用於為哈希表中的字段值加上指定增量值。增量也可以為負數,相當於對指定字段進行減法操作。
語法:HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER
(6)Redis Hincrbyfloat 命令用於為哈希表中的字段值加上指定浮點數增量值。如果指定的字段不存在,那么在執行命令前,字段的值被初始化為 0 。
語法:HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER
(7)Redis Hkeys 命令用於獲取哈希表中的所有字段名。
語法:HKEYS KEY_NAME
(8)Redis Hlen 命令用於獲取哈希表中字段的數量。
語法:HLEN KEY_NAME
(9)Redis Hmget 命令用於返回哈希表中,一個或多個給定字段的值。
語法:HMGET KEY_NAME FIELD1...FIELDN
(10)Redis Hmset 命令用於同時將多個 field-value (字段-值)對設置到哈希表中。此命令會覆蓋哈希表中已存在的字段。
語法:HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN
(11)Redis Hset 命令用於為哈希表中的字段賦值 。
語法:HSET KEY_NAME FIELD VALUE
(12)Redis Hsetnx 命令用於為哈希表中不存在的的字段賦值 。
語法:HSETNX KEY_NAME FIELD VALUE
(13)Redis Hvals 命令返回哈希表所有字段的值。
語法:HVALS KEY_NAME
列表(List)常用命令
(1)Redis Blpop 命令移出並獲取列表的第一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
語法:BLPOP LIST1 LIST2 .. LISTN TIMEOUT
(2)Redis Brpop 命令移出並獲取列表的最后一個元素, 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
語法:BRPOP LIST1 LIST2 .. LISTN TIMEOUT
(3)Redis Brpoplpush 命令從列表中彈出一個值,將彈出的元素插入到另外一個列表中並返回它; 如果列表沒有元素會阻塞列表直到等待超時或發現可彈出元素為止。
語法:BRPOPLPUSH LIST1 ANOTHER_LIST TIMEOUT
(4)Redis Lindex 命令用於通過索引獲取列表中的元素。你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。
語法:LINDEX KEY_NAME INDEX_POSITION
(5)Redis Linsert 命令用於在列表的元素前或者后插入元素。 當指定元素不存在於列表中時,不執行任何操作。 當列表不存在時,被視為空列表,不執行任何操作。 如果 key 不是列表類型,返回一個錯誤。
語法:LINSERT KEY_NAME BEFORE EXISTING_VALUE NEW_VALUE
(6)Redis Llen 命令用於返回列表的長度。 如果列表 key 不存在,則 key 被解釋為一個空列表,返回 0 。 如果 key 不是列表類型,返回一個錯誤。
語法:LLEN KEY_NAME
(7)Redis Lpop 命令用於移除並返回列表的第一個元素。
語法:Lpop KEY_NAME
(8)Redis Lpush 命令將一個或多個值插入到列表頭部。列表不存在時建立空列表。
語法:LPUSH KEY_NAME VALUE1.. VALUEN
(9)Redis Lpushx 將一個或多個值插入到已存在的列表頭部,列表不存在時操作無效。
語法:LPUSHX KEY_NAME VALUE1.. VALUEN
(10)Redis Lrange 返回列表中指定區間內的元素,區間以偏移量 START 和 END 指定。
語法:LRANGE KEY_NAME START END
(11)Redis Lrem 根據參數 COUNT 的值,移除列表中與參數 VALUE 相等的元素。
count > 0 : 從表頭開始向表尾搜索,移除與 VALUE 相等的元素,數量為 COUNT.
count < 0 : 從表尾開始向表頭搜索,移除與 VALUE 相等的元素,數量為 COUNT 的絕對值
count = 0 : 移除表中所有與 VALUE 相等的值
語法:LREM KEY_NAME COUNT VALUE
(12)Redis Lset 通過索引來設置元素的值。
語法:LSET KEY_NAME INDEX VALUE
(13)Redis Ltrim 對一個列表進行修剪(trim),就是說,讓列表只保留指定區間內的元素,不在指定區間之內的元素都將被刪除。
語法:LTRIM KEY_NAME START STOP (STOP 可以為負數,倒數)
(14)Redis Rpop 命令用於移除並返回列表的最后一個元素。
語法:RPOP KEY_NAME
(15)Redis Rpoplpush 命令用於移除列表的最后一個元素,並將該元素添加到另一個列表並返回。
語法:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME
(16)Redis Rpush 命令用於將一個或多個值插入到列表的尾部(最右邊)。如果列表不存在,創建空列表、
語法:RPUSH KEY_NAME VALUE1..VALUEN
(17)Redis Rpushx 命令用於將一個或多個值插入到已存在的列表尾部(最右邊)。如果列表不存在,操作無效
語法:RPUSHX KEY_NAME VALUE1..VALUEN
其他命令請參考 https://redis.io/commands