前提條件
請根據客戶端程序的部署位置,完成下述操作:
-
天翼云彈性云主機(推薦):確保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)
}