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

标签 redis redis-cache

我正在探索 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/

相关文章:

redis - Azure Redis 缓存未正确过期

node.js - 如何使用Redis缓存进行分页?

ruby-on-rails - 我刚刚部署了 discourse 应用程序,在 Heroku db :migrate. 期间出现错误,可能是 redis 无法连接

c - 为什么与 Redis 的单一连接性能不佳以及如何使其更快

amazon-web-services - 在 AWS 中扩展聊天的想法?

nestjs:如何在typeorm中删除带有前缀的redis缓存

spring - java.lang.ClassCastException : DTOObject cannot be cast to DTOObject

node.js - 实时数据库消息传递

python - 在 Celery 任务中使用 Redis 连接和保存数据

caching - Redis 缓存 - "Server Closed the connection"错误