SpringBoot整合Redis
0.一些对象信息
1.添加启动类
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
|
2.配置连接信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| spring.redis.database=1
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.min-idle=0
spring.redis.lettuce.shutdown-timeout=1000
|
3.测试
1 2 3 4 5 6 7 8
| @Autowired private RedisTemplate<String, String> redisTemplate;
@Test public void test() { redisTemplate.opsForValue().set("mykey","myvalue"); System.out.println(redisTemplate.opsForValue().get("mykey")); }
|

4.序列化器
这里先说一下Spring提供了那些序列化器(各自作用自行百度,这里不再赘述)
Jackson2JsonRedisSerializer
JdkSerializationRedisSerializer
OxmSerializer
StringRedisSerializer
GenericToStringRedisSerializer
GenericJackson2JsonRedisSerializer
为什么前面的代码没有设置序列化?
原因是是因为我们使用了@AutoWired,IOC容器为我们选择了StringRedisTemplate类来注入
这里是RedisTemplate的继承关系图

然后我们跟踪源码可以发现StringRedisTemplate.java
1 2 3 4 5 6
| public StringRedisTemplate() { setKeySerializer(RedisSerializer.string()); setValueSerializer(RedisSerializer.string()); setHashKeySerializer(RedisSerializer.string()); setHashValueSerializer(RedisSerializer.string()); }
|
那假如我们把Value的类型改为Object呢
1 2 3 4 5 6 7 8
| @Resource private RedisTemplate<String, Object> redisTemplate;
@Test public void test() { redisTemplate.opsForValue().set("mykey","myvalue"); System.out.println(redisTemplate.opsForValue().get("mykey")); }
|
这里继续使用@AutoWired会报错,需要使用@Resource,这两个注解的区别在前者是根据类型后者
是根据名字,具体区别自行查资料(这里说一下为什么会报错:@AutoWired找不到该类型
<String,Object>的Bean因为根本没有。使用@Resource直接注入的是RedisTemplate)
这是因为没有设置序列化器,RedisTemplate选择了默认的序列化器JdkSerializationRedisSerializer
5.配置序列化器
5.1实体类实现序列化接口
5.2然后在配置类中设置序列化器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
@Configuration public class RedisConfig {
@Bean public RedisTemplate<String, User> redisTemplate(RedisConnectionFactory factory) { RedisTemplate<String, User> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(factory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<User>(User.class)); return redisTemplate; } }
|
5.3测试类
1 2 3 4 5 6 7 8 9
| @Autowired private RedisTemplate<String, User> redisTemplate;
@Test public void test1() { redisTemplate.opsForValue().set("user", User.builder().name("张三").address("上海市").id("1").birthday(new Date()).build()); User user = redisTemplate.opsForValue().get("user"); System.out.println(user); }
|
