redis可以存储比较复杂的json类型数据嘛,并且可以根据json k,v 进行查询?

2013-02-03 03:20:47 +08:00
 ergatea
37309 次点击
所在节点    Redis
9 条回复
Livid
2013-02-03 03:23:47 +08:00
这个需求看起来应该是更适合用 MongoDB 解决。
ergatea
2013-02-03 07:39:30 +08:00
目前用的是mongodb,考虑到数据不需要永久保存,而mongodb是内存映射存储,考虑使用redis,对redis,不了解。
luikore
2013-02-03 07:52:14 +08:00
redis 的集合都是平的

但是用 ohm 在语言层面处理嵌套数据

http://soveran.github.com/ohm/
kebot
2013-02-03 23:35:47 +08:00
json对象可以存在redis-hash里面, 但是value只能是字符串, 你可以在应用层做一些工作, 比如把value变成另外一个redis-hash的key...
ergatea
2013-02-04 01:41:56 +08:00
谢谢各位,看了一些资料觉得还是可以做到的。
ewangke
2013-02-04 04:13:53 +08:00
@ergatea MongoDB可以根据数据量作cap
saharabear
2013-02-04 04:36:42 +08:00
我还是感觉你在谈PostgreSQL的强项。
ergatea
2013-02-04 06:01:44 +08:00
我的需求比较特殊,redis吸引我的是性能和EXPIRE
posts =[{'slug':'hash','body':json,'...':'...'},{},{}]
数据中body是json文件不需要持久存储,基于文件,我不打算存储
mongodb store [{'slug':'hash','...':'...'},{},{}]
redis store hset('post:user:slug:hash' body pickle.dumps(json))
jackyz
2013-02-04 09:08:44 +08:00
不知道是否准确理解了你的问题。

单层的 key-val 结构可以直接用 redis hash 存储 object-id: [key: val, key: val, ...]
多层的 key-val 结构,可以把 key 压平,继续存在 redis hash 里 object-id: [key: val, keyl1.keyl2: val, ...] 根据 redis 的文档,这种结构在 key 的数量很大(超过 255 个以上,有相关配置)时效率开始下降。
层次更多以及 key 的数量不一定的结构,可以参考 full-text-index 的反向索引方案 object-id: [key, key, ...] key: [object-id, object-id, ...] 这等于是自己用逻辑实现了索引。

redis 这类 low level 东西的限制是:只能按 key 来查,没有 key 查询效率就很糟糕。这是坏事(不理解的话,就觉得不好用),同时也是好事(这种限制,显式地表达了索引逻辑,即,没建索引就查询不了)。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/59618

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX