一、安装redis
在centos机器上安装redis
参考:https://www.jianshu.com/p/aec247ffbe51
二、搭建springboot+redis项目
1.添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.datatype/jackson-datatype-jsr310 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.9.4</version>
</dependency>
2.自定义redisTemplate
/**
* Author: hezishan
* Date: 2018/5/11.
* Description: redis配置类
**/
@Configuration
public class RedisConfig {
/**
* redisTemplate 序列化使用的jdkSerializeable, 存储二进制字节码, 所以自定义序列化类
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 使用Jackson2JsonRedisSerialize 替换默认序列化
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
// 设置value的序列化规则和 key的序列化规则
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setDefaultSerializer(jackson2JsonRedisSerializer);
redisTemplate.setEnableDefaultSerializer(true);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
3.编写测试类,在这里set的时候是把user.tostring()内容写入,之前看其博客写 user,会出现错误:Could not read JSON: Cannot construct instance of `com.tnaot.newsrecommend.User` (no Creators, like default construct, exist),通过redis-cli get key 发现其放进去的类并不是json格式,所以转的时候肯定出错
@RunWith(SpringRunner.class)
@SpringBootTest
public class NewsrecommendApplicationTests {
@Autowired
private RedisTemplate<Object, Object> template;
@Test
public void contextLoads() {
User user = new User(1,"象拔蚌");
template.opsForValue().set(user.getId()+"",user.toString());
//原本opsForValue()是只能操作字符串的.现在就可以操作对象了
String result =(String) template.opsForValue().get(user.getId()+"");
System.out.println(result.toString());
}
}
4.实体类,注意需要重新实体类的tostring方法,改为json格式
/**
* Author: hezishan
* Date: 2018/5/11.
* Description:
**/
public class User implements Serializable {
int id;
String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "User:{" +
"id:" + id +
", name:'" + name + '\'' +
'}';
}
}
调用:
@RunWith(SpringRunner.class)
@SpringBootTest
public class NewsrecommendApplicationTests {
@Autowired
private RedisTemplate<Object, Object> template;
@Test
public void contextLoads() {
User user = new User(1,"象拔蚌");
template.opsForValue().set(user.getId()+"",user.toString());
//原本opsForValue()是只能操作字符串的.现在就可以操作对象了
String result =(String) template.opsForValue().get(user.getId()+"");
System.out.println(result.toString());
}
}