Redis 客户端入门指南 – wiki大全


Redis 客户端入门指南

Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等,并以其高性能、灵活性和丰富的功能集而广受欢迎。

要充分利用 Redis,您需要通过客户端与其进行交互。本指南将详细介绍如何开始使用不同编程语言的 Redis 客户端。

1. 前提条件

在开始之前,请确保您已经安装并运行了 Redis 服务器。您可以通过以下命令检查 Redis 服务器是否正在运行:

bash
redis-cli ping

如果返回 PONG,则表示 Redis 服务器已成功运行。

2. 连接 Redis 服务器

所有 Redis 客户端库的核心功能都是建立与 Redis 服务器的连接。这通常涉及指定服务器的地址(IP 或主机名)和端口(默认为 6379)。如果您的 Redis 服务器需要密码验证,还需要提供密码。

接下来,我们将以几种流行的编程语言为例,介绍如何连接和操作 Redis。

2.1 Python 客户端 (redis-py)

redis-py 是 Python 社区中最常用的 Redis 客户端。

安装:

bash
pip install redis

连接与基本操作:

“`python
import redis

连接到 Redis

host: Redis 服务器地址 (默认为 ‘localhost’)

port: Redis 服务器端口 (默认为 6379)

db: Redis 数据库索引 (默认为 0)

password: 如果 Redis 设置了密码,请在此处提供

try:
r = redis.StrictRedis(host=’localhost’, port=6379, db=0, decode_responses=True)
# decode_responses=True 会自动将 Redis 返回的字节转换为字符串

print("成功连接到 Redis 服务器!")

# 字符串操作
r.set('mykey', 'Hello Redis from Python!')
value = r.get('mykey')
print(f"mykey 的值: {value}")

# 哈希操作
r.hset('user:100', mapping={
    'name': 'Alice',
    'email': '[email protected]',
    'age': 30
})
user_data = r.hgetall('user:100')
print(f"user:100 的数据: {user_data}")

# 列表操作
r.rpush('mylist', 'item1', 'item2', 'item3')
list_items = r.lrange('mylist', 0, -1)
print(f"mylist 中的项: {list_items}")

# 设置过期时间
r.set('temp_key', 'This key will expire in 10 seconds')
r.expire('temp_key', 10)
print(f"temp_key 的 TTL: {r.ttl('temp_key')} 秒")

# 删除键
r.delete('mykey', 'user:100', 'mylist')
print("已删除 mykey, user:100, mylist")

except redis.exceptions.ConnectionError as e:
print(f”无法连接到 Redis: {e}”)
except Exception as e:
print(f”发生错误: {e}”)

“`

2.2 Node.js 客户端 (ioredis 或 node-redis)

ioredis 是一个功能丰富、高性能的 Node.js Redis 客户端,支持 Promise 和 Stream API。node-redis 也是一个流行的选择。这里以 ioredis 为例。

安装:

bash
npm install ioredis

连接与基本操作:

“`javascript
const Redis = require(‘ioredis’);

// 连接到 Redis
// 默认连接到 localhost:6379
const redis = new Redis({
host: ‘localhost’,
port: 6379,
password: null, // 如果有密码,请填写
db: 0
});

redis.on(‘connect’, () => {
console.log(‘成功连接到 Redis 服务器!’);
});

redis.on(‘error’, (err) => {
console.error(‘Redis 连接错误:’, err);
});

async function runRedisOperations() {
try {
// 字符串操作
await redis.set(‘node_key’, ‘Hello Redis from Node.js!’);
const value = await redis.get(‘node_key’);
console.log(node_key 的值: ${value});

    // 哈希操作
    await redis.hset('product:200', 'name', 'Laptop', 'price', 1200, 'brand', 'AwesomeTech');
    const productData = await redis.hgetall('product:200');
    console.log(`product:200 的数据:`, productData);

    // 集合操作
    await redis.sadd('tags:post:1', 'nodejs', 'redis', 'database');
    const tags = await redis.smembers('tags:post:1');
    console.log(`tags:post:1 的标签:`, tags);

    // 设置过期时间
    await redis.set('session:abc', 'user_session_data', 'EX', 60); // 60秒过期
    const ttl = await redis.ttl('session:abc');
    console.log(`session:abc 的 TTL: ${ttl} 秒`);

    // 删除键
    await redis.del('node_key', 'product:200', 'tags:post:1');
    console.log("已删除 node_key, product:200, tags:post:1");

} catch (error) {
    console.error('Redis 操作失败:', error);
} finally {
    redis.quit(); // 关闭连接
}

}

runRedisOperations();
“`

2.3 Go 客户端 (go-redis)

go-redis 是一个流行的 Go 语言 Redis 客户端,提供了强大的功能和良好的性能。

安装:

bash
go get github.com/go-redis/redis/v8

连接与基本操作:

“`go
package main

import (
“context”
“fmt”
“time”

"github.com/go-redis/redis/v8"

)

var ctx = context.Background()

func main() {
// 连接到 Redis
// Options 结构体用于配置连接参数
rdb := redis.NewClient(&redis.Options{
Addr: “localhost:6379”, // Redis 服务器地址和端口
Password: “”, // 密码,如果没有设置则留空
DB: 0, // 数据库索引
})

// 通过 Ping 命令检查连接
_, err := rdb.Ping(ctx).Result()
if err != nil {
    fmt.Printf("无法连接到 Redis: %v\n", err)
    return
}
fmt.Println("成功连接到 Redis 服务器!")

// 字符串操作
err = rdb.Set(ctx, "go_key", "Hello Redis from Go!", 0).Err() // 0 表示永不过期
if err != nil {
    panic(err)
}
val, err := rdb.Get(ctx, "go_key").Result()
if err != nil {
    panic(err)
}
fmt.Printf("go_key 的值: %s\n", val)

// 有序集合操作
rdb.ZAdd(ctx, "leaderboard", &redis.Z{Score: 100, Member: "PlayerA"})
rdb.ZAdd(ctx, "leaderboard", &redis.Z{Score: 150, Member: "PlayerB"})
rdb.ZAdd(ctx, "leaderboard", &redis.Z{Score: 120, Member: "PlayerC"})
topPlayers, err := rdb.ZRangeWithScores(ctx, "leaderboard", 0, -1).Result()
if err != nil {
    panic(err)
}
fmt.Println("排行榜:")
for _, z := range topPlayers {
    fmt.Printf("  %s: %.0f\n", z.Member, z.Score)
}

// 设置过期时间
rdb.Set(ctx, "ephemeral_key", "Will vanish soon", 10*time.Second) // 10 秒后过期
ttl := rdb.TTL(ctx, "ephemeral_key").Val()
fmt.Printf("ephemeral_key 的 TTL: %v\n", ttl)

// 删除键
rdb.Del(ctx, "go_key", "leaderboard", "ephemeral_key")
fmt.Println("已删除 go_key, leaderboard, ephemeral_key")

// 关闭连接
defer rdb.Close()

}
“`

3. Redis 常用数据类型和命令概览

Redis 提供了丰富的数据类型,每种类型都对应一系列操作命令。以下是一些

滚动至顶部