spring boot整合redis實(shí)現(xiàn)RedisTemplate三分鐘快速入門
引入依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
RedisTemplate五種數(shù)據(jù)結(jié)構(gòu)的操作
- redisTemplate.opsForValue(); //操作字符串
- redisTemplate.opsForHash(); //操作hash
- redisTemplate.opsForList(); //操作list
- redisTemplate.opsForSet(); //操作set
- redisTemplate.opsForZSet(); //操作有序zset
RedisTemplate方法講解
判斷key是否存在
/**
* 判斷key是否存在
*/
@GetMapping("haskey")
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
獲取指定的key的失效時(shí)間
/**
* 指定key的失效時(shí)間
*/
@GetMapping("expire")
public void expire(String key, long time) {
//參數(shù)一:key
//參數(shù)二:睡眠時(shí)間
//參數(shù)三:睡眠時(shí)間單位 TimeUnit.DAYS 天 TimeUnit.HOURS 小時(shí) 。。。
redisTemplate.expire(key, time, TimeUnit.MINUTES);
}
根據(jù)key獲取過期時(shí)間
/**
* 根據(jù)key獲取過期時(shí)間
*/
@GetMapping("getexpire")
public long getExpire(String key) {
Long expire = redisTemplate.getExpire(key);
return expire;
}
根據(jù)key刪除reids中緩存數(shù)據(jù)
/**
* 根據(jù)key刪除reids中緩存數(shù)據(jù)
*/
@GetMapping("delredisbykey")
public void delete(String key) {
redisTemplate.delete(key);
}
保存和讀取String
/**
* 保存和讀取String
*/
@GetMapping("stringredisdemo")
public String stringredisdemo() {
//設(shè)置過期時(shí)間為1分鐘
redisTemplate.opsForValue().set("key1", "value1", 1, TimeUnit.MINUTES);
redisTemplate.opsForValue().set("key2", "value2");
redisTemplate.opsForValue().set("key3", "value3");
//讀取redis數(shù)據(jù)
String result1 = redisTemplate.opsForValue().get("key1").toString();
String result2 = redisTemplate.opsForValue().get("key2").toString();
String result3 = redisTemplate.opsForValue().get("key3").toString();
System.out.println("緩存結(jié)果為:result:" + result1 + " " + result2 + " " + result3);
return "緩存結(jié)果為:result:" + result1 + " " + result2 + " " + result3;
}
保存和讀取list
/**
* 保存和讀取list
*/
@GetMapping("listredisdemo")
public String listredisdemo() {
List<String> list1 = new ArrayList<>();
list1.add("a1");
list1.add("a2");
list1.add("a3");
List<String> list2 = new ArrayList<>();
list2.add("b1");
list2.add("b2");
list2.add("b3");
redisTemplate.opsForList().leftPush("listkey1", list1);
redisTemplate.opsForList().rightPush("listkey2", list2);
List<String> resultList1 = (List<String>) redisTemplate.opsForList().leftPop("listkey1");
List<String> resultList2 = (List<String>) redisTemplate.opsForList().rightPop("listkey2");
System.out.println("resultList1:" + resultList1);
System.out.println("resultList2:" + resultList2);
return "成功";
}
Hash結(jié)構(gòu),保存和讀取map
/**
* Hash結(jié)構(gòu),保存和讀取map
*/
@GetMapping("mapredisdemo")
public String mapredisdemo() {
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
map.put("key5", "value5");
redisTemplate.opsForHash().putAll("map1", map);
Map<String, String> resultMap = redisTemplate.opsForHash().entries("map1");
List<String> reslutMapList = redisTemplate.opsForHash().values("map1");
Set<String> resultMapSet = redisTemplate.opsForHash().keys("map1");
String value = (String) redisTemplate.opsForHash().get("map1", "key1");
System.out.println("value:" + value);
System.out.println("resultMapSet:" + resultMapSet);
System.out.println("resultMap:" + resultMap);
System.out.println("resulreslutMapListtMap:" + reslutMapList);
return "成功";
}
保存和讀取Set
/**
* 保存和讀取Set
*/
@GetMapping("setredisdemo")
public String getredisdemo() {
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add("key1", "value1");
set.add("key1", "value2");
set.add("key1", "value3");
Set<String> resultSet = redisTemplate.opsForSet().members("key1");
System.out.println("resultSet:" + resultSet);
return "resultSet:" + resultSet;
}
保存和讀取zset
/**
* 保存和讀取zset
*/
@GetMapping("zsetredisdemo")
public String zsetredisdemo() {
ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("zset-5", 9.6);
ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("zset-6", 9.9);
Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
System.out.println(redisTemplate.opsForZSet().add("zset1", tuples));
System.out.println(redisTemplate.opsForZSet().range("zset1", 0, -1));
return "成功";
}
完整示例代碼
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.DefaultTypedTuple;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.SetOperations;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.*;
import java.util.concurrent.TimeUnit;
@RestController
public class ReidsDemo {
@Autowired
RedisTemplate redisTemplate;
/**
* 指定key的失效時(shí)間
*/
@GetMapping("expire")
public void expire(String key, long time) {
//參數(shù)一:key
//參數(shù)二:睡眠時(shí)間
//參數(shù)三:睡眠時(shí)間單位 TimeUnit.DAYS 天 TimeUnit.HOURS 小時(shí) 。。。
redisTemplate.expire(key, time, TimeUnit.MINUTES);
}
/**
* 根據(jù)key獲取過期時(shí)間
*/
@GetMapping("getexpire")
public long getExpire(String key) {
Long expire = redisTemplate.getExpire(key);
return expire;
}
/**
* 判斷key是否存在
*/
@GetMapping("haskey")
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
/**
* 根據(jù)key刪除reids中緩存數(shù)據(jù)
*/
@GetMapping("delredisbykey")
public void delete(String key) {
redisTemplate.delete(key);
}
/**
* 保存和讀取String
*/
@GetMapping("stringredisdemo")
public String stringredisdemo() {
//設(shè)置過期時(shí)間為1分鐘
redisTemplate.opsForValue().set("key1", "value1", 1, TimeUnit.MINUTES);
redisTemplate.opsForValue().set("key2", "value2");
redisTemplate.opsForValue().set("key3", "value3");
//讀取redis數(shù)據(jù)
String result1 = redisTemplate.opsForValue().get("key1").toString();
String result2 = redisTemplate.opsForValue().get("key2").toString();
String result3 = redisTemplate.opsForValue().get("key3").toString();
System.out.println("緩存結(jié)果為:result:" + result1 + " " + result2 + " " + result3);
return "緩存結(jié)果為:result:" + result1 + " " + result2 + " " + result3;
}
/**
* 保存和讀取list
*/
@GetMapping("listredisdemo")
public String listredisdemo() {
List<String> list1 = new ArrayList<>();
list1.add("a1");
list1.add("a2");
list1.add("a3");
List<String> list2 = new ArrayList<>();
list2.add("b1");
list2.add("b2");
list2.add("b3");
redisTemplate.opsForList().leftPush("listkey1", list1);
redisTemplate.opsForList().rightPush("listkey2", list2);
List<String> resultList1 = (List<String>) redisTemplate.opsForList().leftPop("listkey1");
List<String> resultList2 = (List<String>) redisTemplate.opsForList().rightPop("listkey2");
System.out.println("resultList1:" + resultList1);
System.out.println("resultList2:" + resultList2);
return "成功";
}
/**
* Hash結(jié)構(gòu),保存和讀取map
*/
@GetMapping("mapredisdemo")
public String mapredisdemo() {
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
redisTemplate.opsForHash().putAll("map1", map);
Map<String, String> resultMap = redisTemplate.opsForHash().entries("map1");
List<String> reslutMapList = redisTemplate.opsForHash().values("map1");
Set<String> resultMapSet = redisTemplate.opsForHash().keys("map1");
String value = (String) redisTemplate.opsForHash().get("map1", "key1");
System.out.println("value:" + value);
System.out.println("resultMapSet:" + resultMapSet);
System.out.println("resultMap:" + resultMap);
System.out.println("resulreslutMapListtMap:" + reslutMapList);
return "成功";
}
/**
* 保存和讀取Set
*/
@GetMapping("setredisdemo")
public String getredisdemo() {
SetOperations<String, String> set = redisTemplate.opsForSet();
set.add("key1", "value1");
set.add("key1", "value2");
set.add("key1", "value3");
Set<String> resultSet = redisTemplate.opsForSet().members("key1");
System.out.println("resultSet:" + resultSet);
return "resultSet:" + resultSet;
}
/**
* 保存和讀取zset
*/
@GetMapping("zsetredisdemo")
public String zsetredisdemo() {
ZSetOperations.TypedTuple<Object> objectTypedTuple1 = new DefaultTypedTuple<>("zset-5", 9.6);
ZSetOperations.TypedTuple<Object> objectTypedTuple2 = new DefaultTypedTuple<>("zset-6", 9.9);
Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
tuples.add(objectTypedTuple1);
tuples.add(objectTypedTuple2);
System.out.println(redisTemplate.opsForZSet().add("zset1", tuples));
System.out.println(redisTemplate.opsForZSet().range("zset1", 0, -1));
return "成功";
}
}
序列化
直接粘貼在項(xiàng)目中即可
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/*
*序列化
*/
@Configuration
public class MyRedisConfig {
@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
//參照StringRedisTemplate內(nèi)部實(shí)現(xiàn)指定序列化器
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(keySerializer());
redisTemplate.setHashKeySerializer(keySerializer());
redisTemplate.setValueSerializer(valueSerializer());
redisTemplate.setHashValueSerializer(valueSerializer());
return redisTemplate;
}
private RedisSerializer<String> keySerializer(){
return new StringRedisSerializer();
}
//使用Jackson序列化器
private RedisSerializer<Object> valueSerializer(){
return new GenericJackson2JsonRedisSerializer();
}
}
到此這篇關(guān)于spring boot整合redis實(shí)現(xiàn)RedisTemplate三分鐘快速入門的文章就介紹到這了,更多相關(guān)springboot RedisTemplate入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文了解MyBatis Plus批量數(shù)據(jù)插入功能
mybatisPlus底層的新增方法是一條一條的新增的,下面這篇文章主要給大家介紹了MyBatis Plus批量數(shù)據(jù)插入功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
Java8新特性之接口中的默認(rèn)方法和靜態(tài)方法詳解
今天帶大家學(xué)習(xí)的是Java8新特性的相關(guān)知識,文章圍繞著Java接口中的默認(rèn)方法和靜態(tài)方法展開,文中有非常詳細(xì)的的代碼示例,需要的朋友可以參考下2021-06-06
Spring注解@EnableWebMvc使用的坑點(diǎn)及解析
這篇文章主要介紹了Spring注解@EnableWebMvc使用的坑點(diǎn)及解析,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Java中SimpleDateFormat方法超詳細(xì)分析
這篇文章主要給大家介紹了關(guān)于Java中SimpleDateFormat方法超詳細(xì)分析的相關(guān)資料,SimpleDateFormat 是一個(gè)以國別敏感的方式格式化和分析數(shù)據(jù)的具體類,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08
詳解如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目
本篇文章主要介紹了如何將已有項(xiàng)目改造為Spring Boot項(xiàng)目,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11
在IntelliJ IDEA中創(chuàng)建和運(yùn)行java/scala/spark程序的方法
這篇文章主要介紹了在IntelliJ IDEA中創(chuàng)建和運(yùn)行java/scala/spark程序的教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
一場由Java中Integer引發(fā)的踩坑實(shí)戰(zhàn)
Java中的數(shù)據(jù)類型分為基本數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型int是前者而integer是后者(也就是一個(gè)類),下面這篇文章主要給大家介紹了關(guān)于由Java中Integer引發(fā)的踩坑實(shí)戰(zhàn),需要的朋友可以參考下2022-11-11
Mybatis之動態(tài)SQL使用小結(jié)(全網(wǎng)最新)
MyBatis令人喜歡的一大特性就是動態(tài)SQL,?在使用JDBC的過程中,?根據(jù)條件進(jìn)行SQL的拼接是很麻煩且很容易出錯(cuò)的,MyBatis通過OGNL來進(jìn)行動態(tài)SQL的使用解決了這個(gè)麻煩,對Mybatis動態(tài)SQL相關(guān)知識感興趣的朋友跟隨小編一起看看吧2024-05-05

