Redis 的 5 種資料型別的基本使用
阿新 • • 發佈:2020-06-19
## Redis 中的 5 種資料型別
Redis 中 有 5 種資料結構,分別是 “字串/string”,“列表/list”,“集合/set”,“有序集合/zset”,“字典(雜湊表)/hash”。
本來我想在這裡詳細的介紹一下,後來發現網上其實已經有了很多的介紹,並且的話,官方也有一些比較詳細的說明,那麼我也就沒有必要再廢話一遍了。
[Redis命令參考](http://redisdoc.com/index.html) 這個連結介紹的比較詳細。我在這裡將該連結內容進行一個小小的彙總。
## 1. string
### 1.1 建立系列
建立函式裡面有主要記住 set。 想要 判斷是否存在就用 setnx 或者 msetnx 想要設定時間就是 setex, psetex。 想要批量設定就是 mset
'increment' 和 'decrement' 表示具體值. 'ex' or 'seconds' 是 秒 'px' or 'milliseconds' 是毫秒. 'start' 和 'end' 在一起表示範圍。 'offset' 就是偏移。
'[]' 裡面就是可有可無。'...' 就是可以有很多個。 '|' 就是多個挑一個,不能用其他的。
* **set**: `SET key value [EX seconds] [PX milliseconds] [NX|XX]`
* **setnx**: `SETNX key value`
* **setex**: `SETEX key seconds value`
* **psetex**: `PSETEX key milliseconds value`
* **mset**: `MSET key value [key value …]`
* **msetnx**: `MSETNX key value [key value …]`
### 1.2 查詢系列
一個字串有啥好查詢的,無非就是 長度 和 值。 值就是包括全部,或者是其中的一部分字串。 所以這裡就有 查值 查長度 查指定區間值。 為了減少多次 服務請求 就用 mget。
* **get**: `GET key`
* **strlen**: `STRLEN key`
* **getrange**: `GETRANGE key start end`
* **mget**: `MGET key [key …]`
### 1.3 修改系列
修改就是, 新增到末尾, 或者修改指定位置的值。
* **append**: `APPEND key value`
* **setrange**: `SETRANGE key offset value`
### 1.4 數值有關:
數值還有啥好說的, +1, -1, +n, -n, +float 記住 'incr' 是 + , 'decr' 是 -。 如果是指定值 就在後面補上 'by', 浮點數的話,再加一個 'float'
* **incr**: `INCR key`
* **decr**: `DECR key`
* **incrby**: `INCRBY key increment`
* **decrby**: `DECRBY key decrement`
* **incrbyfloat**: `INCRBYFLOAT key increment`
## 2. hash
函式前面 用 'h' 來做字首, 多欄位以及批量用 'm' 來區分。 'vals' 表示值, 'keys' 表示鍵, 'getall' 就表示都有。 'exists' 判斷是否存在, 'scan' 就是掃描。看字典長度用 'len', 字典裡面欄位長度用 'strlen'.
字典名稱用 'key', 欄位名稱 用 'field', 欄位值用 'value', 'cursor' 是遊標,'MATCH pattern' 是查詢條件,'COUNT count' 是數量。
### 2.1 建立有關
雜湊表嘛,也就是字典。 裡面包含了多個欄位。 建立的時候,就分為兩種,單個欄位的,和多個欄位的。設定一個欄位 hset, 多個欄位 hmset。 為單個欄位設定過期時間 hsetnx。
* **hset**: `HSET key field value`
* **hsetnx**: `HSETNX key field value`
* **hmset**: `HMSET key field value [field value …]`
### 2.2 查詢有關
查詢值,判斷是不是存在,看看字典長度,看看欄位長度,批量查詢。 看看全部的值,看看全部的欄位,看看全部欄位的值。掃描一下。
* **hget**: `HGET key field`
* **hexists**: `HEXISTS key field`
* **hlen**: `HLEN key`
* **hstrlen**: `HSTRLEN key field`
* **hmget**: `HMGET key field [field …]`
* **hvals**: `HVALS key`
* **hkeys**: `HKEYS key`
* **hgetall**: `HGETALL key`
* **hscan**: `HSCAN key cursor [MATCH pattern] [COUNT count]`
### 2.3 刪除有關
刪除,就是刪除欄位。 刪除字典可以用萬能刪除大法。
* **hdel**: `HDEL key field [field …]`
### 2.4 修改數值有關
數值修改的話, +n + float 就可以了,其他的,用 +(-n) 就okk 了
* **hincrby**: `HINCRBY key field increment`
* **hincrbyfloat**:` HINCRBYFLOAT key field increment`
## 3. list
list 喜歡用 'L' 和 'R' 開頭。 然後 用一個阻塞 用 'B' 開頭。 'push' 是新增, 'pop' 是刪除。存在與否是 'x'。'rem' 是刪除,'trim' 是保留。'index' 是具體位置。'insert' 就是插入。
兩個列表之間 用 'source' 和 'destination' 區分。 阻塞的時間用 'timeout'。 'BEFORE'|'AFTER' 就是 表示插入在 'pivot' 前還是在後。
### 3.1 push and pop
* **lpush**: `LPUSH key value [value …]`
* **rpush**: `RPUSH key value [value …]`
* **lpop**: `LPOP key`
* **rpop**: `RPOP key`
* **lpushx**: `LPUSHX key value`
* **rpushx**: `RPUSHX key value`
* **rpoplpush**: `RPOPLPUSH source destination`
* **blpop**: `BLPOP key [key …] timeout`
* **brpop**: `BRPOP key [key …] timeout`
* **brpoplpush**: `BRPOPLPUSH source destination timeout`
### 3.2 刪除
* **lrem**: `LREM key count value`
* **ltrim**: `LTRIM key start stop`
### 3.3 查詢
* **llen**: `LLEN key`
* **lindex**: `LINDEX key index`
* **lrange**: `LRANGE key start stop`
### 3.4 修改和插入
* **lset**: `LSET key index value`
* **linsert**: `LINSERT key BEFORE|AFTER pivot value`
## 4. set
集合能有啥, 用 's' 開頭, 'add' 是新增, 'ismember' 是判斷是否存在。 刪除有 'pop' 和 'rem', 'rand'有隨機的意思。 'members' 有 集合中元素的意思。'inter' 交集,'union' 並集, 'diff' 差集。 'store' 儲存新集合。'move' 集合中元素移動。
'member' 和 字典中的 'field' 有點點類似。
### 4.1 新增
* **sadd**: `SADD key member [member …]`
### 4.2 判斷存在
* **sismember**: `SISMEMBER key member`
### 4.3 刪除
* **spop**: `SPOP key`
* **srem**: `SREM key member [member …]`
### 4.4 查詢
* **srandmember**: `SRANDMEMBER key [count]`
* **scard**: `SCARD key`
* **smembers**: `SMEMBERS key`
* **sscan**: `SSCAN key cursor [MATCH pattern] [COUNT]`
### 4.5 集合間操作
* **smove**: `SMOVE source destination member`
* **sinter**: `SINTER key [key …]`
* **sinterstore**: `SINTERSTORE destination key [key …]`
* **sunion**: `SUNION key [key …]`
* **sunionstore**: `SUNIONSTORE destination key [key …]`
* **sdiff**: `SDIFF key [key …]`
* **sdiffstore**: `SDIFFSTORE destination key [key …]`
## 5. zset
有序集合嘛,就是有序,和集合相比之下多了一個分數。相當於是 集合 + hash表。
'score' 表示分數 檢視數量 用 'card',指定區間數量用 'count'。 因為有序,有一個排序,所以就有倒序和順序,用'rev' 區分。'lex'用在 分數一樣,的有序集合中,其他集合使用,沒啥意義。其他的一些,前面都介紹過了。
### 5.1 新增
* **zadd**: `ZADD key score member [[score member] [score member] …]`
### 5.2 查詢
* **zscore**: `ZSCORE key member`
* **zcard**: `ZCARD key`
* **zcount**: `ZCOUNT key min max`
* **zrange**: `ZRANGE key start stop [WITHSCORES]`
* **zrevrange**: `ZREVRANGE key start stop [WITHSCORES]`
* **zrangebyscore**: `ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]`
* **zrevrangebyscore**: `ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]`
* **zrank**: `ZRANK key member`
* **zrevrank**: `ZREVRANK key member`
* **zrangebylex**: `ZRANGEBYLEX key min max [LIMIT offset count]`
* **zlexcount**: `ZLEXCOUNT key min max`
* **zscan**: `ZSCAN key cursor [MATCH pattern] [COUNT count]`
### 5.3 修改
* **zincrby**: `ZINCRBY key increment member`
### 5.4 刪除
* **zrem**: `ZREM key member [member …]`
* **zremrangebyrank**: `ZREMRANGEBYRANK key start stop`
* **zremrangebyscore**: `ZREMRANGEBYSCORE key min max`
* **zremrangelex**: `ZREMRANGEBYLEX key min max`
### 5.5 集合間運算
* **zunionstore**: `ZUNIONSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]`
* **zinterstore**: `ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]`
## 6. 總結
不行就查資料吧 [連結](http://redisdoc.com/index.html) 有一說一,這個還挺全的,這裡因為是一些基礎的東西,我也沒有做太多的解釋。 沒有去考慮效能和一些實際的運用場景。 多半是給自己參考用一下。 自己總是需要重複查詢一些資料。
現在把一些資料都放在自己的部落格裡面,可能好