redis缓存中的“RedisValue”值参数中不允许使用哪些字符?

Which charatcer are not allowed in "RedisValue" value argument in redis cache?

提问人:Akshay Kale 提问时间:3/31/2023 更新时间:4/3/2023 访问量:117

问:

我必须将 redis 键和值存储在 redis chache 中。但是,我要保存的 redisValue 是一个长度为 1976 个字符的 Json 字符串,它有 -> {,},[,],“,-,:除数字、字母外的字符。但是在存储它时说无效的论点。

那么 redisValue 中是否不允许使用上述任何字符,或者是否有任何字符限制? 或者重新贬值的无效参数异常的可能原因是什么?

提前致谢。

C# .NET Redis 本地存储 redis-cache

评论

0赞 Marc Gravell 3/31/2023
如果您看到无效的论点:我有兴趣在这里看到任何示例代码,当您看到这个时显示(上下文:我是 SE 的主要维护者。Redis)。出于“可能的原因”,我真的需要查看代码。
0赞 Akshay Kale 3/31/2023
在 Ubuntu 中。我已经启动了 redis-cli,之后在下面的 command->set “redisKey” “RedisValueJson” 当我按回车键时,它显示“无效参数”错误
1赞 Marc Gravell 3/31/2023
右;所以这是完全不同的东西;您没有使用 C#、.NET 等;你正在使用一个完全不同的东西;redis-cli 需要字符串转义,因为它使用可选的带引号的语法,即在命令中,我们传递两个参数而不是四个参数;你正在触及的正是这种转义 - 但这与 Redis 实际可以存储的内容没有任何关系 - 这只是 redis-cli 的一个限制;IIRC 它是 C 样式的转义,所以我猜会在值中插入引号值。对 JSON 执行此操作会很乏味;但再说一遍:这是set redisKey "a b c""a\"b\"c
0赞 Marc Gravell 3/31/2023
纯粹是 redis-cli 的功能,而不是 redis 或任何特定的 redis 客户端的功能(好吧,我想你可以说这是 RESP1 的限制,但大多数客户端谈论 RESP2/RESP3;redis-cli 是为人类准备的,而不是机器,所以它使用了不同的方法)

答:

0赞 Marc Gravell 3/31/2023 #1

假设这里来自 StackExchange.Redis;它被视为使用二进制安全 API 传输的不透明数据;没有不允许的字符。对于限制:由于 .NET 对象(包括字符串实例)的 2GB 限制,对于非常大的字符串,事情总是会变得毛茸茸的,但是:你离这个目标还很远。在内部,redis 可能有 512MiB 的限制,这是在 UTF-8 编码值上。RedisValue

0赞 Akshay Kale 4/3/2023 #2

-> Redis CLI 不允许直接输入双引号。我们要么使用转义序列,要么将双引号替换为任何其他字符,然后插入它。 就我而言,我用 $ 替换了双引号,并且能够将 json 添加为 redisValue。

谢谢大家的帮助