如何在redis中设置布尔值?

5lhxktic  于 2021-06-08  发布在  Redis
关注(0)|答案(1)|浏览(1539)

当我设置布尔值时( true )对于redis中的键,值被强制为字符串( "true" ). 有了memcached,我就能找回我放进去的东西。但对于redis来说,它似乎把一切都串起来了。我找不到任何关于如何解决这个布尔问题的文档。没有特殊的布尔集合方法或布尔选项。
我用的是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
ig9co6j1

ig9co6j11#

“redis字符串类型是可以与redis键关联的最简单的值类型。它是memcached中唯一的数据类型,所以对于新手来说在redis中使用它也是很自然的。
但是关于您需要什么,您可以创建一些类来写/读任何类型的数据。
例如,它是如何在rails activerecord缓存中实现的
使用next对这个相当大的类进行一些简单的解释 Marshal 的方法: dump 以及 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

相关问题