-
Notifications
You must be signed in to change notification settings - Fork 619
Description
Tiny RDM Version
v1.2.5
OS Version
Windows 10
Redis Version
7.0.15
Describe the Bug
在使用 tiny-rdm 管理 Redis 时,当键名或键值包含前导或尾随空格时,这些空格会被意外移除,导致数据存储和操作行为与标准 Redis 客户端不一致。
Steps to Reproduce
1. 字符串键值测试
使用 tiny-rdm 设置键值:set test1 " leading" (包含前导空格)
使用 redis-cli 读取:返回 "leading" (空格被移除)
而使用 redis-cli 直接设置和读取时,空格会保留
2. 列表操作测试
使用 tiny-rdm 创建列表:rpush mylist " item1"、rpush mylist "item2 "、rpush mylist " item3 "
使用 redis-cli 读取时,所有空格都被移除
当尝试执行 linsert mylist before "item2 " " newitem" 时操作失败,因为实际存储的值是 "item2" (无空格)
3. 集合测试
使用 tiny-rdm 添加集合元素:sadd myset " element1"、sadd myset "element2 "、sadd myset " element3 "
使用 redis-cli 读取时,所有空格都被移除
这导致带空格的元素实际上无法正确添加或检索
4. 哈希测试
使用 tiny-rdm 设置哈希字段:hset myhash field1 " value1"、hset myhash " field4" "test"
字段名和字段值中的空格都被移除
当字段名包含空格时,实际存储的字段名被修改,导致后续操作失败
5. 有序集合测试
使用 tiny-rdm 添加有序集合元素:zadd myzset 1 " member1"、zadd myzset 2 "member2 "、zadd myzset 3 " member3 "
使用 redis-cli 读取时,所有空格都被移除
这导致带空格的成员实际上无法正确添加或检索
6. APPEND命令测试
使用 tiny-rdm 执行 append key " value"、append key "value "、append key " value "时,空格会被移除,导致追加的值不正确
测试场景
场景1: tiny-rdm 设置,redis-cli 读取
# tiny-rdm 中执行
set test1 " leading"
# redis-cli 中读取
get test1
# 结果: "leading" (空格丢失)场景2: redis-cli 设置,tiny-rdm 读取
# redis-cli 中执行
set key " value "
# tiny-rdm 中读取
get key
# 结果: " value " (空格保留,因为这是实际存储的值)
# 但如果后续在 tiny-rdm 中修改,空格又会被移除根本原因
1. 前端自动 trim 处理
在 NewKeyDialog.vue 的 onAdd 函数中:
await browserStore.setKey({
server,
db,
key: trim(key), // 自动 trim 键名
keyType: type,
value, // 值可能在其他地方也被 trim 了
ttl,
})2. 命令构建时 trim
在 NewKeyDialog.vue 的 onAdd 函数中:
export const joinCommand = (path, args = [], emptyContent = '-') => {
let cmd = ''
path = trim(path) // trim 命令路径
// ...
for (let part of args || []) {
part = trim(part) // trim 所有参数
// ...
}
}影响
- 数据一致性破坏:相同的操作在不同客户端产生不同的结果
- 操作失败:依赖精确值匹配的操作(如 linsert、sismember)会失败
- 数据丢失:用户有意存储的空格被意外移除
- 字段名冲突:哈希中带空格的字段名被修改,可能导致冲突