Redis是否自动“自动”;“备忘录化”;或;识别重复项;?

Redis是否自动“自动”;“备忘录化”;或;识别重复项;?,redis,Redis,如果将两个k,v对按入具有相同值的Redis,即 set(k1, v) set(k2, v) Redis smarlty是否会在后台存储v并执行以下操作: set(somereference, v) set(k1, #somereference) set(k2, #somereference) 但是仍然返回(k1,v)、(k2,v) 我这样问是因为现在,从Python开始,我将值推送到redis中,形式如下: pickle({"some sequence number" : xxx, "im

如果将两个k,v对按入具有相同值的Redis,即

set(k1, v)
set(k2, v)
Redis smarlty是否会在后台存储v并执行以下操作:

set(somereference, v)
set(k1, #somereference)
set(k2, #somereference)
但是仍然返回
(k1,v)、(k2,v)

我这样问是因为现在,从Python开始,我将值推送到redis中,形式如下:

pickle({"some sequence number" : xxx, "image-bytes" : some long bytestring})

我想知道,如果其中两个dict实际上包含相同的图像,那么通过testring和redis只能存储一次底层值,那么我这样做是否值得

否,redis不会自行进行重复数据消除:

redis$ du -h dump.rdb
4.0K    dump.rdb
redis$ ipython3

In [1]: %paste
import os
from redis import StrictRedis

data = os.urandom(1024)
redis = StrictRedis()

for i in range(1000000):
    redis.set(f'key{i}', data)
## -- End pasted text --

In [2]:
Do you really want to exit ([y]/n)?
redis$ du -h dump.rdb
633M    dump.rdb
数据库转储是用LZW压缩的,所以它比预期的大小小一点


顺便说一句,我发现在打包和解包文本方面比pickle和其他几乎所有东西都快得多。

不,redis本身不进行重复数据消除:

redis$ du -h dump.rdb
4.0K    dump.rdb
redis$ ipython3

In [1]: %paste
import os
from redis import StrictRedis

data = os.urandom(1024)
redis = StrictRedis()

for i in range(1000000):
    redis.set(f'key{i}', data)
## -- End pasted text --

In [2]:
Do you really want to exit ([y]/n)?
redis$ du -h dump.rdb
633M    dump.rdb
数据库转储是用LZW压缩的,所以它比预期的大小小一点


顺便说一句,我发现在打包和解包文本方面比pickle和其他几乎所有东西都快得多。

msgpack支持字节吗?这是我在JSON上的主要问题。@Tommy:你必须启用一些选项,但是是的:
msgpack.unpacb(msgpack.packb(['a',b'a'],use_bin_type=True),raw=False)==['a',b'a']
msgpack支持字节吗?这是我使用JSON的主要问题。@Tommy:您必须启用一些选项,但是可以:
msgpack.unpacb(msgpack.packb(['a',b'a'],使用\u bin\u type=True),raw=False)==['a',b'a']