SpringBoot-StringRedisTemplate
案例項目結構
需要的Maven
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
</parent>
<dependencies>
<!--StringRedisTemplate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency>
</dependencies>
application.yml
spring:
application:
name: test_redis
redis:
port: 6379
host: 81.70.77.136
database: 0
jedis:
pool:
max-idle: 20 # 最大空閑數
min-idle: 1 # 最小空閑數
max-wait: 20000ms # 最大等待毫秒數, 機關為 ms -1不逾時 設定 20000ms
max-active: 5 #最大連接配接資料庫連接配接數,設 0 為沒有限制 一般把maxActive設定成可能的并發量就行了
timeout: 600 # 連接配接逾時時間 (毫秒)
StringRedisTemplateApp(啟動類)
package cn.redis;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author HuAnmin
* @version 1.0
* @email 342615[email protected]
* @date 2021/4/12-14:45
* @description 類描述....
*/
@SpringBootApplication
public class StringRedisTemplateApp {
public static void main(String[] args) {
SpringApplication.run( StringRedisTemplateApp.class,args);
}
}
StringRedisTemplateAppTest (測試)
無須其他配置直接引用就行
@Resource
private StringRedisTemplate stringRedisTemplate;
package cn.redis;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.test.context.junit4.SpringRunner;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
/**
* @author HuAnmin
* @version 1.0
* @email 342615[email protected]
* @date 2021/4/12-14:50
* @description 類描述....
*/
@SpringBootTest
@RunWith(SpringRunner.class)
public class StringRedisTemplateAppTest {
@Resource
private StringRedisTemplate stringRedisTemplate;
//操作字元串
@Test
public void opsForValue() {
stringRedisTemplate.opsForValue().set("蜀國創始人", "劉備"); //設定值
String name = stringRedisTemplate.opsForValue().get("蜀國創始人");//取出值
System.out.println(name);
}
//操作hash
@Test
public void Hash() {
Map<String, String> map = new HashMap<>();
map.put("軍師", "諸葛亮");
map.put("猛将1", "趙子龍");
//設定
stringRedisTemplate.opsForHash().putAll("蜀國", map);
Set<Object> keys = stringRedisTemplate.opsForHash().keys("蜀國");
//擷取蜀國内的全部人物
List<Object> values = stringRedisTemplate.opsForHash().values("蜀國");
System.out.println(values);
//擷取蜀國内的指定人物
Object value = stringRedisTemplate.opsForHash().get("蜀國", "軍師");
System.out.println(value.toString());
}
//操作list (隊列 允許重複的值)
@Test
public void List() {
// 左側寫入
stringRedisTemplate.opsForList().leftPush("key", "value");
stringRedisTemplate.opsForList().leftPush("key", "value1");
// 擷取隊列大小
long queueSize = stringRedisTemplate.opsForList().size("key");
System.out.println("隊列大小" + queueSize);
// 從右側取元素 (也就是插入 1234 那麼取出來也是1234)
String str = stringRedisTemplate.opsForList().rightPop("key");
System.out.println(str);
// 從左側取元素 (也就是插入 1234 那麼取出來是 4321)
String str1 = stringRedisTemplate.opsForList().leftPop("key");
System.out.println(str1);
// 擷取隊列大小
long queueSize1 = stringRedisTemplate.opsForList().size("key");
System.out.println("隊列大小" + queueSize1);
}
//操作set (不能重複)
@Test
public void Set() {
// 添加元素
stringRedisTemplate.opsForSet().add("word_cloud","劉德華");
stringRedisTemplate.opsForSet().add("word_cloud","劉德華");
// 擷取set集合
Set<String> set = stringRedisTemplate.opsForSet().members("word_cloud");
System.out.println(set);
//根據key檢視集合中是否存在指定資料
Boolean red = stringRedisTemplate.opsForSet().isMember("word_cloud", "劉德華");
System.out.println(red);
}
//做 val+操作 必須保證值是數值類型
@Test
public void increment(){
stringRedisTemplate.opsForValue().set("id", "0"); //設定值
Long id = stringRedisTemplate.boundValueOps("id").increment(-1);//val做-1操作
System.out.println(id); //-1
Long id1 = stringRedisTemplate.boundValueOps("id").increment(2);//val做+2操作
System.out.println(id1); //1
String val= stringRedisTemplate.opsForValue().get("id");//取出值
System.out.println(val); //1
}
//根據key删除緩存 删除失敗傳回false 成功傳回true
@Test
public void del(){
Boolean test = stringRedisTemplate.delete("word_cloud");
System.out.println(test);
}
//設定過期時間 (stringRedisTemplate預設永不過期) SECONDS秒 MINUTES 分 HOURS時 DAYS天
@Test
public void setTime(){
Boolean test = stringRedisTemplate.expire("word_cloud", 120, TimeUnit.SECONDS);
System.out.println(test);
}
// 根據key擷取過期時間并換算成指定機關 -1永不過期 -2以過期或者是不存在此key
@Test
public void time(){
Long test = stringRedisTemplate.getExpire("word_cloud", TimeUnit.SECONDS);
System.out.println(test);
}
}
事物功能
用于增加修改和删除
public void setString(String key, Object object, Long time){
//開啟事務權限
stringRedisTemplate.setEnableTransactionSupport(true);
//開啟事務
stringRedisTemplate.multi();
try {
String value = (String) object;
stringRedisTemplate.opsForValue().set(key, value);
} catch (Exception e) {
//事務復原
stringRedisTemplate.discard();
} finally {
//送出事務
stringRedisTemplate.exec();
}
}
點贊 -收藏-關注-便于以後複習和收到最新内容 有其他問題在評論區讨論-或者私信我-收到會在第一時間回複 如有侵權,請私信聯系我 感謝,配合,希望我的努力對你有幫助^_^