1. 程式人生 > 實用技巧 >Redis 學習筆記(1)

Redis 學習筆記(1)

Redis支援五種資料型別:string(字串),hash(雜湊),list(列表),set(集合)及 zset(sorted set:有序集合)。

一、Redis 資料型別-STRING

1、常用命令

SET key value                #存
GET key                      #取
Del key                      #刪除key
INCR key                     #自增key對應的value的值,增量為1
INCRBY key increment         #自增key對應的value的值,增量為 increment
DECR 
key #遞減key對應的value的值,增量為-1 getset key value #命令用於設定指定 key 的值,並返回 key 的舊值。   當 key 沒有舊值時,即 key 不存在時,返回 nil   當 key 存在但不是字串型別時,返回一個錯誤

2、例項

例項1: set key value

D:\Redis>redis-cli.exe -h 127.0.0.1 -p 6379
127.0.0.1:6379
> set set:test 1 # 返回ok 說明成功 OK 127.0.0.1:6379> set set:test1 1 OK 127.0.0.1:6379> set set:test2 1 OK 127.0.0.1:6379> keys * # 列出所有的key 1) "set:test" 2) "set:test2" 3) "set:test1" 127.0.0.1:6379> set system:user 1 OK 127.0.0.1:6379> set system:role 1 OK 127.0.0.1:6379> set system:group
1 OK 127.0.0.1:6379> keys * 1) "system:role" 2) "set:test" 3) "set:test1" 4) "set:test2" 5) "system:group" 6) "system:user" 127.0.0.1:6379>

說明:

  set system:user 1
  key就是 system:user ;value就是1

例項2:切庫

127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> keys *
1) "system:role"
2) "set:test"
3) "set:test1"
4) "set:test2"
5) "system:group"
6) "system:user"
127.0.0.1:6379>

在 redis.conf 檔案中,配置項database 16 設定了資料庫的數量為16,預設資料庫是0。

可以使用select 命令在連線上指定資料庫id。

當我們沒有預設選擇庫時,預設使用 0 庫。

例項3:get key

127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"
127.0.0.1:6379> set b {a:b,1:2}
OK
127.0.0.1:6379> get b
"{a:b,1:2}"
127.0.0.1:6379>

例項4:del key

127.0.0.1:6379> keys *
1) "system:role"
2) "b"
3) "set:test"
4) "set:test1"
5) "set:test2"
6) "system:group"
7) "system:user"
8) "a"
127.0.0.1:6379> del a  # 刪除成功
(integer) 1
127.0.0.1:6379> keys *
1) "system:role"
2) "b"
3) "set:test"
4) "set:test1"
5) "set:test2"
6) "system:group"
7) "system:user"
127.0.0.1:6379>
127.0.0.1:6379> del a  #刪除失敗
(integer) 0

例項5:遞增key

127.0.0.1:6379> incr test
(integer) 1
127.0.0.1:6379> get test
"1"
127.0.0.1:6379> incr test
(integer) 2
127.0.0.1:6379> get test
"2"
127.0.0.1:6379> incr test
(integer) 3
127.0.0.1:6379> get test
"3"
127.0.0.1:6379> incrby test 3
(integer) 6
127.0.0.1:6379> get test
"6"

當值(字串)裡是數字時,才可以自增。

例項6:遞減key

127.0.0.1:6379> DECR test
(integer) 5

例項7:先取再設定(同時進行)

127.0.0.1:6379> getset test1 1
(nil)
127.0.0.1:6379> get test1
"1"
127.0.0.1:6379> getset test1 2
"1"
127.0.0.1:6379> get test1
"2"
127.0.0.1:6379>

redis getset 命令用於設定指定key的值,並返回key的舊值。

3、STRING 型別的實際場景

場景1:做商品詳情和快取

127.0.0.1:6379> set spu:10001 '{"color":"red","struct":"glass","length":30,"width":25,"price":"1345.20"}'
OK
127.0.0.1:6379> get spu:10001
"{\"color\":\"red\",\"struct\":\"glass\",\"length\":30,\"width\":25,\"price\":\"1345.20\"}"
127.0.0.1:6379>

說明:比如客戶端發起請求查詢 sup:10001 商品資訊,api程式先去redis拿,拿到了就直接返回給api程式,api返回給客戶端,這樣就起到了做快取的目的。

場景2:給資料做唯一編碼

有一些資料需要唯一的編碼去命名,如用例編碼。

使用redis 用incr 生成用例編碼

127.0.0.1:6379> incr test_case_no
(integer) 1
127.0.0.1:6379> incr test_case_no
(integer) 2
127.0.0.1:6379> incr test_case_no
(integer) 3

場景3:做分散式鎖

1、什麼是分散式鎖:針對多服務的情況,在外面加個分散式鎖,每個服務都要在獲得分散式鎖後進行操作。

2、Redis為什麼可以做分散式鎖:因為redis是單執行緒執行的,沒有併發,所有請求都是一個一個操作。

3、redis怎麼做分散式鎖:

  expire [key] time #設定一個key有效期

  exists [key] # 判斷key是否存在

  虛擬碼:

先判斷鎖是否存在(key存在,exists):

  如果存在:pass

  如果不存在:set key 'xxx' && 設定過期時間

        操作

4、如何設定過期時間&如何判斷key是否存在

127.0.0.1:6379> set hqq2 'a'
OK
127.0.0.1:6379> exists hqq2     #判斷key是否存在
(integer) 1
127.0.0.1:6379> expire hqq2 10  #設定過期時間為10s
(integer) 1

10秒後再次操作
127.0.0.1:6379> exists hqq2
(integer) 0
127.0.0.1:6379>

5、設定過期時間的實際應用場景:

set key '限時活動'
expire key 10
while get key:
    繼續活動
活動結束
127.0.0.1:6379> set 618day 'huodong'
OK
127.0.0.1:6379> expire 618day 100
(integer) 1
127.0.0.1:6379> get 618day
"huodong"
127.0.0.1:6379> get 618day
(nil)

4、總結STRING

1、一個key對應一個value

2、Redis的String可以包含任何資料,比如 jpg圖片或者序列的物件

3、一個key最大能儲存512MB

二、Redis 資料型別-STRING