我正在探索 Redis,我创建了一个 key 服务器,我可以获取存储在此处的值的类型,如下所示:
> set server terver
OK
> get server
"terver"
> type server
"string"
但是当我创建散列 myhash 时,
> hset myhash field1 lalalal
(integer) 1
> hset myhash field2 hahaha
(integer) 1
> type myhash
"hash"
我无法获取散列中的字段类型
> type myhash field1
(error) wrong number of arguments (given 2, expected 1)
> type myhash.field1
"none"
这里如果我查询
>hincrby myhash field1 2
(error) ERR hash value is not an integer
这表明类型存在于散列和操作中。
type myhash.field1
showing "none"
不能是类型,因为它是字符串。
那么如何获取 myhash
中的字段类型?
最佳答案
无法获取散列中的字段类型,
TYPE
仅适用于父键。您可以使用 Lua 脚本来做您想做的事,但要非常清楚 Redis 如何处理不同的数据类型和内部转换,并根据这些在您的 Lua 脚本中编写逻辑。
127.0.0.1:6379> set server terver OK 127.0.0.1:6379> get server "terver" 127.0.0.1:6379> type server string 127.0.0.1:6379> hset myhash field1 lalala (integer) 1 127.0.0.1:6379> hset myhash field2 hahaha (integer) 1 127.0.0.1:6379> type myhash hash 127.0.0.1:6379> type myhash.field1 none 127.0.0.1:6379> type NotExistingKey none 127.0.0.1:6379> eval "return redis.call('hget','myhash','field1')" 0 "lalala" 127.0.0.1:6379> eval "return type(redis.call('hget','myhash','field1'))" 0 "string" 127.0.0.1:6379> hset myhash field3 42 (integer) 1 127.0.0.1:6379> eval "return redis.call('hget','myhash','field3')" 0 "42" 127.0.0.1:6379> eval "return type(redis.call('hget','myhash','field3'))" 0 "string" 127.0.0.1:6379> hget myhash field3 "42"
因此在您的 Lua 脚本中,您必须先检查字符串模式是否为数字,然后再将其类型分类为数字。
关于redis - 获取 Redis 哈希中的字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46088918/