Redis 5種資料結構及其使用場景舉例--STRING

胡海超發表於2018-09-11

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

SET key value 

設定指定 key 的值

127.0.0.1:6379> set name 'xiaoming'

OK

2

GET key 

獲取指定 key 的值。

127.0.0.1:6379> get name

"xiaoming"

3

GETRANGE key start end 

返回 key 中字串值的子字元

127.0.0.1:6379> getrange name 4 8

"ming"

4

GETSET key value

將給定 key 的值設為 value ,並返回 key 的舊值(old value)。

127.0.0.1:6379> getset name 'xiaohong'

"xiaoming"

5

GETBIT key offset

對 key 所儲存的字串值,獲取指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

6

MGET key1 [key2..]

獲取所有(一個或多個)給定 key 的值。

127.0.0.1:6379> mget name name1

1) "xiaoming"

2) "xiaohong"

7

SETBIT key offset value

對 key 所儲存的字串值,設定或清除指定偏移量上的位(bit)。

127.0.0.1:6379> setbit video 100 1

(integer) 0

127.0.0.1:6379> getbit video 100

(integer) 1

8

SETEX key seconds value

將值 value 關聯到 key ,並將 key 的過期時間設為 seconds (以秒為單位)。

127.0.0.1:6379> setex name 10 xiaoming

OK

9

SETNX key value

只有在 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

SETRANGE key offset value

用 value 引數覆寫給定 key 所儲存的字串值,從偏移量 offset 開始。

127.0.0.1:6379> setrange name 3 le

(integer) 8

127.0.0.1:6379> get name

"xialeing"

11

STRLEN key

返回 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

PSETEX key milliseconds value

這個命令和 SETEX 命令相似,但它以毫秒為單位設定 key 的生存時間,而不是像 SETEX 命令那樣,以秒為單位。

127.0.0.1:6379> psetex name 1000 xiaoming

OK

15

INCR key

將 key 中儲存的數字值增一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incr age

(integer) 11

16

INCRBY key increment

將 key 所儲存的值加上給定的增量值(increment) 。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> incrby age 2

(integer) 12

17

INCRBYFLOAT key increment

將 key 所儲存的值加上給定的浮點增量值(increment) 。

127.0.0.1:6379> set weight 40

OK

127.0.0.1:6379> incrbyfloat weight 1.5

"41.5"

18

DECR key

將 key 中儲存的數字值減一。

127.0.0.1:6379> set age 10

OK

127.0.0.1:6379> decr age

(integer) 9

19

DECRBY key decrement

key 所儲存的值減去給定的減量值(decrement) 。

127.0.0.1:6379> set age 18

OK

127.0.0.1:6379> decrby age 8

(integer) 10

20

APPEND key value

如果 key 已經存在並且是一個字串, APPEND 命令將指定的 value 追加到該 key 原來值(value)的末尾。

127.0.0.1:6379> append name -xionghaizi

(integer) 19

127.0.0.1:6379> get name

"xiaoming-xionghaizi"

相關文章