暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis集合操作详解:如何迁移数据到另一个集合

数据库驾驶舱 2024-10-22
283

在使用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论