Redis - 用于存储多个对象的选项

Redis - Option for storing multiple objects

当我们需要存储同一类别的多个对象时,redis 中的最佳实践是什么?

目前我将整个对象存储为 json 字符串。

例如:书籍。

{
   title:...,
   author:...
}

选项 1:

set book:1 book1
set book:2 book2
set book:3 book3

用法:get book:1 给我书对象。

选项 2:散列

hset book 1 book1
hset book 2 book2
hset book 3 book3

用法:hget book 1 会给我整本书对象

在性能或使用等方面是否存在巨大差异? 如果您想到任何其他方法,请分享!

用于存储 JSON 个对象的字符串与哈希

哈希和字符串的大部分相关操作在时间复杂度上是等价的(GET/HGET/MGET/HMGET/SET/HSET)。使用 strings(GET/SET) 的唯一缺点是,如果您担心能够扫描整套书籍,因为 SCAN and KEYS commands operate over the entire keyspace (every key in Redis) - even if your pattern was books:*, Redis would still need to iterate over all the keys. Whereas HSCAN and HGETALL 仅在散列上运行。换句话说,如果你在 Redis 中存储了很多东西,并且你希望能够遍历你的所有书籍,那么 HASH 可以节省你一些时间。

在 Redis 中存储 JSON

你在评论中问了一个问题存储JSON是否是不好的做法,它肯定没有错,而且很常见,使用JSON的唯一缺点是你只能GET/SET 整个字符串,每次您从 Redis 中提取数据时,您的应用程序都必须从 JSON 编组数据并将其序列化回 JSON 每当您想要将更新发送到数据库。如果这是一个问题,可以使用 RedisJson 模块来解决,但这是一个完全独立的主题。