redis - Redis 中嵌套结构的替代方案?

标签 redis

我经常遇到这样的情况:我要存储的信息比 Redis 的任何简单数据结构所能容纳的信息都多。我仍然想使用 Redis,但我想知道人们在理想情况下想要使用嵌套结构时是否有任何标准的替代方案?

最佳答案

你基本上有两种策略:

  • 您可以序列化您的复杂对象并将它们存储为字符串。我们建议使用 json 或 msgpack 作为序列化格式。这很容易从大多数客户端语言进行操作。如果需要服务器端访问,那么服务器端 Lua 脚本可以轻松地编码/解码此类对象,因为 Redis 是使用 Lua 的 msgpack 和 json 支持编译的。

  • 您可以将对象拆分为不同的键。您可以存储几个键,例如 user:id、user:id:address_list、user:id:document_lists 等,而不是将 user:id 和复杂的数据结构存储到此 id ...如果您需要原子性,流水线化 MULTI/EXEC block 可用于保证数据一致性,并聚合往返。

请参阅此答案中的一个简单示例:

Will the LPUSH command work on a record that was initialized from JSON?

最后,Redis 不是一个面向文档的数据库。如果你真的有很多复杂的文档,也许你可以使用 MongoDB、ArangoDB、CouchDB、Couchbase 等解决方案更好地服务......

关于redis - Redis 中嵌套结构的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16094574/

相关文章:

go - redis中mget()的时间复杂度是多少?

node.js - 无法在 app.get 方法中连接 redis

php - Redis存储在数组中

json - AWS 弹性缓存 : Is it possible Redis compatible Elasticache to store Json Files

mysql - ruby rails : Creating a model with multiple data sources

heroku - 在 Heroku 上有什么好的页面缓存替代方案?

redis - 如何从redis中的值中获取键

node.js - 客户端也是 ExpressJS 应用程序时的 Cookie 处理

redis - 使用 Redis 命令 incr 和 expire 时的竞争条件

ruby-on-rails - 在 Passenger 中运行时使用 RedisStore 进行缓存时出现 Errno::EMFILE(打开的文件过多 - 套接字(2))