Spring Boot 操作 Redis

一.Java对Redis的操作

  • 如果不使用任何框架,Java 使用 Jedis操作数据库.属于最原始的一种方式;
  • 可以参考文章: Java中使用Jedis操作Redis

二.Spring 框架对Redis的支持

  • Spring 封装了 RedisTemplate 对象来进行对Redis的各种操作,它支持所有的Redis原生的api。RedisTemplate 位于spring-data-redis包下

  • RedisTemplate在Spring代码中的结构如下:

    org.springframework.data.redis.core
    Class RedisTemplate<K,V>
    java.lang.Object
        org.springframework.data.redis.core.RedisAccessor
            org.springframework.data.redis.core.RedisTemplate<K,V>
    

    Type Parameters:
    K =模板中的Redis key的类型(通常为String)如:RedisTemplate<String, Object>
    V = 模板中的Redis value的类型

  • RedisTemplate中定义了对5种数据结构操作

    redisTemplate.opsForValue();//操作字符串
    redisTemplate.opsForHash();//操作hash
    redisTemplate.opsForList();//操作list
    redisTemplate.opsForSet();//操作set
    redisTemplate.opsForZSet();//操作有序set
    
  • StringRedisTemplate与RedisTemplate区别

    • 两者的关系是StringRedisTemplate继承RedisTemplate。
    • 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
    • SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
      (1).StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
      (2).RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的
      (3).两种方式序列化测试
  • 存取的数据就是字符串类型数据的时候,使用StringRedisTemplate

  • 如果数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

  • 使用 RedisTemplate 将字符串类型的key,value新增的redis中,在redis的命令下使用 get 获取不到,而使用StringRedisTemplate的方式就可以获取到;

三.Spring Boot 操作Redis

  • 在pom.xml中添加依赖

          <!-- 加载redis依赖 -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-redis</artifactId>
              <version>1.4.7.RELEASE</version>
          </dependency>
    

    注意:以上一定要添加版本,否则会mvn会提示unknow, 点击查看最新版本

  • 单元测试

    @RunWith(SpringRunner.class)
    //开启Web上下文测试
    @WebAppConfiguration
    @SpringBootTest(classes = DomainWechatCardApplication.class)
    public class TestRedis {
      @Autowired
      private StringRedisTemplate stringRedisTemplate;
    
      @Autowired
      private RedisTemplate redisTemplate;
      @Test
      public void testRedis()
      {
          // 保存字符串
          stringRedisTemplate.opsForValue().set("aaa", "111");
          Assert.assertEquals("111", stringRedisTemplate.opsForValue().get("aaa"));
          System.out.println("哈哈哈");
    
          //保存对象
          WechatCard wechatCard = new WechatCard();
          wechatCard.setAddTime();
          wechatCard.setTitle("测试redis");
    
          redisTemplate.opsForHash().put("wechatCard",1,wechatCard);
          /*查看redisTemplate 的Serializer*/
          System.out.println(redisTemplate.getKeySerializer());
          System.out.println(redisTemplate.getValueSerializer());
    
    
          /*查看StringRedisTemplate 的Serializer*/
          System.out.println(stringRedisTemplate.getValueSerializer());
          System.out.println(stringRedisTemplate.getValueSerializer());
    
          WechatCard card1 = (WechatCard) redisTemplate.opsForHash().get("wechatCard",1);
          System.out.println(card1);
    
          redisTemplate.opsForValue().set("lang","php");
          System.out.println(redisTemplate.opsForValue().get("lang"));
      }
    }
    

参考文章:
Spring中使用RedisTemplate操作Redis(spring-data-redis)
Spring Boot StringRedisTemplate常用操作
Spring Boot中使用Redis数据库

    原文作者:liangxifeng833
    原文地址: https://www.jianshu.com/p/014f449bbf90
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞