12.3.1 连接到 Redis

Redis 连接工厂会生成到 Redis 数据库服务器的连接。Spring Data Redis 为四种 Redis 客户端实现提供了连接工厂:

  • JedisConnectionFactory

  • JredisConnectionFactory

  • LettuceConnectionFactory

  • SrpConnectionFactory

具体选择哪一个取决于你。我建议你自行测试并建立基准,进而确定哪一种 Redis 客户端和连接工厂最适合你的需求。从 Spring Data Redis 的角度来看,这些连接工厂在适用性上都是相同的。

在做出决策之后,我们就可以将连接工厂配置为 Spring 中的 bean。例如,如下展示了如何配置 JedisConnectionFactory bean:

在做出决策之后,我们就可以将连接工厂配置为 Spring 中的 bean。例如,如下展示了如何配置 JedisConnectionFactory bean:

@Bean
public RedisConnectionFactory redisCF() {
  return new JedisConnectionFactory();
}

通过默认构造器创建的连接工厂会向 localhost 上的 6379 端口创建连接,并且没有密码。如果你的 Redis 服务器运行在其他的主机或端口 上,在创建连接工厂的时候,可以设置这些属性:

@Bean
public RedisConnectionFactory redisCF() {
  JedisConnectionFactory cf = new JedisConnectionFactory();
  cf.setHostName("redis-server");
  cf.setPort(7379);
  return cf;
}

类似地,如果你的 Redis 服务器配置为需要客户端认证的话,那么可以通过调用 setPassword() 方法来设置密码:

@Bean
public RedisConnectionFactory redisCF() {
  JedisConnectionFactory cf = new JedisConnectionFactory();
  cf.setHostName("redis-server");
  cf.setPort(7379);
  cf.setPassword("foobared");
  return cf;
}

在上面的这些例子中,我都假设使用的是 JedisConnectionFactory。如果你选择使用其他连接工厂的话,只需进行简单地替换就可以了。例如,假设你要使用 LettuceConnectionFactory 的话,可以按照如下的方式进行配置:

@Bean
public RedisConnectionFactory redisCF() {
  JedisConnectionFactory cf = new LettuceConnectionFactory();
  cf.setHostName("redis-server");
  cf.setPort(7379);
  cf.setPassword("foobared");
  return cf;
}

所有的Redis连接工厂都具有 setHostName()、setPort() 和 setPassword() 方法。这样,它们在配置方面实际上是相同的。

现在,我们有了 Redis 连接工厂,接下来就可以使用 Spring Data Redis 模板了。

顾名思义,Redis 连接工厂会生成到 Redis key-value 存储的连接(以 RedisConnection 的形式)。借助 RedisConnection,可以存储和读取数据。例如,我们可以获取连接并使用它来保存一个问候信息,如下所示:

RedisConnectionFactory cf = ...;
RedisConnection conn = cf.getConnection();
conn.set("greeting".getBytes(), "Hello World".getBytes());

与之类似,我们还可以使用 RedisConnection 来获取之前存储的问候信息:

byte[] greetingBytes = conn.get("greeting".getBytes());
String greeting = new String(greetingBytes());

毫无疑问,这可以正常运行,但是你难道真的愿意使用字节数组吗?

Last updated