一、安装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 + '\'' + '}'; } }