你如何在 Redis 中设置一个布尔值?

How do you set a boolean value in Redis?

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

我正在使用 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中使用它也很自然。" - 不可能以“简单”的方式做到。

但是关于您需要什么,您可以创建一些 class 到 write/read 的任何类型的数据。

例如,它在 Rails ActiveRecord Cache

中的实施方式

使用 next Marshal 的方法对这个相当大 class 的一些简单解释:dump and load

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