本文目录导读:

我来介绍几种批量设置Redis键值对的方法:
使用 Redis CLI 管道模式
生成并执行命令文件
# 创建包含多个 SET 命令的文件 cat > redis_commands.txt << EOF SET key1 value1 SET key2 value2 SET key3 value3 EOF # 使用管道批量执行 cat redis_commands.txt | redis-cli --pipe
动态生成命令
#!/bin/bash
# 批量设置10个键值对
for i in $(seq 1 10); do
echo "SET user:$i user_name_$i"
done | redis-cli --pipe
Python 脚本
使用 redis-py 库
import redis
# 连接 Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 批量设置键值对
data = {
'key1': 'value1',
'key2': 'value2',
'key3': 'value3'
}
# 使用 pipeline 批量设置
pipe = r.pipeline()
for key, value in data.items():
pipe.set(key, value)
pipe.execute() # 一次性执行
从文件读取批量设置
import redis
import json
r = redis.Redis(host='localhost', port=6379, db=0)
# 从 JSON 文件读取数据
with open('data.json', 'r') as f:
data = json.load(f)
# 批量设置
pipe = r.pipeline()
for item in data:
pipe.set(item['key'], item['value'])
pipe.execute()
Shell 脚本
基础批量设置
#!/bin/bash
REDIS_CLI="redis-cli -h localhost -p 6379"
# 方式1:逐个设置
$REDIS_CLI SET key1 value1
$REDIS_CLI SET key2 value2
# 方式2:使用循环
for i in {1..100}; do
$REDIS_CLI SET "user:$i" "value_$i"
done
# 方式3:批量 MSET
$REDIS_CLI MSET key1 value1 key2 value2 key3 value3
从 CSV 文件读取
#!/bin/bash
# data.csv 格式: key,value
while IFS=',' read -r key value; do
redis-cli SET "$key" "$value"
done < data.csv
使用 Redis MSET 命令
单次设置多个键值
# MSET 可以在一次操作中设置多个键值 redis-cli MSET key1 value1 key2 value2 key3 value3
生成 MSET 命令
#!/bin/bash
# 生成 MSET 命令
keys_values=""
for i in {1..100}; do
keys_values+=" key:$i value:$i"
done
redis-cli MSET $keys_values
高级脚本示例
Python 高级批量处理
import redis
import json
from multiprocessing import Pool
class RedisBatchSetter:
def __init__(self, host='localhost', port=6379, db=0):
self.redis = redis.Redis(host=host, port=port, db=db)
def batch_set_with_pipeline(self, data, batch_size=1000):
"""使用 pipeline 分批设置"""
pipe = self.redis.pipeline()
count = 0
for key, value in data.items():
pipe.set(key, value)
count += 1
# 每 batch_size 条执行一次
if count % batch_size == 0:
pipe.execute()
pipe = self.redis.pipeline()
print(f"已设置 {count} 条数据")
# 执行剩余的
if count % batch_size != 0:
pipe.execute()
print(f"总共设置 {count} 条数据")
def batch_set_from_file(self, filename, delimiter=':'):
"""从文件批量设置"""
data = {}
with open(filename, 'r') as f:
for line in f:
if delimiter in line:
key, value = line.strip().split(delimiter, 1)
data[key.strip()] = value.strip()
self.batch_set_with_pipeline(data)
# 使用示例
setter = RedisBatchSetter()
data = {f"key_{i}": f"value_{i}" for i in range(10000)}
setter.batch_set_with_pipeline(data, batch_size=500)
Go 语言批量设置
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
// 使用 Pipeline 批量设置
pipe := rdb.Pipeline()
for i := 0; i < 1000; i++ {
pipe.Set(ctx, fmt.Sprintf("key:%d", i), fmt.Sprintf("value:%d", i), 0)
}
// 执行所有命令
_, err := pipe.Exec(ctx)
if err != nil {
panic(err)
}
fmt.Println("批量设置完成")
}
性能优化建议
- 使用 pipeline:减少网络往返次数
- 合理分批:单次 pipeline 建议 100-1000 条
- 使用 MSET:适合一次性设置少量键值
- 避免大键值:单个键值对不要太大
- 选择合适的数据结构:考虑使用 hash、set 等
注意事项
- 大数据量时注意内存使用
- 设置过期时间避免内存溢出
- 生产环境注意备份
- 根据网络情况调整批量大小
选择哪种方法取决于你的具体需求:脚本语言偏好、数据量大小、是否需要处理复杂数据结构等。