赞
踩
我也是在看了众多博文,慢慢尝试中才算成功
一.(1)聊聊RedisTemplate的自动配置
其实现在就可以在代码中注入RedisTemplate,为啥可以直接注入呢?先看下源码吧。下图为 RedisAutoConfiguration类中的截图,为了防止图片失效,代码也贴上 。
通过源码可以看出,SpringBoot自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。但是,这个RedisTemplate的泛型是<Object,Object>,写代码不方便,需要写好多类型转换的代码;我们需要一个泛型为<String,Object>形式的RedisTemplate。并且,这个RedisTemplate没有设置数据存在Redis时,key及value的序列化方式。
看到这个@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate对象了,这个自动配置的RedisTemplate不会实例化。因此我们可以直接自己写个配置类,配置RedisTemplate。
二、导入依赖
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
-
- <!--Redis-->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
三、application.properties配置redis
-
- spring.redis.database=0
-
- spring.redis.host=localhost
-
- spring.redis.port=6379
-
- spring.redis.password=
-
- spring.redis.timeout=0
四、json转换工具
-
-
- import java.util.List;
-
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.JavaType;
- import com.fasterxml.jackson.databind.ObjectMapper;
-
- /**
- *
- * @Title: JsonUtils.java
- * @Package com.lee.utils
- * @Description: 自定义响应结构, 转换类
- *
- * @author liqiang
- * @date 2019-8-26 21:01
- */
- public class JsonUtils {
-
- // 定义jackson对象
- private static final ObjectMapper MAPPER = new ObjectMapper();
-
- /**
- * 将对象转换成json字符串。
- * <p>Title: pojoToJson</p>
- * <p>Description: </p>
- * @param data
- * @return
- */
- public static String objectToJson(Object data) {
- try {
- String string = MAPPER.writeValueAsString(data);
- System.out.println("user:"+string);
- return string;
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
- return null;
- }
-
- /**
- * 将json结果集转化为对象
- *
- * @param jsonData json数据
- * @param clazz 对象中的object类型
- * @return
- */
- public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
- try {
- T t = MAPPER.readValue(jsonData, beanType);
- return t;
- } catch (Exception e) {
- e.printStackTrace();
- }
- return null;
- }
-
- /**
- * 将json数据转换成pojo对象list
- * <p>Title: jsonToList</p>
- * <p>Description: </p>
- * @param jsonData
- * @param beanType
- * @return
- */
- public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
- JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
- try {
- List<T> list = MAPPER.readValue(jsonData, javaType);
- return list;
- } catch (Exception e) {
- e.printStackTrace();
- }
-
- return null;
- }
-
- }
五、以key-value存取,中文不乱码。将值转换为json格式再进行存取,取值时需要将json格式的数据转换为要取得类型。
- package com.liqiang.demo.redis;
-
- import org.junit.Before;
- 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.core.StringRedisTemplate;
- import org.springframework.test.context.junit4.SpringRunner;
-
- import com.liqiang.demo.entity.User;
- import com.liqiang.demo.util.JsonUtils;
- /*
- * @Author: liqiang
- * @Date: 2019-8-26 21:00
- * @description:redis测试类,测试redis操作对象与字符串
- * */
- @RunWith(SpringRunner.class)
- @SpringBootTest
- public class RedisConfigTest {
-
- @Autowired
- private StringRedisTemplate stringTemplate;
- private User d;
-
- @Test
- public void testSet(){
- d = new User();
- d.setUsername("li");
- d.setAge(18);
- stringTemplate.opsForValue().set("user", JsonUtils.objectToJson(d));
-
- System.out.println("hello:"+stringTemplate.opsForValue().get("a"));
- User user = JsonUtils.jsonToPojo(stringTemplate.opsForValue().get("user"),User.class);
- System.out.println("username:"+user.getUsername());
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。