在使用Redis时,开发者经常需要对集合(Set)进行操作,而其中一种常见的需求是将一个集合中的数据迁移到另一个集合中。Redis提供了多种集合操作指令,使得这一迁移操作变得非常灵活和高效。
本文将为你介绍如何将Redis中的一个集合迁移到另外一个集合
插入随机字符串
#!/bin/bash
# Redis 服务器配置
REDIS_HOST="localhost"
REDIS_PORT="6379"
REDIS_PASSWORD="admin"
# 清空集合(可选)
# 生成 1000 个随机字符串并添加到 Redis 集合中
for i in {1..1000}; do
RANDOM_STRING=$(tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 10) # 生成 10 个随机字符
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD SADD random_string_set "$RANDOM_STRING"
done
echo "1000 个随机字符串已添加到 Redis 的 '$SET_NAME' 中。"
迁移
#!/bin/bash
# Redis 服务器地址和端口
REDIS_HOST="localhost"
REDIS_PORT="6379"
REDIS_PASSWORD="admin"
# 集合的名称
SOURCE_SET="random_string_set"
DESTINATION_SET="random_string_set_bak"
# 初始化游标
cursor=0
# 循环直到游标返回 0,表示遍历完成
while [ 1 ]; do
# 使用 SSCAN 分批读取原集合中的元素
# 注意:这里读取的结果包含了游标和元素列表
read -r cursor elements <<< $(redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD SSCAN $SOURCE_SET $cursor COUNT 100 | tr '\n' ' ')
# 如果有元素需要处理,使用 SADD 添加到目标集合
if [ -n "$elements" ]; then
redis-cli -h $REDIS_HOST -p $REDIS_PORT -a $REDIS_PASSWORD SADD $DESTINATION_SET $elements
fi
# 如果游标为 0,结束循环
if [ "$cursor" == "0" ]; then
break
fi
done
echo "All elements copied from $SOURCE_SET to $DESTINATION_SET."
修改一个元素后 两个集合进行对比
127.0.0.1:6379> SDIFF random_string_set random_string_set_bak
1) "8ZNpWnBvIl"
「欢迎关注我们的公众号,获取更多技术分享与经验交流。」
文章转载自数据库驾驶舱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




