文章目錄
- ?1 String 介紹
- ?2 命令
- ?3 對應 RedisTemplate API
- ???? 3.1 添加緩存
- ???? 3.2 設置過期時間(單獨設置)
- ???? 3.3 獲取緩存值
- ???? 3.4 刪除key
- ???? 3.5 順序遞增
- ???? 3.6 順序遞減
- ?4 以下是一些常用的API
- ?5 應用場景
?1 String 介紹
String 類型,也就是字符串類型,是Redis中最簡單的存儲類型。
其value是字符串,不過根據字符串的格式不同,又可以分為3類:
● string:普通字符串
● int:整數類型,可以做自增.自減操作
● float:浮點類型,可以做自增.自減操作
不管是哪種格式,底層都是字節數組形式存儲,只不過是編碼方式不同。字符串類型的最大空間不能超過 512 MB。
KEY | VALUE |
---|---|
name | snow |
age | 20 |
salary | 600000.0 |
?2 命令
🍎🍎String的常見命令有🍎🍎:
● SET
:添加或者修改已經存在的一個 String 類型的鍵值對
● GET
:根據 key 獲取 String 類型的 value
● MSET
:批量添加多個String類型的鍵值對
● MGET
:根據多個 key 獲取多個 String 類型的 value
● INCR
:讓一個整型的key自增1
● INCRBY
:讓一個整型的 key 自增并指定步長,例如:incrby num 2 讓num值自增2
● INCRBYFLOAT
:讓一個浮點類型的數字自增并指定步長
● SETNX
:添加一個 String 類型的鍵值對,前提是這個 key 不存在,否則不執行
● SETEX
:添加一個 String 類型的鍵值對,并且指定有效期
?3 對應 RedisTemplate API
???? 3.1 添加緩存
//1、通過redisTemplate設置值
redisTemplate.boundValueOps("StringKey").set("StringValue");
redisTemplate.boundValueOps("StringKey").set("StringValue",1, TimeUnit.MINUTES);//2、通過BoundValueOperations設置值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
stringKey.set("StringVaule");
stringKey.set("StringValue",1, TimeUnit.MINUTES);//3、通過ValueOperations設置值
ValueOperations ops = redisTemplate.opsForValue();
ops.set("StringKey", "StringVaule");
ops.set("StringValue","StringVaule",1, TimeUnit.MINUTES);//4(SETNX + SETEX):這個key不存在執行 存在則不執行,多用于互斥鎖
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)
???? 3.2 設置過期時間(單獨設置)
redisTemplate.boundValueOps("StringKey").expire(1,TimeUnit.MINUTES);
redisTemplate.expire("StringKey",1,TimeUnit.MINUTES);
不建議使用單獨設置過期時間的API, 可以使用 3.1 中的第一個演示,在設置值的同時設置過期時間.
???? 3.3 獲取緩存值
//1、通過redisTemplate設置值
String str1 = (String) redisTemplate.boundValueOps("StringKey").get();//2、通過BoundValueOperations獲取值
BoundValueOperations stringKey = redisTemplate.boundValueOps("StringKey");
String str2 = (String) stringKey.get();//3、通過ValueOperations獲取值
ValueOperations ops = redisTemplate.opsForValue();
String str3 = (String) ops.get("StringKey");
???? 3.4 刪除key
Boolean result = redisTemplate.delete("StringKey");
???? 3.5 順序遞增
redisTemplate.boundValueOps("StringKey").increment(1L);
該API會返回遞增后的值. 如果KEY對應的值不存在會創建之并返回1
???? 3.6 順序遞減
redisTemplate.boundValueOps("StringKey").increment(-3L);
?4 以下是一些常用的API
ValueOperations ops = redisTemplate.opsForValue();// 單獨設置有效期(不推薦單獨用)
ops.expire("StringKey",1,TimeUnit.MINUTES);// 設置值 and 有效期(推薦這種)
ops.set("key", "value", 1, TimeUnit.MINUTES);// 操作數值 增加 減少(INCR INCRBY)
ops.increment("key", 1);
ops.increment("key", -1);// (SETNX + SETEX):這個key不存在執行 存在則不執行,多用于互斥鎖
ops.setIfAbsent("key", "value", 10, TimeUnit.SECONDS)// 獲取緩存值
ops.get("StringKey");
?5 應用場景
下面列舉了一些Redis String類型的應用場景:
-
緩存:使用String保存緩存信息,如用戶會話狀態、web頁面片段、數據庫查詢結果等。
-
計數器:使用incr/decr命令實現對計數器的自增和自減,如網站訪問量、文件下載次數、商品銷售量等。
-
消息隊列:使用LPUSH/RPUSH命令實現隊列的入隊(左插入)和出隊(右取出),同時使用BLPOP/BRPOP命令進行阻塞式彈出等待的消息。
-
id生成器:使用incr命令實現簡單id生成,解決分布式系統節點間數據生成的問題。
-
分布式鎖:通過 SETNX 命令結合時間戳或隨機字符串等實現互斥鎖的獲取和釋放,避免并發寫操作時數據的不一致。
-
商品價格:使用String保存商品價格,動態更新價格避免價格無法及時調整。
-
Session共享:將session信息以key-value方式保存到redis中并設置過期時間,完成session共享功能,類似于分布式緩存。