参考: https://stackoverflow.com/questions/16375188/redis-strings-vs-redis-hashes-to-represent-json-efficiency
现有一个有多属性的对象,如何在redis中存储比较合适?
例如:user : { id , name , sex , age , …}
取决于业务场景,在多数访问中是取该对象的所有属性还是只需要该对象的某些属性?
-
使用String :
用 user + id 作为 key , 其他属性编码为JSON,作为value存储。例如:
SET user:{id} '{"name":"Fred","age":25}'
每次都能通过 id属性精准的找到对应user的所有属性
优点:通过id精确查找,速度很快,合适查找单个对象所有属性的业务情景。
缺点:若只访问单个属性,需解析JSON , 相比之下较慢 。
-
使用 Hash:
使用 users 作为 key + id作为 key , 其他属性的key作为 field , 属性的值作为value ,建立一个hash 存储所有的user
HMSET user:{id} name "Fred" HMSET user:{id} age 25
优点: 无需解析JSON字符串 ,适合每次查只需要user的单个属性。
缺点:查找多个属性时要多次查找,不合适。