String 資料結構是簡單的 key-value 型別,value 不僅可以是 String,也可以是數字(當數字型別用 Long 可以表示的時候encoding 就是整型,其他都儲存在 sdshdr 當做字串)。
一、應用場景舉例
String型別的是Redis所有資料結構中使用最為頻繁的,也是最簡單的資料結構,正所謂大道至簡。
1、使用key-value來快取一些不常改變的資料或,以減輕資料庫的壓力,如快取組織架構資訊、快取許可權配置資訊、快取使用者訪問次數、單點登入快取使用者sessionKey等,這種方式比較簡單。
2、使用redis的原子性特性進行訪問控制,如限制使用者點選頻率(每10秒可以點選一次)可用以下方式:
127.0.0.1:6379> setnx "order:confirm:{userId}" 1
(integer) 1
127.0.0.1:6379> expire "order:confirm:{userId}" 10
(integer) 1
以上操作中只有setnx 成功的執行緒才允許繼續執行下去,否則,將直接提示使用者“點選頻率過快”
因為 setnx是原子操作,所以只有一個執行緒可以設定成功,其它執行緒設定失敗,符合要求
當執行緒setnx 成功後,將可以執行接下來的操作,併為快取key設定過期時間,過期後剛才設定的快取失效,可以進行下一次點選
3、使用setbit和getbit命令來實現布隆過濾器,例如快取所有商品id,防止快取擊穿問題
將所有商品編號n存到bitmap的第n位,1表示存在,這裡假設有兩個商品(12345,12346)
127.0.0.1:6379> setbit goodsIds 12345 1
(integer) 0
127.0.0.1:6379> setbit goodsIds 12346 1
(integer) 0
判斷商品id是否存在
127.0.0.1:6379> getbit goodsIds 12345
(integer) 1
127.0.0.1:6379> getbit goodsIds 12347
(integer) 0
127.0.0.1:6379>
二、下表列出了 redis string基本的相關命令:
序號 |
命令 |
舉例 |
1 |
設定指定 key 的值 |
127.0.0.1:6379> set name 'xiaoming' OK |
2 |
獲取指定 key 的值。 |
127.0.0.1:6379> get name "xiaoming" |
3 |
返回 key 中字串值的子字元 |
127.0.0.1:6379> getrange name 4 8 "ming" |
4 |
將給定 key 的值設為 value ,並返回 key 的舊值(old value)。 |
127.0.0.1:6379> getset name 'xiaohong' "xiaoming" |
5 |
對 key 所儲存的字串值,獲取指定偏移量上的位(bit)。 |
127.0.0.1:6379> setbit video 100 1 (integer) 0 127.0.0.1:6379> getbit video 100 (integer) 1 |
6 |
獲取所有(一個或多個)給定 key 的值。 |
127.0.0.1:6379> mget name name1 1) "xiaoming" 2) "xiaohong" |
7 |
對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)。 |
127.0.0.1:6379> setbit video 100 1 (integer) 0 127.0.0.1:6379> getbit video 100 (integer) 1 |
8 |
將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)。 |
127.0.0.1:6379> setex name 10 xiaoming OK |
9 |
只有在 key 不存在時設定 key 的值。 |
127.0.0.1:6379> setnx xiaoming_age 10 (integer) 1 127.0.0.1:6379> setnx xiaoming_age 18 (integer) 0 |
10 |
用 value 引數覆寫給定 key 所儲存的字串值,從偏移量 offset 開始。 |
127.0.0.1:6379> setrange name 3 le (integer) 8 127.0.0.1:6379> get name "xialeing" |
11 |
返回 key 所儲存的字串值的長度。 |
127.0.0.1:6379> strlen name (integer) 8 |
12 |
MSET key value [key value ...] 同時設定一個或多個 key-value 對。 |
127.0.0.1:6379> mset name xiaoming name1 xiaohong OK |
13 |
MSETNX key value [key value ...] 同時設定一個或多個 key-value 對,當且僅當所有給定 key 都不存在。 |
127.0.0.1:6379> msetnx name xiaoming name5 xiaogang (integer) 0 127.0.0.1:6379> get name5 (nil) |
14 |
這個命令和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。 |
127.0.0.1:6379> psetex name 1000 xiaoming OK |
15 |
將 key 中儲存的數字值增一。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incr age (integer) 11 |
16 |
將 key 所儲存的值加上給定的增量值(increment) 。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> incrby age 2 (integer) 12 |
17 |
將 key 所儲存的值加上給定的浮點增量值(increment) 。 |
127.0.0.1:6379> set weight 40 OK 127.0.0.1:6379> incrbyfloat weight 1.5 "41.5" |
18 |
將 key 中儲存的數字值減一。 |
127.0.0.1:6379> set age 10 OK 127.0.0.1:6379> decr age (integer) 9 |
19 |
key 所儲存的值減去給定的減量值(decrement) 。 |
127.0.0.1:6379> set age 18 OK 127.0.0.1:6379> decrby age 8 (integer) 10 |
20 |
如果 key 已經存在並且是一個字串, APPEND 命令將指定的 value 追加到該 key 原來值(value)的末尾。 |
127.0.0.1:6379> append name -xionghaizi (integer) 19 127.0.0.1:6379> get name "xiaoming-xionghaizi" |