SpringBoot 整合redis ,使用配置文件設置參數方式
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.Alan</groupId> <artifactId>SpringBootDataRedis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBootDataRedis</name> <description>SpringBootDataRedis</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!--springboot的啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--thymeleaf 的啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--springboot data redis的啟動器--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--對redis 客戶端的 jedis 包的引入。高版本 已經不是自動引入該包。需要手動在pom文件中增加該包配置信息--> <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.6.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
springboot.redis.pool.max-idle=10 springboot.redis.pool.min-idle=5 springboot.redis.pool.max-totla=20 springboot.redis.hostName=127.0.0.1 springboot.redis.port=6379 springboot.redis.Password=123456
SpringBootDataRedisApplication
package com.alan.SpringBootDataRedis; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringBootDataRedisApplication { public static void main(String[] args) { SpringApplication.run(SpringBootDataRedisApplication.class, args); } }
RedisConfig
package com.alan.SpringBootDataRedis.config; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import redis.clients.jedis.JedisPoolConfig; /* * Todo * 完成對redis 的整合一些配置 * @author: Alan_liu * @date 2021/5/5 21:54 */ @Configuration public class RedisConfig { /*** * 1:創建 JedispoolConfig 對象。在該對象中完成一些連接池配置 * @ConfigurationProperties(prefix = "springboot.redis") * 作用:會將前綴相同的部分內容創建為一個實體對象 * @param * @return {@link JedisPoolConfig} * @throws * @user Alan_liu * @date 2021/5/5 22:18 */ @Bean @ConfigurationProperties(prefix = "springboot.redis.pool") public JedisPoolConfig jedispoolConfig(){ JedisPoolConfig config=new JedisPoolConfig(); //最大空閑數 //最大空閑數 //最大鏈接數 return config; } /*** * 2:創建 JedisConnectionFactory:配置redis鏈接信息 * * @param null * @return {@link } * @throws * @user Alan_liu * @date 2021/5/5 22:18 */ @Bean @ConfigurationProperties(prefix = "springboot.redis") public JedisConnectionFactory jedisConnectionFactory(JedisPoolConfig config){ JedisConnectionFactory factory=new JedisConnectionFactory(); //關聯連接池的配置對象 //配置鏈接redis的信息 return factory; } /*** * 3:創建redisTemplate:用於執行redis操作的方法 * * @param * @return {@link RedisTemplate< String, Object>} * @throws * @user Alan_liu * @date 2021/5/5 22:38 */ @Bean public RedisTemplate<String,Object> redisTemplate( JedisConnectionFactory factory){ RedisTemplate<String ,Object> template=new RedisTemplate<>(); //關聯 template.setConnectionFactory(factory); //為key設置序列號器 template.setKeySerializer(new StringRedisSerializer()); //為value 設置序列號器 template.setValueSerializer(new StringRedisSerializer()); return template; } }
SpringBootDataRedisApplicationTests
package com.alan.SpringBootDataRedis; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class SpringBootDataRedisApplicationTests { @Test void contextLoads() { } }
RedisTest
package com.alan.SpringBootDataRedis; 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.RedisTemplate; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /* * Springboot redis 測試類 * * @author: Alan_liu * @date 2021/5/23 22:01 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes=SpringBootDataRedisApplication.class) public class RedisTest { @Autowired private RedisTemplate<String,Object> redisTemplate; // 添加1個字符 @Test public void testSet(){ this.redisTemplate.opsForValue().set("SpringBootRedisTestKey","AlanLiu"); } //取出一個字符串 @Test public void testGet(){ String value= (String) this.redisTemplate.opsForValue().get("SpringBootRedisTestKey"); System.out.println(value); } }
使用案例
Users
package com.alan.SpringBootDataRedis.pojo; /* * Todo * * @author: Alan_liu * @date 2021/5/25 21:10 */ public class Users { private Integer id; private String name ; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Users{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
RedisTest
package com.alan.SpringBootDataRedis; import com.alan.SpringBootDataRedis.pojo.Users; 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.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.sound.midi.Soundbank; import javax.swing.plaf.PanelUI; /* * Springboot redis 測試類 * * @author: Alan_liu * @date 2021/5/23 22:01 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes=SpringBootDataRedisApplication.class) public class RedisTest { @Autowired private RedisTemplate<String,Object> redisTemplate; // 添加1個字符 @Test public void testSet(){ this.redisTemplate.opsForValue().set("SpringBootRedisTestKey","AlanLiu"); } //取出一個字符串 @Test public void testGet(){ String value= (String) this.redisTemplate.opsForValue().get("SpringBootRedisTestKey"); System.out.println(value); } /** * * 添加一個user 對象 * @param null * @return {@link } * @throws * @user Alan_liu * @date 2021/5/25 21:12 */ @Test public void testSetUsers(){ Users users=new Users(); users.setId(1); users.setName("張三豐"); users.setAge(120); //設置序列化操作 this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); this.redisTemplate.opsForValue().set("users",users); } /*** * * 從rdeis 中卻users 對象 * @param * @return {@link void} * @throws * @user Alan_liu * @date 2021/5/25 21:21 */ @Test public void testGetUsers(){ //重新設置序列化器 this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer()); Users users=(Users) this.redisTemplate.opsForValue().get("users"); System.out.println(users); } /** * 基於Json 格式存儲User對象 * * @param null * @return {@link } * @throws * @user Alan_liu * @date 2021/5/25 21:29 */ @Test public void testSetUsersUseJson(){ Users users=new Users(); users.setId(1); users.setName("張三豐"); users.setAge(120); this.redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<Users>(Users.class)); this.redisTemplate.opsForValue().set("usersJson",users); } /*** * * 基於Json 格式取出User對象 * @param * @return {@link void} * @throws * @user Alan_liu * @date 2021/5/25 21:34 */ @Test public void testGetUsersUseJson(){ this.redisTemplate.setKeySerializer(new Jackson2JsonRedisSerializer<Users>(Users.class)); Users users=(Users) this.redisTemplate.opsForValue().get("usersJson"); System.out.println(users); } }
StringRedisTemplate常用方法:
這里給大家一個鏈接,StringRedisTemplate常用方法都在里面我就不一一列出來了 https://blog.csdn.net/awhip9/article/details/71425041
stringRedisTemplate.opsForValue().set("test", "100",60*10,TimeUnit.SECONDS);//向redis里存入數據和設置緩存時間 stringRedisTemplate.boundValueOps("test").increment(-1);//val做-1操作 stringRedisTemplate.opsForValue().get("test")//根據key獲取緩存中的val stringRedisTemplate.boundValueOps("test").increment(1);//val +1 stringRedisTemplate.getExpire("test")//根據key獲取過期時間 stringRedisTemplate.getExpire("test",TimeUnit.SECONDS)//根據key獲取過期時間並換算成指定單位 stringRedisTemplate.delete("test");//根據key刪除緩存 stringRedisTemplate.hasKey("546545");//檢查key是否存在,返回boolean值 stringRedisTemplate.opsForSet().add("red_123", "1","2","3");//向指定key中存放set集合 stringRedisTemplate.expire("red_123",1000 , TimeUnit.MILLISECONDS);//設置過期時間 stringRedisTemplate.opsForSet().isMember("red_123", "1")//根據key查看集合中是否存在指定數據 stringRedisTemplate.opsForSet().members("red_123");//根據key獲取set集合
RedisTemplate常用方法
RedisTemplate中定義了對5種數據結構操作
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet();//操作有序set