Java操作Redis之RedisTemplate和StringRedisTemplate类使用详解

1,039 阅读3分钟

这是我参与2022首次更文挑战的第22天,活动详情查看:2022首次更文挑战

hello,你好呀,我是灰小猿,一个超会写bug的程序猿,

上一篇文章我们分享了在Java中使用jedis类来操作Redis,但是在实际的企业开发中,最常用的Java操作Redis的工具类其实是RedisTemplate和stringRedisTemplate,今天我们就来讲解一下这两个类的使用方法。

RedisTempate类详解

RedisTempate类也是在Java中操作Redis的常用类,但是使用Jedis类和使用RedisTempate类有什么不同呢?

首先,Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring系列框架进行搭配使用,

所以Jedis一般可以用于没有使用spring系列框架的场景,而RedisTempate则多用于企业利用框架的实际开发中。

对于还没有接触到spring系列框架的小伙伴,可以先使用Jedis类进行操作,RedisTempate则作为了解。

(1)RedisTempate驱动下载

RedisTempate驱动下载和Jedis是一样的,如果是Maven项目,可以直接在pom文件中导入链接中的依赖。

RedisTempate驱动下载地址 https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis/2.6.3

(2)RedisTempate类使用

我在这里先给大家讲一下RedisTemplate类中的常用方法,关于如何在springboot类中进行使用和集成,我们在下一篇文章中讲解,

RedisTemplate提供了五种操作数据类型的方法,分别对应了Redis的五种数据类型,

  • redisTemplate.opsForValue();  对应String类型操作
  • redisTemplate.opsForHash();  对应Hash类型操作
  • redisTemplate.opsForList();   对应List类型操作
  • redisTemplate.opsForSet();  对应Set类型操作
  • redisTemplate.opsForZSet();  对应ZSet类型操作

而每种方法下面就对应着这个数据类型的其他操作,

我们以redisTemplate.opsForValue();  操作String类型为例,在Redis中增加一个键值对

        ValueOperations valueOperations = redisTemplate.opsForValue();
//        设置键值对
        valueOperations.set("mykey","value1");
//        根据索引获取值
        valueOperations.get("myKey");

他们的操作也是一样的,小伙伴们可以以此类推!我就不在这里赘述啦!

StringRedisTemplate类详解

上面我们讲了在spring系列框架中,可以使用RedisTemplate来操作Redis,但是还有一个相似的类StringRedisTemplate也是比较常用的,它主要用于操作字符串类型数据。

RedisTemplate和StringRedisTemplate有以下的区别:

  1. StringRedisTemplate继承自RedisTemplate。

  2. 两者的数据是不共通的; 也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。

  3.  SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。

    1. StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
    2. RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

那么应该在什么时候使用RedisTemplate,什么时候使用StringRedisTemplate呢?

当你的redis数据库里面本来存的就是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。

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

除此之外两者在操作上都是一样的,StringRedisTemplate对应了操作五种数据类型的方法,而且操作和stringRedis一样,

  • stringRedisTemplate.opsForValue();  对应String类型操作
  • stringRedisTemplate.opsForHash();  对应Hash类型操作
  • stringRedisTemplate.opsForList();   对应List类型操作
  • stringRedisTemplate.opsForSet();  对应Set类型操作
  • stringRedisTemplate.opsForZSet();  对应ZSet类型操作

今日总结

今天主要讲解了在Java中如何去操作Redis,总结一下两种工具类的使用场景;

  • RedisTemplate适合在多种数据类型的项目,且希望自动进行数据转换的情况下使用
  • StringRedisTemplate适合在只有字符串处理的情况下使用

因为在Redis中的命令和Java中的操作方法基本同名,所以这几个工具类不需要额外的去记忆,知道命令的作用就好了!

我是灰小猿,我们下期见!