本文目录导读:

我来介绍几种批量设置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 等
注意事项
- 大数据量时注意内存使用
- 设置过期时间避免内存溢出
- 生产环境注意备份
- 根据网络情况调整批量大小
选择哪种方法取决于你的具体需求:脚本语言偏好、数据量大小、是否需要处理复杂数据结构等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播