我正在尝试将Redis配置为Java应用程序中的缓存层。具体来说,Redis的预期用途将是维护会话状态。应用程序中的每个用户都将由以下内容表示:
我对如何使用Redis的哈希感到困惑。 Jedis
的界面是:
Jedis#hset(byte[] key, byte[] field, byte[] value)
也就是说,Redis哈希具有一个密钥,该密钥又指向另一个字段和值的映射。
我应该使用哪种设计:
到第二点,如果我想使条目到期,则必须在键级别而不是字段级别完成。但是,这意味着每个UUID在哈希中必须是一个单独的键,并且尚不清楚这是否是好的Redis设计。
答案 0 :(得分:3)
使用Redis散列作为会话状态非常普遍。标准方法是使用会话ID作为密钥,并将哈希字段用于其余会话状态。此设计具有以下理想特征:
我相信符合您的要求。
您对短语“ Redis哈希具有密钥”和“哈希中的密钥”的使用使我认为您误解了哈希的工作方式。密钥是哈希的名称(如果愿意),而不是哈希的成员。 HSET
签名指定要修改的哈希(密钥),以及要在其中设置的字段和值。
以下(使用Redis命令)创建会话的示例如下:
HMSET session:123 userId 5 last_login 2019-02-13 ...
EXPIRE session:123 2592000
然后您可以通过以下方式获取会话数据:
HGET session:123 last_login
或通过以下方式进行设置:
HSET session:123 last_login 2019-02-18