下面是我的lua脚本
if redis.call('sismember',KEYS[1],ARGV[1])==1
then redis.call('srem',KEYS[1],ARGV[1])
else return 0
end
store = tonumber(redis.call('hget',KEYS[2],'capacity'))
store = store + 1
redis.call('hset',KEYS[2],'capacity',store)
return 1
当我在java中运行这个srcipt时
@user_script:1: WRONGTYPE Operation against a key holding the wrong kind of value
抛出,java代码就像
Object ojb = jedis.evalsha(sha,2,userName.getBytes(),
id.getBytes(),id.getBytes()) ;
在我的代码中,用户名是“tau”,id是“002”,我测试“tau”和“002”的类型,如下所示,
127.0.0.1:6379> type tau
set
127.0.0.1:6379> type 002
hash
确切地说,它们的内容是:
127.0.0.1:6379> hgetall 002
name
"鏁版嵁搴撲粠鍒犲簱鍒拌窇璺?
teacher
"taochq"
capacity
54
127.0.0.1:6379> smembers tau
002
004
001
127.0.0.1:6379>
现在我很困惑,不知道怎么了,任何帮助都会很感激的
2条答案
按热度按时间1yjd4xko1#
这个错误非常冗长-您试图对错误类型的键执行操作。
跑
MONITOR
然后你的脚本-然后你就可以很容易地发现错误。jmo0nnb32#
请将脚本作为:
你看看它是否管用。很可能,
userName.getBytes()
以及id.getBytes()
你所期望的不会回来。使用MONITOR
正如itamar所建议的,查看服务器实际收到了什么。你会得到一个不同的问题:
Script attempted to create global variable 'store'
. 添加local
到第五行: