springboot中操作redis的步驟到完全實(shí)踐
springboot中操作redis的步驟
環(huán)境搭建
1,在pom.xml文件中導(dǎo)入SpringbootDataReedis的maven坐標(biāo)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>2,配置redis數(shù)據(jù)源
在aoolication.yml文件中添加如下代碼:
spring: redis: host: localhost port: 6379 password: 123456 database: 10
解釋說明:
database:指定使用Redis的哪個(gè)數(shù)據(jù)庫,Redis服務(wù)啟動(dòng)后默認(rèn)有16個(gè)數(shù)據(jù)庫,編號分別是從0到15。
可以通過修改Redis配置文件來指定數(shù)據(jù)庫的數(shù)量。
3,編寫配置類,創(chuàng)建RedisTemplate對象、
@Configuration
@Slf4j
public class RedisConfiguration {
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory){
log.info("開始創(chuàng)建redis模板對象...");
RedisTemplate redisTemplate = new RedisTemplate();
//設(shè)置redis的連接工廠對象
redisTemplate.setConnectionFactory(redisConnectionFactory);
//設(shè)置redis key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
return redisTemplate;
}
}解釋說明:
當(dāng)前配置類不是必須的,因?yàn)?Spring Boot 框架會自動(dòng)裝配 RedisTemplate 對象,但是默認(rèn)的key序列化器為
JdkSerializationRedisSerializer,導(dǎo)致我們存到Redis中后的數(shù)據(jù)和原始數(shù)據(jù)有差別,故設(shè)置為
StringRedisSerializer序列化器。
4,通過
RedisTemplate對象操作Redis.可以在test下新建測試類
@SpringBootTest
public class SpringDataRedisTest {
@Autowired
private RedisTemplate redisTemplate;
@Test
public void testRedisTemplate(){
System.out.println(redisTemplate);
//string數(shù)據(jù)操作
ValueOperations valueOperations = redisTemplate.opsForValue();
//hash類型的數(shù)據(jù)操作
HashOperations hashOperations = redisTemplate.opsForHash();
//list類型的數(shù)據(jù)操作
ListOperations listOperations = redisTemplate.opsForList();
//set類型數(shù)據(jù)操作
SetOperations setOperations = redisTemplate.opsForSet();
//zset類型數(shù)據(jù)操作
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
}
}運(yùn)行測試類:

說明RedisTemplate對象注入成功,并且通過該RedisTemplate對象獲取操作5種數(shù)據(jù)類型相關(guān)對象。
上述環(huán)境搭建完畢后,接下來,我們就來具體對常見5種數(shù)據(jù)類型進(jìn)行操作。
@Autowired
private RedisTemplate redisTemplate;
/*
* 測試String類型數(shù)據(jù)
* */
@Test
public void testString(){
//string類型的數(shù)據(jù)操作方法,對應(yīng)的Redis操作命令為set和get
//set,get,setex,setnx
redisTemplate.opsForValue().set("test","123");
redisTemplate.opsForValue().get("test");
//setex方法 設(shè)置過期時(shí)間,單位為秒
redisTemplate.opsForValue().set("test","123",5, TimeUnit.SECONDS);
//setIfAbsent,只有在鍵不存在時(shí)才設(shè)置值,返回true表示成功設(shè)置了值,false表示沒有設(shè)置
redisTemplate.opsForValue().setIfAbsent("test1","123");
redisTemplate.opsForValue().setIfAbsent("test1",2);
}
/**
* 操作哈希類型的數(shù)據(jù)
*/
@Test
public void testHash(){
//hset hget hdel hkeys hvals
HashOperations hashOperations = redisTemplate.opsForHash();
hashOperations.put("100","name","tom");
hashOperations.put("100","age","20");
String name = (String) hashOperations.get("100", "name");
System.out.println(name);
Set keys = hashOperations.keys("100");
System.out.println(keys);
List values = hashOperations.values("100");
System.out.println(values);
hashOperations.delete("100","age");
}
/**
* 操作列表類型的數(shù)據(jù)
*/
@Test
public void testList(){
//lpush lrange rpop llen
ListOperations listOperations = redisTemplate.opsForList();
//lpush命令向列表左側(cè)插入元素,rpush命令向列表右側(cè)插入元素
listOperations.leftPushAll("mylist","a","b","c");
listOperations.leftPush("mylist","d");
//lrange命令獲取列表中指定區(qū)間的元素,0表示第一個(gè)元素,-1表示最后一個(gè)元素
List mylist = listOperations.range("mylist", 0, -1);
System.out.println(mylist);
//rpop命令從列表右側(cè)彈出元素
listOperations.rightPop("mylist");
//llen命令獲取列表的長度
Long size = listOperations.size("mylist");
System.out.println(size);
}
/**
* 操作集合類型的數(shù)據(jù)
*/
@Test
public void testSet(){
//sadd smembers scard sinter sunion srem
SetOperations setOperations = redisTemplate.opsForSet();
//sadd命令向集合中添加元素,smember命令獲取集合中的所有元素
setOperations.add("set1","a","b","c","d");
setOperations.add("set2","a","b","x","y");
Set members = setOperations.members("set1");
System.out.println(members);
//scard命令獲取集合中元素的數(shù)量
Long size = setOperations.size("set1");
System.out.println(size);
// sinter命令獲取兩個(gè)集合的交集,sunion命令獲取兩個(gè)集合的并集
Set intersect = setOperations.intersect("set1", "set2");
System.out.println(intersect);
// sunion命令獲取兩個(gè)集合的并集
Set union = setOperations.union("set1", "set2");
System.out.println(union);
// srem 命令從 集合中移除指定的元素。
setOperations.remove("set1","a","b");
}
/**
* 操作有序集合類型的數(shù)據(jù)
*/
@Test
public void testZset(){
//zadd zrange zincrby zrem
ZSetOperations zSetOperations = redisTemplate.opsForZSet();
//zadd 命令像有序集合中添加元素,
zSetOperations.add("zset1","a",10);
zSetOperations.add("zset1","b",12);
zSetOperations.add("zset1","c",9);
//zrange命令獲取有序集合中指定區(qū)間的元素,0表示第一個(gè)元素,-1表示最后一個(gè)元素
zSetOperations.range("zset1",0,-1);
Set zset1 = zSetOperations.range("zset1", 0, -1);
System.out.println(zset1);
// zincrby命令為有序集合中的元素增加指定的分?jǐn)?shù)值,并返回增加后的分?jǐn)?shù)值
zSetOperations.incrementScore("zset1","c",10);
//zrem命令從有序集合中移除指定的元素
zSetOperations.remove("zset1","a","b");
}
/**
* 通用命令操作
*/
@Test
public void testCommon(){
//keys exists type del
//keys命令獲取所有鍵,exists命令判斷指定的鍵是否存在,type命令獲取指定鍵的數(shù)據(jù)類型,del命令刪除指定的鍵
Set keys = redisTemplate.keys("*");
System.out.println(keys);
Boolean name = redisTemplate.hasKey("name");
Boolean set1 = redisTemplate.hasKey("set1");
for (Object key : keys) {
DataType type = redisTemplate.type(key);
System.out.println(type.name());
}
redisTemplate.delete("mylist");
}批注:測試之前啟動(dòng)redis,本地啟動(dòng)名命令:按Win + R鍵,輸入cmd,然后按回車鍵。啟動(dòng)Redis服務(wù)器:輸入以下命令來啟動(dòng)Redis服務(wù)器:redis-server。啟動(dòng)Redis客戶端:在另一個(gè)命令提示符窗口中輸入以下命令來啟動(dòng)Redis客戶端:redis-cli
實(shí)在不行就去redis安裝目錄中找圖片中的一項(xiàng)雙擊運(yùn)行。

到此這篇關(guān)于SpringBoot 常用跨域處理方案的文章就介紹到這了,更多相關(guān)SpringBoot 跨域處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot使用@Scheduled定時(shí)器的示例詳解
SpringBoot的@Scheduled注解用于配置定時(shí)任務(wù),需啟用@EnableScheduling,支持fixedRate、fixedDelay、cron等參數(shù),控制執(zhí)行頻率、延遲及周期,支持線程池和異常處理配置,默認(rèn)單線程串行執(zhí)行,本文介紹SpringBoot使用@Scheduled定時(shí)器的操作示例,感興趣的朋友一起看看吧2025-07-07
Springboot+rabbitmq實(shí)現(xiàn)延時(shí)隊(duì)列的兩種方式
這篇文章主要介紹了Springboot+rabbitmq實(shí)現(xiàn)延時(shí)隊(duì)列的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05
IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析
這篇文章主要介紹了IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
springboot?log4j2.xml如何讀取application.yml中屬性值
這篇文章主要介紹了springboot?log4j2.xml如何讀取application.yml中屬性值問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
mybatis-plus讀取JSON類型的方法實(shí)現(xiàn)
這篇文章主要介紹了mybatis-plus讀取JSON類型的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
SpringBoot使用自定義注解實(shí)現(xiàn)權(quán)限攔截的示例
本篇文章主要介紹了SpringBoot使用自定義注解實(shí)現(xiàn)權(quán)限攔截的示例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09
關(guān)于maven項(xiàng)目中使用BCrypt加密方式
BCrypt是一種基于Blowfish加密算法的密碼散列函數(shù),用于安全存儲和驗(yàn)證用戶密碼,它通過引入鹽和工作因子增加計(jì)算復(fù)雜度,有效防止彩虹表攻擊和破解,BCrypt具備適應(yīng)性工作因子、成本參數(shù)調(diào)整、迭代哈希和密鑰擴(kuò)展等特點(diǎn),被廣泛應(yīng)用于Web應(yīng)用程序的安全性設(shè)計(jì)中2024-10-10

