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数据库

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,954评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 要加“m”说明是MB,否则就是KB了. -Xms:初始值 -Xmx:最大值 -Xmn:最小值 java -Xms8...
    dadong0505阅读 4,910评论 0 53
  • 从前,有一朵云,它不下雨,它只下鱼。
    瓦影阅读 200评论 0 0
  • 初秋的午后,阴天。阳光慵懒无力地照着,给人莫名的惆怅。 爬墙虎爬满了整栋小楼,爬满了小楼门前那颗比楼还要高的树。 ...
    苏_醒阅读 411评论 1 3