我们正在将会话存储从应用程序服务器转移到 Redis。 session值大约是2k(我知道这个值很大,以后会大幅缩小)。 我们将在那里存储大约 1000 万个会话。
问题是我们应该将每一个存储为键/值还是将它们全部保存在一个哈希对象中?两者之间有什么好处吗?
从我的角度来看,键/值和哈希之间最大的区别在于使用 TTL。
因此,您可以在键/值或整个哈希上使用
TTL
,而不是针对某个特定哈希字段。 您不能将 TTL
用于 HASH
儿童归档
要考虑的另一件事是手册页,它说哈希类型适合表示对象。但您也可以使用它们。
您可以使用哈希作为每个用户会话对象,如果您需要设置
TTL
,请通过 EXPIRE
命令将其设置为哈希键。
我认为你不需要在这两种类型之间进行选择,你可以将它们结合起来!期望将 json 字符串保存到键/值对中。
例如,我是这样设置用户123会话数据的,该数据将在5分钟(300秒)后过期:
redis> HSET SESSION:123 firstname "Ali" lastname "Malek" credentials "P@sSw0rd"
1
redis> EXPIRE SESSION:123 300
1
redis> HGET SESSION:123 username
"Ali"
您可以用
SESSION:123
更改
SESSION:{session_id}
我并没有真正理解“一个哈希对象”部分。使用哈希值,问题是您无法取回数据。
只需jsonify你的session对象,并将其存储为key / val,key是存储在客户端cookie中的session_id。