日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redisTemplate.opsForValue()中方法讲解

發布時間:2025/3/12 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redisTemplate.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, l
ong 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)

方法含義:如果鍵不存在則新增,存在則不改變已經有的值。

使用方法:

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 multiGet(Collection keys)

方法含義: multiSet:設置map集合到redis;multiSetIfAbsent:如果對應的map集合名稱不存在,則添加,如果存在則不做修改;multiGet:根據集合取出對應的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);}

打印結果如下,我們可以看到沒有做任何修改

使用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)

方法含義:以增量的方式將值存儲在變量中,第二個參數為遞增因子

使用方法:

redisTemplate.opsForValue().set("doublevalue", 1);redisTemplate.opsForValue().increment("doublevalue", 1.2);//以1.2遞增,遞增后為2.2redisTemplate.opsForValue().increment("doublevalue", 1);//以1遞增,遞增后為3.2

Integer 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的位置(從左向右數)變為value;getBit:判斷指定的位置ASCII碼的bit位是否為true或者false

使用方法:

redisTemplate.opsForValue().set("stringkey", "value");redisTemplate.opsForValue().setBit("stringkey", 1, true);boolean flag= redisTemplate.opsForValue().getBit("stringkey", 1);

總結

以上是生活随笔為你收集整理的redisTemplate.opsForValue()中方法讲解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。