gpt4 book ai didi

ruby - 你如何在 Redis 中设置一个 boolean 值?

转载 作者:行者123 更新时间:2023-12-05 02:04:48 25 4
gpt4 key购买 nike

当我将 boolean 值 (true) 设置为 Redis 中的键时,该值会被强制转换为字符串 ("true")。使用 memcached,我可以取回我放入的内容。但是使用 Redis,它似乎将所有内容都字符串化了。我找不到有关如何解决此 boolean 问题的任何文档。没有特殊的 boolean_set 方法或 boolean 选项。

我正在使用 Ruby。

示例如下。

设置:

require 'redis'
@redis = Redis.new

在 irb 中运行:

irb(main):034:0> bool = true
=> true
irb(main):035:0> bool
=> true
irb(main):036:0> @redis.set("example", bool)
=> "OK"
irb(main):037:0> @redis.get("example")
=> "true"
irb(main):038:0> @redis.get("example") == bool
=> false

最佳答案

“Redis String 类型是最简单的可以与Redis 键关联的值类型。它是Memcached 中唯一的数据类型,因此新手在Redis 中使用它也很自然。” - 不可能以“简单”的方式完成。

但是关于您需要什么,您可以创建一些类来写入/读取任何类型的数据。

例如,它是如何在 Rails ActiveRecord Cache 中实现的

使用 next Marshal 的方法对这个相当大的类进行一些简单的解释:dumpload

class RedisAnyTypesHandler
def initialize(redis)
@redis = redis
end

def write(key, value)
@redis.set(key, serialize(value))
end

def read(key)
deserialize(@redis.get(key))
end

private

def serialize(value)
Marshal.dump(value)
end

def deserialize(value)
Marshal.load(value)
end
end

现在您可以使用任何类型的数据:

> redis_handler = RedisAnyTypesHandler.new(@redis)
> bool = true
=> true
> redis_handler.write('example', bool)
=> "OK"
> redis_handler.read('example') == bool
=> true

> class Foo
> attr_accessor :foo
> end
=> nil
> foo = Foo.new
=> #<Foo:0x0000556dc19097f8>
> foo.foo = 2
=> 2
> redis_handler.write('example_2', foo)
=> "OK"
> redis_handler.read('example_2').foo
=> 2

关于ruby - 你如何在 Redis 中设置一个 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64052785/

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