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 DECRkey #遞減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:group1 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