# 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：

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

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

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

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

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

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

```java
@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，可以存储和读取数据。例如，我们可以获取连接并使用它来保存一个问候信息，如下所示：

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

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://potoyang.gitbook.io/spring-in-action-v4/untitled-6/untitled-1/untitled-2.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
