前提条件
请根据客户端程序的部署位置,完成下述操作:
-
天翼云弹性云主机(推荐):确保CT-ECS实例与Redis实例属于同一VPC(虚拟私有云)下。
-
本地服务器
分布式缓存Redis实例默认仅提供内网连接地址,通过公网连接时您需要手动申请公网连接地址。具体操作,请参见购买弹性IP。
针对不同的网络环境或操作系统,获取本地设备公网IP地址的方式可能不一致。以下是不同系统通过命令方式获取本地设备公网IP地址的参考方法:
a.Linux操作系统:打开终端,输入curl ifconfig.me命令后回车。
b.Windows操作系统:打开命令提示符,输入curl ip.me命令后回车。
c.macOS操作系统:打开终端,输入curl ifconfig.me命令后回车。
注意:如果您的Redis实例为集群架构,实例默认会提供Proxy(代理)节点的连接地址,连接密码为“ 实例名称 # 实例密码 ”。
如何获取连接信息
在使用客户端程序连接Redis实例时,通常您需要获取以下信息并设置在代码中:
需获取的信息 | 获取方式 |
---|---|
实例的连接地址 | Redis实例支持多种连接地址,推荐使用专有网络连接,可获得更高的安全性和更低的网络延迟。更多信息,请参见查看连接地址。 |
实例的账号(部分客户端程序无需设置) | 针对集群版实例,您可以创建一个新的账号并赋予不同的权限。更多信息,请参见创建与管理账号。 |
所选实例账号的密码 | 根据选取账号的不同,密码的填写格式有一定区别: ● 默认账号(以实例名称命名的账号):直接填写密码即可。 ● 新创建的账号:密码格式为"user"#"password"。例如自定义账号为testaccount,密码为testPasswd,密码需填写为testaccount#testPasswd。 说明: ● 如果通过第三方数据库管理工具连接Redis实例,请在密码框中输入user#password进行连接。 ● 如果忘记密码,您可以重置密码。具体操作,请参见重置缓存实例密码。 |
常见客户端示例
关于Redis支持的客户端列表请参见Redis官方文档,以下为部分客户端的连接实例。
Java
可通过Jedis客户端连接Redis,Jedis是一个Java编程语言用于与Redis服务器进行交互的开源客户端库,允许Java应用程序通过网络与Redis服务器进行通信,并执行各种操作,如数据读写、事务处理、订阅发布等。它提供了简单易用的API,使得与Redis服务器的交互变得非常方便。使用Jedis连接Redis步骤如下:
- 下载并安装Jedis客户端。
- 根据业务需求选择连接方式。
打开Eclipse客户端,创建一个Project并配置pom文件,具体内容如下:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>Latest version</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
根据Jedis客户端版本,在Project中输入下述代码,然后根据注释提示修改代码
JedisPoolConfig config = new JedisPoolConfig();
// 允许的最大空闲连接数,不可超过Redis实例的最大连接数。
config.setMaxIdle(200);
// 允许的最大连接数,不可不超过Redis实例的最大连接数。
config.setMaxTotal(300);
config.setTestOnBorrow(false);
config.setTestOnReturn(false);
// 分别将ip和password的值替换为实例的连接地址、密码。
String ip = "redis_ip";
String password = "password";
JedisPool pool = new JedisPool(config, ip, redis_port, 3000, password);
Jedis jedis = null;
try {
jedis = pool.getResource();
// 执行相关操作,示例如下。
// Store & Retrieve a simple string
jedis.set("foo", "bar");
System.out.println(jedis.get("foo")); // prints bar
// Store & Retrieve a HashMap
Map<String, String> hash = new HashMap<>();;
hash.put("name", "John");
hash.put("surname", "Smith");
hash.put("company", "Redis");
hash.put("age", "29");
jedis.hset("user-session:123", hash);
System.out.println(jedis.hgetAll("user-session:123"));
// Prints: {name=John, surname=Smith, company=Redis, age=29}
}catch (Exception e) {
// 超时或其他异常处理。
e.printStackTrace();
}finally {
if (jedis != null) {
jedis.close();
}
}
pool.destroy(); // 当应用退出,需销毁资源时,调用此方法。此方法会断开连接、释放资源。
运行上述代码,在Eclipse的控制台输出如下运行结果,则表示您已成功连接至分布式缓存Redis数据库。
bar
{name=John, surname=Smith, company=Redis, age=29}
Python
使用Python连接Redis步骤如下:
-
下载并安装redis-py客户端。
-
在Python编辑器中输入下述代码,然后根据注释提示修改代码。
本示例的Python版本为3.9、redis-py版本为4.4.1。
#!/usr/bin/env python #-*- coding: utf-8 -*- import redis # 分别将host和port的值替换为实例的连接地址、端口号。 host = 'redis_ip' port = redis_port # 将pwd的值替换为实例的密码。 pwd = 'password' r = redis.Redis(host=host, port=port, password=pwd) # 连接建立后即可执行数据库操作,下述代码为您提供SET与GET的使用示例。 r.set('foo', 'bar') # True print(r.get('foo')) # bar r.hset('user-session:123', mapping={ 'name': 'John', "surname": 'Smith', "company": 'Redis', "age": 29 }) # True r.hgetall('user-session:123') # {'surname': 'Smith', 'name': 'John', 'company': 'Redis', 'age': '29'}
-
运行上述代码,在\控制台输出如下运行结果则表示您已成功连接至分布式缓存Redis数据库。
bar {'surname': 'Smith', 'name': 'John', 'company': 'Redis', 'age': '29'}
C或C++
使用C或C++客户端连接Redis步骤如下
- 下载并安装C客户端
- 在C或C++编辑器中输入下述代码,然后根据注释提示修改代码。
本示例的HiRedis版本为1.1.0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <hiredis.h>
int main(int argc, char **argv) {
unsigned int j;
redisContext *conn;
redisReply *reply;
if (argc < 3) {
printf("Usage: example {instance_ip_address} redis_port {password}\n");
exit(0);
}
const char *hostname = argv[1];
const int port = atoi(argv[2]);
const char *password = argv[3];
struct timeval timeout = { 1, 500000 }; // 1.5 seconds
conn = redisConnectWithTimeout(hostname, port, timeout);
if (conn == NULL || conn->err) {
if (conn) {
printf("Connection error: %s\n", conn->errstr);
redisFree(conn);
} else {
printf("Connection error: can't allocate redis context\n");
}
exit(1);
}
/* AUTH */
reply = redisCommand(conn, "AUTH %s", password);
printf("AUTH: %s\n", reply->str);
freeReplyObject(reply);
/* Set */
reply = redisCommand(conn,"SET %s %s", "welcome", "Hello, DCS for Redis!");
printf("SET: %s\n", reply->str);
freeReplyObject(reply);
/* Get */
reply = redisCommand(conn,"GET welcome");
printf("GET welcome: %s\n", reply->str);
freeReplyObject(reply);
/* Disconnects and frees the context */
redisFree(conn);
return 0;
}
Spring Boot 集成 Lettuce Redis 客户端
- SpringBoot从2.0起默认使用lettuce客户端进行连接。
- 此次使用的版本:springboot:2.7.4,lettuce:6.1.9。
1.在 Spring Boot 项目的 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.在application.properties配置文件中加上redis相关配置。
spring.redis.host=your_redis_host
spring.redis.database=0
spring.redis.password=your_password
spring.redis.port=your_redis_port
将 your_redis_host 替换为 Redis 服务器的主机名,your_redis_port 替换为 Redis 服务器的端口号。Redis 服务器有密码,需要设置 spring.redis.password。
3.做好以上准备工作之后,在项目配置类中创建 RedisTemplate Bean,并配置 Lettuce Redis 连接工厂。
@Configuration
public class RedisConfiguration {
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(lettuceConnectionFactory);
//使用Jackson2JsonRedisSerializer替换默认的JdkSerializationRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,
ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
jackson2JsonRedisSerializer.setObjectMapper(mapper);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
4.测试Redis,并进行读写数据。
@Service
public class RedisOperator {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
/**
* 普通缓存获取
* @param key 键
* @return 值
*/
public Object get(String key){
return key==null?null:redisTemplate.opsForValue().get(key);
}
/**
* 普通缓存放入
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key,Object value) {
try {
redisTemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
} }
}
@RestController
public class redisController {
@Autowired
private RedisOperator redisOperator;
@GetMapping("/setKey")
@ResponseBody
public String setKey(String key, String value) {
redisOperator.set(key, value);
return "Succeed to write [" + key + "=" + redisOperator.get(key) +"]";
}
@GetMapping("/getKey")
@ResponseBody
public String getKey(String key) {
return redisOperator.get(key) + "";
}
}
测试:curl {IP}:{PORT}/setKey?key=abc2&value=ccd3
输出:Succeed to write [abc2=ccd3]
Node.js Redis客户端
使用Node.js Redis客户端连接Redis步骤如下:
1.安装依赖:在 Node.js 项目中,首先需要安装 node_redis 模块。可以通过 npm 命令进行安装:
npm install redis
2.引入模块:在需要连接 Redis 的代码文件中,使用 require 方法引入 node_redis 模块。
const redis = require('redis');
3.创建 Redis 客户端实例:通过调用 redis.createClient() 方法创建 Redis 客户端实例。
const client = redis.createClient();
这将创建一个默认配置的 Redis 客户端实例,连接到本地的 Redis 服务器(默认端口为 6379)。
如果需要指定 Redis 服务器的主机名和端口号,可以在 createClient() 方法中传递相应的参数:
const client = redis.createClient({
host: 'redis_ip',
port: redis_port
});
4.执行 Redis 操作:通过调用 Redis 客户端实例的方法,可以执行各种 Redis 操作。以下是一些常见的操作示例:
设置键值对:
client.set('key', 'value', (err, result) => {
if (err) {
console.error(err);
} else {
console.log('Key-value pair has been set successfully');
}
});
获取键值对:
client.get('key', (err, result) => {
if (err) {
console.error(err);
} else {
console.log('Value:', result);
}
});
可根据具体需求执行其他类型的 Redis 操作,如哈希表操作、列表操作、集合操作等。
5.处理连接异常:在使用 Redis 客户端时,需要注意处理连接异常的情况。可以通过监听 error 事件来捕获连接错误和网络错误,并进行适当的处理。
client.on('error', (err) => {
console.error('Redis connection error:', err);
});
6.关闭连接:在使用完 Redis 客户端后,应该关闭与 Redis 服务器的连接,释放资源。
client.quit((err) => {
if (err) {
console.error('Error while quitting Redis connection:', err);
} else {
console.log('Redis connection has been closed');
}
});
可以通过调用 quit() 方法来关闭连接,并在回调函数中处理关闭连接的结果。
以上是使用 Node.js 中的 node_redis 客户端连接 Redis 的基本操作步骤。根据实际需求,可以根据以上示例代码进行扩展和定制化开发。
PHP Redis客户端
使用PHP客户端连接Redis步骤如下:
1.安装扩展:首先需要安装 phpredis 扩展。可以通过以下方式安装:
- 使用 PECL 安装(需要先安装 PECL 工具):
pecl install redis
-
手动编译安装:
-
下载 phpredis 源代码,解压源代码,并进入解压后的目录。执行以下命令进行编译和安装:
phpize ./configure make sudo make install
安装完成后,需要在 PHP 配置文件(如 php.ini)中启用 phpredis 扩展。在配置文件中添加以下行:
extension=redis.so
2.创建 Redis 客户端实例:在需要连接 Redis 的 PHP 文件中,使用 Redis 类创建 Redis 客户端实例。
$client = new Redis();
3.连接 Redis 服务器:通过调用 connect() 方法连接到 Redis 服务器。可以根据实际情况指定 Redis 服务器的主机名和端口号。
$client->connect('redis_ip', redis_port);
4.执行 Redis 操作:通过调用 Redis 客户端实例的方法,可以执行各种 Redis 操作。以下是一些常见的操作示例:
设置键值对:
$client->set('key', 'value');
获取键值对:
$value = $client->get('key');
执行命令,可根据具体需求执行其他类型的 Redis 操作,如哈希表操作、列表操作、集合操作等。
$result = $client->rawCommand('INFO');
5.处理连接异常:在使用 Redis 客户端时,需要注意处理连接异常的情况。可以使用异常处理机制来捕获连接错误和网络错误,并进行适当的处理。
try {
// 执行 Redis 操作
} catch (RedisException $e) {
echo 'Redis connection error: ' . $e->getMessage();
}
6.关闭连接:在使用完 Redis 客户端后,应该关闭与 Redis 服务器的连接,释放资源。
$client->close();
以上是使用 PHP 中的 phpredis 扩展连接 Redis 的基本操作步骤。根据实际需求,可以根据以上示例代码进行扩展和定制化开发。请确保已正确安装并启用 phpredis 扩展,并在代码中适当处理连接异常和关闭连接。
Go Redis客户端
使用Go客户端连接Redis步骤如下:
1.安装依赖:在使用 go-redis 之前,需要先安装官方提供的 Redis 客户端库。打开终端并执行以下命令来安装 go-redis 包:
go get github.com/go-redis/redis/v8
2.导入依赖包:在 Go 代码中导入 go-redis 包,以便使用其中的函数和类型。
import "github.com/go-redis/redis/v8"
3.创建 Redis 客户端实例:使用 redis.NewClient 函数创建 Redis 客户端实例。根据实际情况,修改 Addr 字段为 Redis 服务器的主机名和端口号。如果 Redis 服务器有密码,可以在 Password 字段中指定密码。
client := redis.NewClient(&redis.Options{
Addr: "redis_ip:redis_port",
Password: "", // 如果有密码,填写密码
DB: 0, // 选择数据库,默认为0
})
4.测试连接:使用 client.Ping() 函数测试与 Redis 服务器的连接是否成功。
pong, err := client.Ping(context.Background()).Result()
if err != nil {
fmt.Println("Redis connection error:", err)
return
}
fmt.Println("Redis ping response:", pong)
5.执行 Redis 操作:通过调用 Redis 客户端实例的方法,可以执行各种 Redis 操作。以下是一些常见的操作示例:
-
设置键值对:
err := client.Set(context.Background(), "key", "value", 0).Err() if err != nil { fmt.Println("Set error:", err) }
-
获取键值对:
value, err := client.Get(context.Background(), "key").Result() if err != nil { fmt.Println("Get error:", err) } else { fmt.Println("Value:", value) }
-
执行命令:
result, err := client.Do(context.Background(), "INFO").Result() if err != nil { fmt.Println("Command error:", err) } else { fmt.Println("Command result:", result) }
可根据具体需求执行其他类型的 Redis 操作,如哈希表操作、列表操作、集合操作等。
- 关闭连接:在使用完 Redis 客户端后,应该关闭与 Redis 服务器的连接,释放资源。
err := client.Close()
if err != nil {
fmt.Println("Error closing connection:", err)
}