Option 1: Spring Data Redis creation project
Create the project and introduce Redis dependencies:
Created successfully Finally, you need to manually introduce the dependency of commos-pool2, so the final complete pom.xml dependency is as follows:
<dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-data-redis</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> </dependencies> <dependency> <groupid>org.apache.commons</groupid> <artifactid>commons-pool2</artifactid> </dependency>
The main purpose here is to introduce the Spring Data Redis connection pool.
Configuring Redis information
Next, configure the Redis information. The information includes two aspects, one is the basic information of Redis, and the other is the connection pool information:
spring.redis.database=0 spring.redis.password=123 spring.redis.port=6379 spring.redis.host=192.168.66.128 spring.redis.lettuce.pool.min-idle=5 spring.redis.lettuce.pool.max-idle=10 spring.redis.lettuce.pool.max-active=8 spring.redis.lettuce.pool.max-wait=1ms spring.redis.lettuce.shutdown-timeout=100ms
Automatic configuration
When the developer introduces Spring Data Redis into the project and configures the basic information of Redis, automatic configuration will take effect.
We can see the clues from the automated configuration class of Redis in Spring Boot:
@Configuration @ConditionalOnClass(RedisOperations.class) @EnableConfigurationProperties(RedisProperties.class) @Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class }) public class RedisAutoConfiguration { @Bean @ConditionalOnMissingBean(name = "redisTemplate") public RedisTemplate<object> redisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate<object> template = new RedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } @Bean @ConditionalOnMissingBean public StringRedisTemplate stringRedisTemplate( RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { StringRedisTemplate template = new StringRedisTemplate(); template.setConnectionFactory(redisConnectionFactory); return template; } }</object></object>
This automated configuration class is easy to understand:
First mark this as a configuration class, and the configuration will only take effect when RedisOperations exists (that is, Spring Data Redis is introduced in the project)
Then import and configure in application.properties Properties
Then import the connection pool information (if it exists)
Finally, two beans are provided, RedisTemplate and StringRedisTemplate, where StringRedisTemplate is a subclass of RedisTemplate. The two methods are basically the same. The difference is mainly reflected in the different data types of operations. The two generics in RedisTemplate are both Object, which means that the stored key and value can be an object. The two generics of StringRedisTemplate are both String, which means that the key and value of StringRedisTemplate can only be strings. These two configurations will only take effect if the developer does not provide related beans. If the relevant Bean is provided, it will not take effect.
Use
Next, you can directly inject StringRedisTemplate or RedisTemplate into the Service to use:
@Service public class HelloService { @Autowired RedisTemplate redisTemplate; public void hello() { ValueOperations ops = redisTemplate.opsForValue(); ops.set("k1", "v1"); Object k1 = ops.get("k1"); System.out.println(k1); } }
In Redis Data operations, generally speaking, can be divided into two types:
Operations for key, the relevant methods are in RedisTemplate
For For specific data type operations, the relevant methods need to first obtain the corresponding data type. The operation method to obtain the corresponding data type is opsForXXX
. Call this method to store the data in Redis. As follows:
k1 The previous characters are caused by the use of RedisTemplate, which is the result of serializing the key.
In RedisTemplate, the default serialization scheme for key is JdkSerializationRedisSerializer.
In StringRedisTemplate, the default serialization scheme for key is StringRedisSerializer. Therefore, if you use StringRedisTemplate, there will be no prefix in front of key by default.
However, developers can also modify the serialization scheme in RedisTemplate by themselves, as follows:
@Service public class HelloService { @Autowired RedisTemplate redisTemplate; public void hello() { redisTemplate.setKeySerializer(new StringRedisSerializer()); ValueOperations ops = redisTemplate.opsForValue(); ops.set("k1", "v1"); Object k1 = ops.get("k1"); System.out.println(k1); } }
Of course, you can also use StringRedisTemplate directly:
@Service public class HelloService { @Autowired StringRedisTemplate stringRedisTemplate; public void hello2() { ValueOperations ops = stringRedisTemplate.opsForValue(); ops.set("k2", "v2"); Object k1 = ops.get("k2"); System.out.println(k1); } }
In addition, it should be noted that Spring Boot For automated configuration, you can only configure Redis on a single machine. If it is a Redis cluster, everything needs to be configured manually. Regarding how to operate the Redis cluster, Brother Song will share with you later.
Option 2: Spring Cache
Operate Redis through Spring Cache. Spring Cache unifies the cache world. This kind of solution has been used by Brother Song before. A special article is introduced, friends can move here: In Spring Boot, Redis cache can still be used in this way! .
Option 3: Return to the original era
The third option is to directly use Jedis or other client tools to operate Redis. This option is available in Spring Boot It is also supported. Although it is troublesome to operate, it is supported
The above is the detailed content of How to operate Redis in SpringBoot. For more information, please follow other related articles on the PHP Chinese website!