• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

[Redis-客户端] RedisTemplate和StringRedisTemplate

武飞扬头像
Max恒
帮助1

目录

 🥞1. 项目源码🥞

🍎2. Maven依赖🍎

🌭3. RedisTemplate入门使用🌭

🍔4.SpringDataRedis序列化🍔

🍟5.SpringDataRedis返序列化🍟

🍖6. StringRedisTemplate 解决存储对象的内存开销🍖


 🥞1. 项目源码🥞

链接: https://pan.百度.com/s/1iv2_vqLuLkJ-MhSw6VMMHw

提取码: m7cw


🍎2. Maven依赖🍎

  1.  
    <!--redis依赖-->
  2.  
    <dependency>
  3.  
    <groupId>org.springframework.boot</groupId>
  4.  
    <artifactId>spring-boot-starter-data-redis</artifactId>
  5.  
    </dependency>
  6.  
    <!--连接池-->
  7.  
    <dependency>
  8.  
    <groupId>org.apache.commons</groupId>
  9.  
    <artifactId>commons-pool2</artifactId>
  10.  
    </dependency>

🌭3. RedisTemplate入门使用🌭

这里先用单元测试带大家简单入门一下, redisTemplate写入数据和读取数据

代码 : 

  1.  
    @SpringBootTest
  2.  
    class RedisDemoApplicationTests {
  3.  
     
  4.  
    @Autowired
  5.  
    private RedisTemplate redisTemplate;
  6.  
     
  7.  
    @Test
  8.  
    void testString() {
  9.  
    // 写入一条String数据
  10.  
    redisTemplate.opsForValue().set("name", "张三");
  11.  
    // 获取string数据
  12.  
    Object name = redisTemplate.opsForValue().get("name");
  13.  
    System.out.println("name = " name);
  14.  
    }
  15.  
    }

输出结果 : 

学新通

但是回到我们的图形化客户端后发现, 数据的并不是我们想象的那样 学新通

这是因为spring.data.redis可以接受任何类型的对象, 最后转换成redis可以处理的字节, 所以存进去name, 张三, 都以Java对象的形式存储, 所以我们接下来要解决redis的序列化问题


🍔4.SpringDataRedis序列化🍔

代码 : 

  1.  
    @Configuration
  2.  
    public class RedisConfig {
  3.  
     
  4.  
    @Bean
  5.  
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
  6.  
    System.out.println("开始redis序列化.....");
  7.  
    //创建RedisTempLate对象
  8.  
    RedisTemplate<String, Object> template = new RedisTemplate<>();
  9.  
    //设置连接工厂
  10.  
    template.setConnectionFactory(connectionFactory);
  11.  
    //创建JSON序列化工具
  12.  
    GenericJackson2JsonRedisSerializer jsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
  13.  
    //设置Key的序列化(UTF_8格式)
  14.  
    template.setKeySerializer(RedisSerializer.string());
  15.  
    template.setHashKeySerializer(RedisSerializer.string());
  16.  
    //设置value的序列化
  17.  
    template.setValueSerializer(jsonRedisSerializer);
  18.  
    template.setHashValueSerializer(jsonRedisSerializer);
  19.  
    //返回
  20.  
    return template;
  21.  
    }
  22.  
    }

序列化后的输出结果

学新通


🍟5.SpringDataRedis返序列化🍟

这次采用存储对象, 并通过反序列化直接接受对象的参数

代码 : 

  1.  
    @Test
  2.  
    void testSaveUser() {
  3.  
    //写入数据
  4.  
    redisTemplate.opsForValue().set("user:100", new User("李四", 28));
  5.  
    //获取数据(采用对象接受,也就是反序列化)
  6.  
    User user = (User) redisTemplate.opsForValue().get("user:100");
  7.  
    System.out.println("反序列化结果 : >> " user);
  8.  
    }

输出结果 : 

可以看出, 存储的值也是JSON格式

学新通

 最后控制台的输出, 也是对象的形式去展示, 这是因为JSON值当中包含了一个class的属性, 并读取到了User类的名称

学新通


🍖6. StringRedisTemplate 解决存储对象的内存开销🍖

在redis中存储了"@class": "redis.pojo.User",存储了User字节码 带来的问题就是占用了内存开销

这里我们采用StringRedisTemplate, 采用String的序列化策略来解决性能开销问题

代码 : 

  1.  
     
  2.  
    private static final ObjectMapper MAPPER = new ObjectMapper();
  3.  
    @Autowired
  4.  
    private StringRedisTemplate stringRedisTemplate;
  5.  
     
  6.  
    @Test
  7.  
    void stringRedisTemplateTest() throws JsonProcessingException {
  8.  
    //创建对象
  9.  
    User user = new User("张大仙", 32);
  10.  
    //手动序列化
  11.  
    String json = MAPPER.writeValueAsString(user);
  12.  
    //写入数据
  13.  
    stringRedisTemplate.opsForValue().set("user:200", json);
  14.  
     
  15.  
    //获取数据
  16.  
    String userJson = stringRedisTemplate.opsForValue().get("user:200");
  17.  
    //手动反序列化
  18.  
    User user1 = MAPPER.readValue(userJson, User.class);
  19.  
    System.out.println("user1 = " user1);
  20.  
    }

输出结果 :  

学新通

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgjegkg
系列文章
更多 icon
同类精品
更多 icon
继续加载