Spring-Data-Redis是Spring-Data项目的一个子项目,主要用于操作Redis,通过Spring-data-redis工具,使得操作Redis以更加面向对象的方式。
Spring-data-redis配置
引入依赖如下
注意版本这里以2.1.16.RELEASE。
Bean配置在Spring Boot 2.X中,有两种不同的使用操作,一种是使用Jedis,一种是使用Lettuce,现在主流后者。
连接池的配置
@Bean public JedisPoolConfig poolConfig() { JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(100); poolConfig.setMaxWaitMillis(30 * 1000); poolConfig.setMinIdle(20); poolConfig.setMaxIdle(40); poolConfig.setTestWhileIdle(true); return poolConfig; }连接工厂配置
1.x可以直接通过JedisConnectionFactory,设置各种配置信息,但是在2.x之后,所有的set方法都被标注为过期了。通过查看JedisConnectionFactory的构造方法也可以看出,所以,如果是使用单机版的Redis的话,需要配置一下两个内容
public JedisConnectionFactory( RedisStandaloneConfiguration standaloneConfig, JedisClientConfiguration clientConfig) {}
当然,可以不配置连接池信息,这里连接池的配置也是有区别与1.x,使用的是JedisClientConfiguration进行配置
@Bean public RedisStandaloneConfiguration redisStandaloneConfiguration() { RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(); configuration.setHostName(host); configuration.setPassword(RedisPassword.of(password)); configuration.setPort(port); return configuration; }
@Bean public JedisClientConfiguration clientConfiguration() { JedisClientConfiguration.JedisClientConfigurationBuilder builder = JedisClientConfiguration.builder(); return builder.usePooling() .poolConfig(poolConfig()) .build(); }
请特别留意上面的JedisClientConfiguration的配置,通过builder来构造,然后使用usePooling()以及poolConfig()来配置连接池信息,网上很多的直接构造一个JedisPool的bean的方案在2.x中是不生效的,不信的话,断点查看一下连接池信息,还是默认的方式。
@Bean public JedisConnectionFactory redisConnectionFactory() { return new JedisConnectionFactory(redisStandaloneConfiguration(), clientConfiguration()); }RedisTemplate配置
在文章开头,我们提到了使用原生Jedis操作的不方便性以及Spring-data-redis的改进,其实,使用后者的主要好处就在于,它提供了序列化选项,可以根据需要配置不同的序列化器来序列化键跟值。
Redis中存储的是二进制,或者说字符串也行,所以一个对象是没办法直接存储在Redis中的,我们可以将对象的一个个属性拆分出来,但是这样效率太低了,通过序列化器直接序列化,效率就高了很多啦,这里是效率指的是编码的效率。
@Bean public RedisTemplate redisTemplate() { // 注意这里使用的是StringRedisTempalte StringRedisTemplate template = new StringRedisTemplate(redisConnectionFactory()); GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer(); // 设置值的序列化器 template.setValueSerializer(jackson2JsonRedisSerializer); return template; }
请注意上面配置模板的方式,在Spring-data-redis中,提供了两种模板
- RedisTemplate
- StringRedisTempalte
区别在于,RedisTemplate的键值序列使用的是默认的序列化器,即JdkSerializationRedisSerializer,而StringRedisTemplate使用的是StringRedisSerializer。
在上面的配置中,我们也可以使用RedisTempalte,并且手动配置其对应的序列化器来覆盖默认的序列化器即可。
到此为止,配置环节就完成了,接下来就是使用了。
Spring-Data-Redis 使用为Redis的五种不同的数据结构提供了五种不同的操作类,如下所示
ValueOperations<K, V> valueOps; ListOperations<K, V> listOps; SetOperations<K, V> setOps; ZSetOperations<K, V> zSetOps; HashOperations<K, HK, HV> hashOps;
通过tempalte.opsForXXX()方法来获取对应的对象,然后执行相关操作。
注意RedisTemplate采用泛型。
对应的Ops的操作方式跟原生命令相似。