type-6ren">
gpt4 book ai didi

redis - 获取 Redis 哈希中的字段类型

转载 作者:可可西里 更新时间:2023-11-01 11:25:22 25 4
gpt4 key购买 nike

我正在探索 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 中的字段类型?

最佳答案

  1. 无法获取散列中的字段类型,TYPE 仅适用于父键。

  2. 您可以使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com