redis?Template.opsForValue()中方法實例詳解
查看源碼可以看到redisTemplate.opsForValue()中的方法都定義在ValueOperations<K, V> 中,該接口中一共有17個方法:
public interface ValueOperations<K, V> {
void set(K key, V value);
void set(K key, V value, long timeout, TimeUnit unit);
Boolean setIfAbsent(K key, V value);
void multiSet(Map<? extends K, ? extends V> map);
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map);
V get(Object key);
V getAndSet(K key, V value);
List<V> multiGet(Collection<K> keys);
Long increment(K key, long delta);
Double increment(K key, double delta);
Integer append(K key, String value);
String get(K key, long start, long end);
void set(K key, V value, long offset);
Long size(K key);
Boolean setBit(K key, long offset, boolean value);
Boolean getBit(K key, long offset);
RedisOperations<K, V> getOperations();
}下面我們一個一個來講解
void set(K key, V value)
方法含義:新增一個字符串類型的值,key是鍵,value是值
使用方法:
redisTemplate.opsForValue().set("stringkey", "stringvalue");void set(K key, V value, long timeout, TimeUnit unit)
方法含義:新增一個字符串類型的值,并且設置變量值的過期時間。key是鍵,value是值,timeout 過期時間,unit 過期時間單位。
unit 過期時間單位取值如下:
DAYS:天時間單元代表24小時
HOURS:小時時間單元代表60分鐘
MICROSECONDS:微秒時間單元代表千分之一毫秒
MILLISECONDS:毫秒時間單元代表千分之一秒
MINUTES:分鐘時間單元代表60秒
NANOSECONDS:納秒時間單元代表千分之一微秒
SECONDS:時間單元代表1秒使用方法,把timeoutkey對應的值設置過期時間為10秒:
redisTemplate.opsForValue().set("timeoutkey", "timeoutvalue", 10, TimeUnit.SECONDS);Boolean setIfAbsent(K key, V value)
方法含義:如果鍵不存在則新增,存在則不改變已經(jīng)有的值。
使用方法:
redisTemplate.opsForValue().setIfAbsent("newkey", "newvalue");V get(Object key)
方法含義:獲取key鍵對應的值
使用方法:
redisTemplate.opsForValue().get("stringkey");String get(K key, long start, long end)
方法含義:截取key鍵對應值的字符串,從開始下標位置開始到結束下標的位置(包含結束下標)的字符串。下標從1開始,如果stringkey對應的值為value,那么下面這個方法返回為:al
使用方法:
redisTemplate.opsForValue().get("stringkey", 2, 3);V getAndSet(K key, V value)
方法含義:獲取原來key鍵對應的值并重新賦新值
使用方法:
redisTemplate.opsForValue().getAndSet("stringkey", "newvalue");void set(K key, V value, long offset)
方法含義:覆蓋從指定位置開始的值
使用方法:
redisTemplate.opsForValue().set("stringkey", "a", 1);?如下三個方法放在一起講:
void multiSet(Map<? extends K, ? extends V> map)
Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map)
List<V> multiGet(Collection<K> keys)
方法含義:multiSet:設置map集合到redis;multiSetIfAbsent:如果對應的map集合名稱不存在,則添加,如果存在則不做修改;multiGet:根據(jù)集合取出對應的value值。
先使用multiSet設置相應的值,如下:
Map map = new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
redisTemplate.opsForValue().multiSet(map);在使用multiGet獲得相應的值
List list = new ArrayList();
list.add("key1");
list.add("key2");
list.add("key3");
List<String> valueList = redisTemplate.opsForValue().multiGet(list);
for (String value2 : valueList) {
System.out.println("通過multiGet(Collection<K> keys)方法獲取map值:" + value2);
}打印結果如下:

使用multiSetIfAbsent 設置相應的值,map集合中的key與之前一樣,valeu設置的不一樣
Map map1 = new HashMap();
map1.put("key1", "value11");
map1.put("key2", "value22");
map1.put("key3", "value33");
List list1 = new ArrayList();
list1.add("key1");
list1.add("key2");
list1.add("key3");
redisTemplate.opsForValue().multiSetIfAbsent(map1);
List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
for (String value1 : valueList1) {
System.out.println("通過multiGet(Collection<K> keys)方法獲取map值:" + value1);
}打印結果如下,我們可以看到?jīng)]有做任何修改

使用multiSetIfAbsent 設置相應的值,map集合中的key,valeu設置的都不一樣
Map map1 = new HashMap();
map1.put("key11", "value11");
map1.put("key21", "value22");
map1.put("key31", "value33");
List list1 = new ArrayList();
list1.add("key11");
list1.add("key21");
list1.add("key31");
redisTemplate.opsForValue().multiSetIfAbsent(map1);
List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
for (String value1 : valueList1) {
System.out.println("通過multiGet(Collection<K> keys)方法獲取map值:" + value1);
}打印結果如下,我們可以看到新增了3個key:

備注說明:multiSetIfAbsent 只要map中有一個key存在,則都不做修改。
Long increment(K key, long delta)
Double increment(K key, double delta)
方法含義:以增量的方式將值存儲在變量中,第二個參數(shù)為遞增因子
使用方法:
redisTemplate.opsForValue().set("doublevalue", 1);
redisTemplate.opsForValue().increment("doublevalue", 1.2);//以1.2遞增,遞增后為2.2
redisTemplate.opsForValue().increment("doublevalue", 1);//以1遞增,遞增后為3.2Integer append(K key, String value)
方法含義:在原有的值基礎上新增字符串到末尾
使用方法:
redisTemplate.opsForValue().set("stringkey", "value");
redisTemplate.opsForValue().append("stringkey", "appendValue");備注說明:如果append方法不起效果需要進行配置將 template.setValueSerializer(jackson2JsonRedisSerializer);修改為:template.setValueSerializer(new StringRedisSerializer());這個是因為序列化的原因,RedisTemplateput進去的值是序列化成二進制后的,但是append的值是直接加的。所以get的時候反序列化直接變成空值了。如果你存的值是字符串類型,建議直接使用StringRedisTemplate,這個不會序列化成二進制,append是可以用的。而且直接在redis客戶端存的值也能取到
Long size(K key)
方法含義:獲取指定字符串的長度
使用方法:
Long size = redisTemplate.opsForValue().size("stringkey");Boolean setBit(K key, long offset, boolean value)
Boolean getBit(K key, long offset)
方法含義:setBit:key鍵對應的值value對應的ascii碼,在offset的位置(從左向右數(shù))變?yōu)関alue;getBit:判斷指定的位置ASCII碼的bit位是否為true或者false
使用方法:
redisTemplate.opsForValue().set("stringkey", "value");
redisTemplate.opsForValue().setBit("stringkey", 1, true);
boolean flag= redisTemplate.opsForValue().getBit("stringkey", 1);到此這篇關于redis Template.opsForValue()中方法講解的文章就介紹到這了,更多相關redis Template.opsForValue()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解redis在服務器linux下啟動的相關命令(安裝和配置)
這篇文章主要介紹了redis在服務器linux下的啟動的相關命令(安裝和配置),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
Redis?的內(nèi)存淘汰策略和過期刪除策略的區(qū)別
這篇文章主要介紹了Redis?的內(nèi)存淘汰策略和過期刪除策略的區(qū)別,Redis?是可以對?key?設置過期時間的,因此需要有相應的機制將已過期的鍵值對刪除,而做這個工作的就是過期鍵值刪除策略2022-07-07
Redis實戰(zhàn)之Redis實現(xiàn)異步秒殺優(yōu)化詳解
這篇文章主要給大家介紹了Redis實戰(zhàn)之Redis實現(xiàn)異步秒殺優(yōu)化方法,文章通過圖片和代碼介紹的非常詳細,對大家的學習或工作有一定的幫助,感興趣的同學可以自己動手試一下2023-09-09

