将数据推送到列表时,针对在 Redis 中保存错误类型值的键进行操作
Operation against a key holding the wrong kind of value in redis when pushing data on a list
创建了 redis 列表并设置了密钥,如下所示让我出错
public async Task MyMethod<T>()
{
//if i'm doing following it is working
string listname = "listname";
string listkey = "key";
RedisList<string> demodemo = new RedisList<string>(Settings, listname);
await demodemo.LeftPush(listkey);
//but i want to do it like below it is thoughing exception
RedisList<string> list = new RedisList<string>(Settings, typeof(T).Name.ToString());
string mykey = "myId";
await list.LeftPush(mykey);
getting following error :
Result Message: StackExchange.Redis.RedisServerException : ERR
Operation against a key holding the wrong kind of value
作为旁注; RedisList<T>
不是 SE.Redis 类型,所以我不能直接对此发表评论。但是:当您尝试做没有意义的事情时,该错误消息来自 redis-server 本身;例如,如果 foo
是 字符串 ,则不能 lpop foo
或 zcard foo
.
所以问题变成了:存储的值是多少?我无法为您回答,但是:服务器可以。如果您熟悉 redis-cli,那么 debug object foo
或 object encoding foo
可能会有用。老实说,您可能也可以通过猜测来做:
strlen foo
- 如果可行,它是一个字符串
hlen foo
- 如果可行,它就是一个散列
llen foo
- 如果可行,它就是一个列表
scard foo
- 如果可行,它就是一个集合
zcard foo
- 如果可行,则它是一个排序集
请注意,所有这些命令都可以通过 SE.Redis 获得,但对于调查可疑数据库,redis-cli 通常更容易。
可能发生的情况是您在没有意识到的情况下不小心重复使用了一个键名。这也许是一个很好的广告,说明了为您的键名添加前缀的价值 - SE.Redis 在与数据库对话时可以自动为您做的其他事情。
创建了 redis 列表并设置了密钥,如下所示让我出错
public async Task MyMethod<T>()
{
//if i'm doing following it is working
string listname = "listname";
string listkey = "key";
RedisList<string> demodemo = new RedisList<string>(Settings, listname);
await demodemo.LeftPush(listkey);
//but i want to do it like below it is thoughing exception
RedisList<string> list = new RedisList<string>(Settings, typeof(T).Name.ToString());
string mykey = "myId";
await list.LeftPush(mykey);
getting following error :
Result Message: StackExchange.Redis.RedisServerException : ERR Operation against a key holding the wrong kind of value
作为旁注; RedisList<T>
不是 SE.Redis 类型,所以我不能直接对此发表评论。但是:当您尝试做没有意义的事情时,该错误消息来自 redis-server 本身;例如,如果 foo
是 字符串 ,则不能 lpop foo
或 zcard foo
.
所以问题变成了:存储的值是多少?我无法为您回答,但是:服务器可以。如果您熟悉 redis-cli,那么 debug object foo
或 object encoding foo
可能会有用。老实说,您可能也可以通过猜测来做:
strlen foo
- 如果可行,它是一个字符串hlen foo
- 如果可行,它就是一个散列llen foo
- 如果可行,它就是一个列表scard foo
- 如果可行,它就是一个集合zcard foo
- 如果可行,则它是一个排序集
请注意,所有这些命令都可以通过 SE.Redis 获得,但对于调查可疑数据库,redis-cli 通常更容易。
可能发生的情况是您在没有意识到的情况下不小心重复使用了一个键名。这也许是一个很好的广告,说明了为您的键名添加前缀的价值 - SE.Redis 在与数据库对话时可以自动为您做的其他事情。