1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| #!/bin/bash
SUPPORTED_TYPES="string hash list set zset"
MEMBERS_PER_KEY=5
if [ $# -lt 1 ]; then echo "❌ 错误:请指定导入类型。" echo "支持的类型: ${SUPPORTED_TYPES}" echo "用法: sh $0 <type> [count]" exit 1 fi
DATA_TYPE=$(echo "$1" | tr '[:upper:]' '[:lower:]')
if [ $# -ge 2 ]; then DATA_COUNT=$2 else DATA_COUNT=100 fi
if [[ ! " ${SUPPORTED_TYPES} " =~ " ${DATA_TYPE} " ]]; then echo "❌ 错误:不支持的类型 '$DATA_TYPE'。" echo "支持的类型: ${SUPPORTED_TYPES}" exit 1 fi
REDIS_HOST="127.0.0.1" REDIS_PORT="6379" REDIS_PASSWORD="password" KEY_PREFIX="test_data"
echo "⏳ 正在生成 ${DATA_COUNT} 条 Redis [${DATA_TYPE}] 命令..."
i=1 while [ $i -le $DATA_COUNT ] do case "$DATA_TYPE" in string) KEY="${KEY_PREFIX}:string:${i}" VALUE="value_of_${i}_$(date +%s%N)"
printf "*3\r\n\$3\r\nSET\r\n\$${#KEY}\r\n${KEY}\r\n\$${#VALUE}\r\n${VALUE}\r\n" ;;
hash) HASH_KEY="${KEY_PREFIX}:hash:${i}" FIELD1="name" VALUE1="User_Name_${i}" FIELD2="age" VALUE2=$(( (i % 50) + 20 ))
printf "*6\r\n\$4\r\nHSET\r\n\$${#HASH_KEY}\r\n${HASH_KEY}\r\n" printf "\$${#FIELD1}\r\n${FIELD1}\r\n\$${#VALUE1}\r\n${VALUE1}\r\n" printf "\$${#FIELD2}\r\n${FIELD2}\r\n\$${#VALUE2}\r\n${VALUE2}\r\n" ;;
list) LIST_KEY="${KEY_PREFIX}:list:${i}" for j in $(seq 1 $MEMBERS_PER_KEY); do VALUE="list_element_${i}_${j}" printf "*3\r\n\$5\r\nLPUSH\r\n\$${#LIST_KEY}\r\n${LIST_KEY}\r\n\$${#VALUE}\r\n${VALUE}\r\n" done ;;
set) SET_KEY="${KEY_PREFIX}:set:${i}" for j in $(seq 1 $MEMBERS_PER_KEY); do MEMBER="set_member_${i}_${j}" printf "*3\r\n\$4\r\nSADD\r\n\$${#SET_KEY}\r\n${SET_KEY}\r\n\$${#MEMBER}\r\n${MEMBER}\r\n" done ;;
zset) ZSET_KEY="${KEY_PREFIX}:zset:${i}" for j in $(seq 1 $MEMBERS_PER_KEY); do SCORE="${i}${j}" MEMBER="zset_member_${i}_${j}"
printf "*4\r\n\$4\r\nZADD\r\n\$${#ZSET_KEY}\r\n${ZSET_KEY}\r\n\$${#SCORE}\r\n${SCORE}\r\n\$${#MEMBER}\r\n${MEMBER}\r\n" done ;; esac
i=$((i+1)) done | ( echo "📤 正在通过 redis-cli --pipe 导入数据..."
REDIS_CLI_CMD="redis-cli -h ${REDIS_HOST} -p ${REDIS_PORT}"
if [ -n "${REDIS_PASSWORD}" ]; then REDIS_CLI_CMD="${REDIS_CLI_CMD} -a ${REDIS_PASSWORD}" fi
${REDIS_CLI_CMD} --pipe
if [ $? -eq 0 ]; then echo "✅ 数据导入成功!共导入 ${DATA_COUNT} 条 [${DATA_TYPE}] 记录。" else echo "❌ 数据导入失败!请检查 Redis 服务是否运行以及配置是否正确。" fi )
|