這篇文章主要講解了“SpringBoot怎么使用RedisTemplate操作Redis數據類型”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot怎么使用RedisTemplate操作Redis數據類型”吧!
Spring 封裝了 RedisTemplate 來操作 Redis,它支持所有的 Redis 原生的 API。在 RedisTemplate 中定義了對5種數據結構的操作方法。
opsForValue():操作字符串。
opsForList():操作列表。
opsForHash():操作哈希。
opsForSet():操作集合。
opsForZSet():操作有序集合。
下面通過實例來理解和應用這些方法。這里需要特別注意的是,運行上述方法后要對數據進行清空操作,否則多次運行會導致數據重復操作。
(1)使用Maven添加依賴文件
在pom.xml配置信息文件中,添加Redis依賴:
我的SpringBoot版本:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
添加Redis依賴:
<!-- Redis啟動器 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.3.3.RELEASE</version> </dependency>
(2)Redis的配置
在 application.yml 配置文件中配置Redis信息:
#Spring配置 spring: #緩存管理器 cache: type: redis #Redis配置 redis: database: 0 #Redis數據庫索引(默認為0) host: 127.0.0.1 #Redis服務器地址 port: 6379 #Redis服務器連接端口 password: #Redis服務器連接密碼(默認為空) jedis: pool: max-active: 8 #連接池最大連接數(使用負值表示沒有限制) max-wait: -1s #連接池最大阻塞等待時間(使用負值表示沒有限制) max-idle: 8 #連接池中的最大空閑連接 min-idle: 0 #連接池中的最小空閑連接 lettuce: shutdown-timeout: 100ms #關閉超時時間,默認值100ms
(3)Redis配置類(config層)
創建com.pjb.config包中,并創建RedisConfig類(Redis配置類),并繼承CachingConfigurerSupport類。
package com.pjb.config;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import java.lang.reflect.Method;
/**
* Redis配置類
* @author pan_junbiao
**/
@Configuration
public class RedisConfig extends CachingConfigurerSupport
{
/**
* 緩存對象集合中,緩存是以key-value形式保存的,
* 當不指定緩存的key時,SpringBoot會使用keyGenerator生成Key。
*/
@Bean
public KeyGenerator keyGenerator()
{
return new KeyGenerator()
{
@Override
public Object generate(Object target, Method method, Object... params) {
StringBuilder sb = new StringBuilder();
//類名+方法名
sb.append(target.getClass().getName());
sb.append(method.getName());
for (Object obj : params) {
sb.append(obj.toString());
}
return sb.toString();
}
};
}
/**
* 緩存管理器
*/
@SuppressWarnings("rawtypes")
@Bean
public CacheManager cacheManager(RedisConnectionFactory connectionFactory)
{
RedisCacheManager cacheManager = RedisCacheManager.create(connectionFactory);
//設置緩存過期時間
return cacheManager;
}
/**
* 實例化RedisTemplate對象
*/
@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory)
{
StringRedisTemplate template = new StringRedisTemplate(factory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}字符串(String)是 Redis 最基本的數據類型。String 的一個“Key”對應一個“Value”,即 Key-Value 鍵值對。String 是二進制安全的,可以存儲任何數據(比如圖片或序列化的對象)。值最大能存儲512MB的數據。一般用于一些復雜的計數功能的緩存。RedisTemplate 提供以下操作 String 的方法。
具體用法見以下代碼:
/**
* Redis操作字符串(String)
* @author pan_junbiao
**/
@SpringBootTest
public class StringTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string1()
{
redisTemplate.opsForValue().set("userName","pan_junbiao的博客");
redisTemplate.opsForValue().set("blogUrl","https://blog.csdn.net/pan_junbiao");
redisTemplate.opsForValue().set("blogRemark","您好,歡迎訪問 pan_junbiao的博客");
System.out.println("用戶名稱:" + redisTemplate.opsForValue().get("userName"));
System.out.println("博客地址:" + redisTemplate.opsForValue().get("blogUrl"));
System.out.println("博客信息:" + redisTemplate.opsForValue().get("blogRemark"));
}
}執行結果:

以下代碼設置3s失效。3s之內查詢有結果,3s之后查詢返回為null。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string2()
{
//設置的是3s失效,3s之內查詢有結果,3s之后返回null
redisTemplate.opsForValue().set("blogRemark","您好,歡迎訪問 pan_junbiao的博客",3, TimeUnit.SECONDS);
try
{
Object s1 = redisTemplate.opsForValue().get("blogRemark");
System.out.println("博客信息:" + s1);
Thread.currentThread().sleep(2000);
Object s2 = redisTemplate.opsForValue().get("blogRemark");
System.out.println("博客信息:" + s2);
Thread.currentThread().sleep(5000);
Object s3 = redisTemplate.opsForValue().get("blogRemark");
System.out.println("博客信息:" + s3);
}
catch (InterruptedException ie)
{
ie.printStackTrace();
}
}執行結果:

設置鍵的字符串,并返回其舊值。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string3()
{
//設置鍵的字符串并返回其舊值
redisTemplate.opsForValue().set("blogRemark","pan_junbiao的博客");
Object oldVaule = redisTemplate.opsForValue().getAndSet("blogRemark","您好,歡迎訪問 pan_junbiao的博客");
Object newVaule = redisTemplate.opsForValue().get("blogRemark");
System.out.println("舊值:" + oldVaule);
System.out.println("新值:" + newVaule);
}執行結果:

如果key已經存在,并且是一個字符串,則該命令將該值追加到字符串的末尾。如果key不存在,則它將被創建并設置為空字符串,因此 append 在這種特殊情況下類似于 set。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string4()
{
//設置value的序列化規則,否則會報錯
redisTemplate.setValueSerializer(new StringRedisSerializer());
redisTemplate.opsForValue().append("blogRemark","您好,歡迎訪問 ");
System.out.println(redisTemplate.opsForValue().get("blogRemark"));
redisTemplate.opsForValue().append("blogRemark","pan_junbiao的博客");
System.out.println(redisTemplate.opsForValue().get("blogRemark"));
}執行結果:

注意:這里一定要注意反序列化配置,否則會報錯。
返回key所對應的value值的長度,見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void string5()
{
redisTemplate.opsForValue().set("userName","pan_junbiao的博客");
System.out.println("Value值:" + redisTemplate.opsForValue().get("userName"));
System.out.println("Value值的長度:" + redisTemplate.opsForValue().size("userName"));
}執行結果:

Redis列表是簡單的字符串列表,按照插入順序排序??梢蕴砑右粋€元素到列表的頭部(左邊)或尾部(右邊)。
使用list數據結果,可以做簡單的消息隊列的功能。還可以利用 Irange 命令,做基于Reids的分頁功能,性能極佳。
leftPushAll方法:表示把一個數組插入列表中。
rightPushAll方法:表示向列表的最右邊批量添加元素。具體用法見以下代碼:
/**
* Redis操作列表(List)
* @author pan_junbiao
**/
@SpringBootTest
public class ListTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list1()
{
String[] user1 = new String[]{"1","pan_junbiao的博客","您好,歡迎訪問 pan_junbiao的博客"};
String[] user2 = new String[]{"2","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"};
String[] user3 = new String[]{"3","pan_junbiao的博客","您好,歡迎訪問 pan_junbiao的博客"};
redisTemplate.opsForList().rightPushAll("user1",user1);
redisTemplate.opsForList().rightPushAll("user2",user2);
redisTemplate.opsForList().rightPushAll("user3",user3);
System.out.println(redisTemplate.opsForList().range("user1",0,-1));
System.out.println(redisTemplate.opsForList().range("user2",0,-1));
System.out.println(redisTemplate.opsForList().range("user3",0,-1));
}
}執行結果:

leftPush方法:將所有指定的值插入在鍵的列表的頭部。如果鍵不存在,則在執行推送操作之前將其創建為空列表(從左邊插入)。
rightPush方法:將所有指定的值插入在鍵的列表的尾部。如果鍵不存在,則在執行推送操作之前將其創建為空列表(從右邊插入)。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list2()
{
redisTemplate.opsForList().rightPush("userInfo",1);
redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客");
redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao");
redisTemplate.opsForList().rightPush("userInfo","您好,歡迎訪問 pan_junbiao的博客");
System.out.println("用戶編號:" + redisTemplate.opsForList().index("userInfo",0));
System.out.println("用戶名稱:" + redisTemplate.opsForList().index("userInfo",1));
System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2));
System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));
}執行結果:

返回存儲在鍵中的列表的長度。如果鍵不存在,則將其解釋為空列表,并返回0。如果key存在的值不是列表,則返回錯誤。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list3()
{
String[] user = new String[]{"1","pan_junbiao的博客","您好,歡迎訪問 pan_junbiao的博客"};
redisTemplate.opsForList().leftPushAll("user",user);
System.out.println("列表的長度:" + redisTemplate.opsForList().size("user"));
}執行結果:

在列表中 index 的位置設置 value。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list4()
{
String[] user = new String[]{"1","pan_junbiao的博客","https://blog.csdn.net/pan_junbiao"};
redisTemplate.opsForList().rightPushAll("user",user);
System.out.println(redisTemplate.opsForList().range("user",0,-1));
redisTemplate.opsForList().set("user",2,"您好,歡迎訪問 pan_junbiao的博客");
System.out.println(redisTemplate.opsForList().range("user",0,-1));
}執行結果:

根據下標獲取列表中的值(下標從0開始)。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list2()
{
redisTemplate.opsForList().rightPush("userInfo",1);
redisTemplate.opsForList().rightPush("userInfo","pan_junbiao的博客");
redisTemplate.opsForList().rightPush("userInfo","https://blog.csdn.net/pan_junbiao");
redisTemplate.opsForList().rightPush("userInfo","您好,歡迎訪問 pan_junbiao的博客");
System.out.println("用戶編號:" + redisTemplate.opsForList().index("userInfo",0));
System.out.println("用戶名稱:" + redisTemplate.opsForList().index("userInfo",1));
System.out.println("博客地址:" + redisTemplate.opsForList().index("userInfo",2));
System.out.println("博客信息:" + redisTemplate.opsForList().index("userInfo",3));
}執行結果:

從存儲在鍵中的列表,刪除給定“count”值的元素的第1個計數事件。其中,參數count的含義如下:
count=0:刪除等于value的所有元素。
count>0:刪除等于從頭到尾移動的值的元素。
count<0:刪除等于從尾到頭移動的值的元素。
以下代碼用于刪除列表中第一次出現的值:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list5()
{
String[] user = new String[]{"1","pan_junbiao的博客","您好,歡迎訪問 pan_junbiao的博客"};
redisTemplate.opsForList().rightPushAll("user",user);
System.out.println(redisTemplate.opsForList().range("user",0,-1));
//將刪除列表中第一次出現的pan_junbiao的博客
redisTemplate.opsForList().remove("user",1,"pan_junbiao的博客");
System.out.println(redisTemplate.opsForList().range("user",0,-1));
}執行結果:

leftPop方法:彈出最左邊的元素,彈出之后該值在列表中將不復存在。
rightPop方法:彈出最右邊的元素,彈出之后該值在列表中將不復存在。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void list6()
{
String[] user = new String[]{"1","pan_junbiao的博客","您好,歡迎訪問 pan_junbiao的博客"};
redisTemplate.opsForList().rightPushAll("user",user);
System.out.println(redisTemplate.opsForList().range("user",0,-1));
//彈出最右邊的元素,彈出之后該值在列表中將不復存在
System.out.println(redisTemplate.opsForList().rightPop("user"));
System.out.println(redisTemplate.opsForList().range("user",0,-1));
}執行結果:

Redis 中的 hash(哈希)是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象。value 中存放的是結構化的對象。利用這樣數據結果,可以方便地操作其中的某個字段。比如在“單點登錄”時,可以用這種數據結構存儲用戶信息。以 CookieId 作為 key,設置30分鐘為緩存過期時間,能很好地模擬出類似 Session 的效果。
putAll方法:用 m 中提供的多個散列字段設置到 key 對應的散列表中。
entries方法:根據密鑰獲取整個散列存儲。具體用法見以下代碼:
/**
* Redis操作哈希(Hash)
* @author pan_junbiao
**/
@SpringBootTest
public class HashTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void hash2()
{
Map<String,Object> userMap = new HashMap<>();
userMap.put("userName","pan_junbiao的博客");
userMap.put("blogRemark","您好,歡迎訪問 pan_junbiao的博客");
redisTemplate.opsForHash().putAll("userHash",userMap);
System.out.println(redisTemplate.opsForHash().entries("userHash"));
}
}執行結果:

put方法:設置 hashKey 的值。
get方法:從鍵中的散列獲取給定 hashKey 的值。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void hash3()
{
redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao");
redisTemplate.opsForHash().put("userHash","blogRemark","您好,歡迎訪問 pan_junbiao的博客");
System.out.println("用戶名稱:" + redisTemplate.opsForHash().get("userHash","userName"));
System.out.println("博客地址:" + redisTemplate.opsForHash().get("userHash","blogUrl"));
System.out.println("博客信息:" + redisTemplate.opsForHash().get("userHash","blogRemark"));
}執行結果:

values方法:根據密鑰獲取整個散列存儲的值。
keys方法:根據密鑰獲取整個散列存儲的鍵。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void hash4()
{
redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
redisTemplate.opsForHash().put("userHash","blogRemark","您好,歡迎訪問 pan_junbiao的博客");
System.out.println("散列存儲的值:" + redisTemplate.opsForHash().values("userHash"));
System.out.println("散列存儲的鍵:" + redisTemplate.opsForHash().keys("userHash"));
}執行結果:

hasKey方法:確定 hashKey 是否存在。
size方法:獲取 key 所對應的散列表的大小個數。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void hash5()
{
redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
redisTemplate.opsForHash().put("userHash","blogUrl","https://blog.csdn.net/pan_junbiao");
redisTemplate.opsForHash().put("userHash","blogRemark","您好,歡迎訪問 pan_junbiao的博客");
System.out.println(redisTemplate.opsForHash().hasKey("userHash","userName"));
System.out.println(redisTemplate.opsForHash().hasKey("userHash","age"));
System.out.println(redisTemplate.opsForHash().size("userHash"));
}執行結果:

刪除給定的 hashKeys。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void hash6()
{
redisTemplate.opsForHash().put("userHash","userName","pan_junbiao的博客");
redisTemplate.opsForHash().put("userHash","blogRemark","您好,歡迎訪問 pan_junbiao的博客");
System.out.println(redisTemplate.opsForHash().delete("userHash","blogRemark"));
System.out.println(redisTemplate.opsForHash().entries("userHash"));
}執行結果:

set 是存放不重復值的集合。利用 set 可以做全局去重復的功能。還可以進行交集、并集、差集等操作,也可用來實現計算共同喜好、全部的喜好、自己獨有的喜好等功能。
Redis 的 set 是 string 類型的無序集合,通過散列表實現。
add方法:在無序集合中添加元素,返回添加個數;如果存在重復的則不進行添加。
members方法:返回集合中的所有成員。具體用法見以下代碼:
/**
* Redis操作集合(Set)
* @author pan_junbiao
**/
@SpringBootTest
public class SetTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set1()
{
String[] citys = new String[]{"北京","上海","廣州","深圳"};
System.out.println(redisTemplate.opsForSet().add("citySet",citys));
System.out.println(redisTemplate.opsForSet().add("citySet","香港","澳門","臺灣"));
//返回集合中的所有元素
System.out.println(redisTemplate.opsForSet().members("citySet"));
}
}執行結果:

移除集合中一個或多個成員。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set2()
{
String[] citys = new String[]{"北京","上海","廣州","深圳"};
System.out.println(redisTemplate.opsForSet().add("citySet",citys));
System.out.println(redisTemplate.opsForSet().remove("citySet",citys));
}執行結果:

移除并返回集合中的一個隨機元素。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set3()
{
String[] citys = new String[]{"北京","上海","廣州","深圳"};
System.out.println(redisTemplate.opsForSet().add("citySet",citys));
System.out.println(redisTemplate.opsForSet().pop("citySet"));
System.out.println(redisTemplate.opsForSet().members("citySet"));
}執行結果:

將 member 元素移動。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set4()
{
String[] citys = new String[]{"北京","上海","廣州","深圳"};
System.out.println(redisTemplate.opsForSet().add("citySet",citys));
System.out.println(redisTemplate.opsForSet().move("citySet","深圳","citySet2"));
System.out.println(redisTemplate.opsForSet().members("citySet"));
System.out.println(redisTemplate.opsForSet().members("citySet2"));
}執行結果:

用于遍歷 Set。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set5()
{
String[] citys = new String[]{"北京","上海","廣州","深圳"};
System.out.println(redisTemplate.opsForSet().add("citySet",citys));
Cursor<Object> cursor = redisTemplate.opsForSet().scan("citySet", ScanOptions.NONE);
while(cursor.hasNext())
{
System.out.println(cursor.next());
}
}執行結果:

Set<V> intersect(K key1, K key2)方法、Long intersectAndStore(K key1, K key2, K destKey)方法:交集。
Set<V> union(K key1, K key2)方法、Long unionAndStore(K key1, K key2, K destKey)方法:并集。
Set<V> difference(K key1, K key2)方法、Long differenceAndStore(K key1, K key2, K destKey)方法:差集。
具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void set6()
{
String[] city1 = new String[]{"北京", "上海", "廣州", "深圳", "昆明"};
String[] city2 = new String[]{"北京", "深圳", "昆明", "成都"};
System.out.println(redisTemplate.opsForSet().add("citySet1", city1));
System.out.println(redisTemplate.opsForSet().add("citySet2", city2));
//返回集合中的所有元素
System.out.println("城市集合1:" + redisTemplate.opsForSet().members("citySet1"));
System.out.println("城市集合2:" + redisTemplate.opsForSet().members("citySet2"));
//求交集、并集、差集(方式一)
System.out.println("求交集、并集、差集(方式一):");
System.out.println("交集:" + redisTemplate.opsForSet().intersect("citySet1","citySet2"));
System.out.println("并集:" + redisTemplate.opsForSet().union("citySet1","citySet2"));
System.out.println("差集:" + redisTemplate.opsForSet().difference("citySet1","citySet2"));
//求交集、并集、差集(方式二)
redisTemplate.opsForSet().intersectAndStore("citySet1","citySet2", "intersectCity");
redisTemplate.opsForSet().unionAndStore("citySet1","citySet2", "unionCity");
redisTemplate.opsForSet().differenceAndStore("citySet1","citySet2", "differenceCity");
System.out.println("求交集、并集、差集(方式二):");
System.out.println("交集:" + redisTemplate.opsForSet().members("intersectCity"));
System.out.println("并集:" + redisTemplate.opsForSet().members("unionCity"));
System.out.println("差集:" + redisTemplate.opsForSet().members("differenceCity"));
}執行結果:

zset(Sorted Set 有序集合)也是 string 類型元素的集合,且不允許重復的成員。每個元素都會關聯一個 double 類型的分數??梢酝ㄟ^分數將該集合中的成員從小到大進行排序。
zset 的成員是唯一的,但權重參數分數(score)卻可以重復。集合中的元素能夠按 score 進行排列。它可以用來做排行榜應用、取TOP/N、延時任務、范圍查找等。
增加一個有序集合。具體用法見以下代碼:
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import java.util.HashSet;
import java.util.Set;
/**
* Redis操作有序集合(Sorted Set)
* @author pan_junbiao
**/
@SpringBootTest
public class SortedSetTest
{
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset1()
{
ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
typles.add(objectTypedTuple1);
typles.add(objectTypedTuple2);
typles.add(objectTypedTuple3);
System.out.println(redisTemplate.opsForZSet().add("typles",typles));
System.out.println(redisTemplate.opsForZSet().range("typles",0,-1));
}
}執行結果:

新增一個有序集合,存在的話為false,不存在的話為true。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset2()
{
System.out.println(redisTemplate.opsForZSet().add("zset2", "pan_junbiao的博客_01", 9.6));
System.out.println(redisTemplate.opsForZSet().add("zset2", "pan_junbiao的博客_01", 9.6));
}執行結果:

從有序集合中移除一個或者多個元素。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset3()
{
System.out.println(redisTemplate.opsForZSet().add("zset3", "pan_junbiao的博客_01", 1.0));
System.out.println(redisTemplate.opsForZSet().add("zset3", "pan_junbiao的博客_02", 1.0));
System.out.println(redisTemplate.opsForZSet().range("zset3", 0, -1));
System.out.println(redisTemplate.opsForZSet().remove("zset3", "pan_junbiao的博客_02"));
System.out.println(redisTemplate.opsForZSet().range("zset3", 0, -1));
}執行結果:

返回有序集中指定成員的排名,其中有序集成員按分數值遞增(從小到大)順序排列。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset4()
{
System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_01",9.6));
System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_02",1.5));
System.out.println(redisTemplate.opsForZSet().add("zset4", "pan_junbiao的博客_03",7.4));
System.out.println(redisTemplate.opsForZSet().range("zset4", 0, -1));
System.out.println(redisTemplate.opsForZSet().rank("zset4", "pan_junbiao的博客_02"));
}執行結果:

注意:結果中的0表示第一(最?。?。
range方法:通過索引區間返回有序集合成指定區間內的成員,其中有序集成員按分數值遞增(從小到大)順序排列。
rangeByScore方法:通過分數區間返回有序集合成指定區間內的成員,其中有序集成員按分數值遞增(從小到大)順序排列。
具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset5()
{
ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
typles.add(objectTypedTuple1);
typles.add(objectTypedTuple2);
typles.add(objectTypedTuple3);
System.out.println(redisTemplate.opsForZSet().add("zset5",typles));
System.out.println(redisTemplate.opsForZSet().range("zset5",0,-1));
System.out.println(redisTemplate.opsForZSet().rangeByScore("zset5", 0, 8));
}執行結果:

count方法:通過分數返回有序集合指定區間內的成員個數。
size方法:獲取有序集合的成員數。
具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset6()
{
ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
Set<ZSetOperations.TypedTuple<String>> typles = new HashSet<ZSetOperations.TypedTuple<String>>();
typles.add(objectTypedTuple1);
typles.add(objectTypedTuple2);
typles.add(objectTypedTuple3);
redisTemplate.opsForZSet().add("zset6", typles);
System.out.println("分數在0至8區間內的成員個數:" + redisTemplate.opsForZSet().count("zset6", 0, 8));
System.out.println("有序集合的成員數:" + redisTemplate.opsForZSet().size("zset6"));
}執行結果:

獲取指定成員的score值。具體用法見以下代碼:
@Test
public void Zset7()
{
redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_01", 9.6);
redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_02", 1.5);
redisTemplate.opsForZSet().add("zset7", "pan_junbiao的博客_03", 7.4);
System.out.println("pan_junbiao的博客_01的分數:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_01"));
System.out.println("pan_junbiao的博客_02的分數:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_02"));
System.out.println("pan_junbiao的博客_03的分數:" + redisTemplate.opsForZSet().score("zset7", "pan_junbiao的博客_03"));
}執行結果:

移除指定索引位置的成員,有序集合成員按照分數值遞增(從小到大)順序排列。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset8()
{
ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
Set<ZSetOperations.TypedTuple<String>> tuples = new HashSet<ZSetOperations.TypedTuple<String>>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
tuples.add(objectTypedTuple3);
System.out.println(redisTemplate.opsForZSet().add("zset8", tuples));
System.out.println(redisTemplate.opsForZSet().range("zset8", 0, -1));
System.out.println(redisTemplate.opsForZSet().removeRange("zset8", 1, 5));
System.out.println(redisTemplate.opsForZSet().range("zset8", 0, -1));
}執行結果:

遍歷 zset。具體用法見以下代碼:
@Autowired
private RedisTemplate redisTemplate;
@Test
public void Zset9()
{
ZSetOperations.TypedTuple<String> objectTypedTuple1 = new DefaultTypedTuple<>("pan_junbiao的博客_01",9.6);
ZSetOperations.TypedTuple<String> objectTypedTuple2 = new DefaultTypedTuple<>("pan_junbiao的博客_02",1.5);
ZSetOperations.TypedTuple<String> objectTypedTuple3 = new DefaultTypedTuple<>("pan_junbiao的博客_03",7.4);
Set<ZSetOperations.TypedTuple<String>> tuples = new HashSet<ZSetOperations.TypedTuple<String>>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
tuples.add(objectTypedTuple3);
System.out.println(redisTemplate.opsForZSet().add("zset9", tuples));
Cursor<ZSetOperations.TypedTuple<Object>> cursor = redisTemplate.opsForZSet().scan("zset9", ScanOptions.NONE);
while (cursor.hasNext())
{
ZSetOperations.TypedTuple<Object> item = cursor.next();
System.out.println(item.getValue() + " 的分數值:" + item.getScore());
}
}執行結果:

感謝各位的閱讀,以上就是“SpringBoot怎么使用RedisTemplate操作Redis數據類型”的內容了,經過本文的學習后,相信大家對SpringBoot怎么使用RedisTemplate操作Redis數據類型這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。