当前位置:   article > 正文

springboot整合redis存储对象、字符串_springboot的redis可以直接放字符串吗

springboot的redis可以直接放字符串吗

我也是在看了众多博文,慢慢尝试中才算成功

一.(1)聊聊RedisTemplate的自动配置

        其实现在就可以在代码中注入RedisTemplate,为啥可以直接注入呢?先看下源码吧。下图为 RedisAutoConfiguration类中的截图,为了防止图片失效,代码也贴上 。

通过源码可以看出,SpringBoot自动帮我们在容器中生成了一个RedisTemplate和一个StringRedisTemplate。但是,这个RedisTemplate的泛型是<Object,Object>,写代码不方便,需要写好多类型转换的代码;我们需要一个泛型为<String,Object>形式的RedisTemplate。并且,这个RedisTemplate没有设置数据存在Redis时,key及value的序列化方式。

        看到这个@ConditionalOnMissingBean注解后,就知道如果Spring容器中有了RedisTemplate对象了,这个自动配置的RedisTemplate不会实例化。因此我们可以直接自己写个配置类,配置RedisTemplate。

二、导入依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <!--Redis-->
  6. <dependency>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-data-redis</artifactId>
  9. </dependency>

三、application.properties配置redis

  1. spring.redis.database=0
  2. spring.redis.host=localhost
  3. spring.redis.port=6379
  4. spring.redis.password=
  5. spring.redis.timeout=0

 

四、json转换工具

  1. import java.util.List;
  2. import com.fasterxml.jackson.core.JsonProcessingException;
  3. import com.fasterxml.jackson.databind.JavaType;
  4. import com.fasterxml.jackson.databind.ObjectMapper;
  5. /**
  6. *
  7. * @Title: JsonUtils.java
  8. * @Package com.lee.utils
  9. * @Description: 自定义响应结构, 转换类
  10. *
  11. * @author liqiang
  12. * @date 2019-8-26 21:01
  13. */
  14. public class JsonUtils {
  15. // 定义jackson对象
  16. private static final ObjectMapper MAPPER = new ObjectMapper();
  17. /**
  18. * 将对象转换成json字符串。
  19. * <p>Title: pojoToJson</p>
  20. * <p>Description: </p>
  21. * @param data
  22. * @return
  23. */
  24. public static String objectToJson(Object data) {
  25. try {
  26. String string = MAPPER.writeValueAsString(data);
  27. System.out.println("user:"+string);
  28. return string;
  29. } catch (JsonProcessingException e) {
  30. e.printStackTrace();
  31. }
  32. return null;
  33. }
  34. /**
  35. * 将json结果集转化为对象
  36. *
  37. * @param jsonData json数据
  38. * @param clazz 对象中的object类型
  39. * @return
  40. */
  41. public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
  42. try {
  43. T t = MAPPER.readValue(jsonData, beanType);
  44. return t;
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. return null;
  49. }
  50. /**
  51. * 将json数据转换成pojo对象list
  52. * <p>Title: jsonToList</p>
  53. * <p>Description: </p>
  54. * @param jsonData
  55. * @param beanType
  56. * @return
  57. */
  58. public static <T>List<T> jsonToList(String jsonData, Class<T> beanType) {
  59. JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
  60. try {
  61. List<T> list = MAPPER.readValue(jsonData, javaType);
  62. return list;
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. }
  66. return null;
  67. }
  68. }

五、以key-value存取,中文不乱码。将值转换为json格式再进行存取,取值时需要将json格式的数据转换为要取得类型。

  1. package com.liqiang.demo.redis;
  2. import org.junit.Before;
  3. import org.junit.Test;
  4. import org.junit.runner.RunWith;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import org.springframework.data.redis.core.RedisTemplate;
  8. import org.springframework.data.redis.core.StringRedisTemplate;
  9. import org.springframework.test.context.junit4.SpringRunner;
  10. import com.liqiang.demo.entity.User;
  11. import com.liqiang.demo.util.JsonUtils;
  12. /*
  13. * @Author: liqiang
  14. * @Date: 2019-8-26 21:00
  15. * @description:redis测试类,测试redis操作对象与字符串
  16. * */
  17. @RunWith(SpringRunner.class)
  18. @SpringBootTest
  19. public class RedisConfigTest {
  20. @Autowired
  21. private StringRedisTemplate stringTemplate;
  22. private User d;
  23. @Test
  24. public void testSet(){
  25. d = new User();
  26. d.setUsername("li");
  27. d.setAge(18);
  28. stringTemplate.opsForValue().set("user", JsonUtils.objectToJson(d));
  29. System.out.println("hello:"+stringTemplate.opsForValue().get("a"));
  30. User user = JsonUtils.jsonToPojo(stringTemplate.opsForValue().get("user"),User.class);
  31. System.out.println("username:"+user.getUsername());
  32. }
  33. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/715807
推荐阅读
相关标签
  

闽ICP备14008679号