## Redis 數據類型介紹:
Redis 是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。
Redis 支持多種數據類型,如:字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢;
下面我們就Reids 不同的數據類型的使用場景和特點進行分開介紹說明;
### Redis key 命名規則
Redis key值是二進制安全的,這意味著可以用任何二進制序列作為key值,也可以用空字符串作為Redis的key;
* key 值的長度不易過長,過長不僅消耗內存,而且在數據中查找這類鍵值的計算成本很高,建議不超過1024個字節;
* key 的值如果特別的短,也不是太好,例如,用“p:100:d” 來代替“plan:100:data” 這樣的寫法也沒什么問題,但是在易讀性上不如“plan:100:data” 易讀性高,如果在一個Redis 集群中有多個業務線在使用一個公共的Redis 建議用 “web:plan:100:data”、或者"web-plan:100:data" 來進行命名;
* 最后,建議大家在對key 進行命名的時候遵循兩個原則:1、易讀性;2、可維護性;
### Redis 字符串 Strings
Redis string 類似是Redis 基本的數據類型,基本的操作命令是:set key value ,get key value ;下面是 redis-cli 命令行模式下操作命令:
```
127.0.0.1:6379> set crm:customer:1000:data 301000
OK
127.0.0.1:6379> get crm:customer:1000:data
"301000"
```
Redis 的 字符串類似的value 值值可以是任何種類的字符串(包括二進制數據),但是單個值的存儲長度不能超過 512MB;
set 命令 相關參數介紹:
* SET key value [EX seconds] [PX milliseconds ] [NX|XX ]
* 如果 key 已經持有其他值, SET 就覆寫舊值,無視類型。
可選參數
從 Redis 2.6.12 版本開始, SET 命令的行為可以通過一系列參數來修改:
* EX second :設置鍵的過期時間為 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
* PX millisecond :設置鍵的過期時間為 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value 。
* NX :只在鍵不存在時,才對鍵進行設置操作。 SET key value NX 效果等同于 SETNX key value 。
* XX :只在鍵已經存在時,才對鍵進行設置操作。
### Redis 字符串操作命令
set 操作的命令實例如下:
```
127.0.0.1:6379> set abcd 'hello word' # set abcd 內容為hello word
OK
127.0.0.1:6379> get abcd # get abcd 的 value
"hello word"
127.0.0.1:6379> set abcd 'hello word abc' EX 1 # 設置abcd key 的過期時間為 1秒
OK
127.0.0.1:6379> set abcd 'hello word' PX 2000 # 設置abcd key 的過期時間為2000毫秒 = 2秒
OK
127.0.0.1:6379> get abcd # get 獲取abcd 的值 為nil 空
(nil)
127.0.0.1:6379> set abcd 'hello word php' nx # 只在鍵不存在時,才對鍵進行設置操作,如果健值存在設置不成功,反之成功;
(nil)
127.0.0.1:6379> set abcd 'hello word php www' xx # 只在鍵已經存在時,才對鍵進行設置操作。操作的健值必須存在 才操作成功
OK
```
### Redis String 數值類型遞增、遞減操作