Python Redis-使用hmset和set存储字典的区别

Python Redis-使用hmset和set存储字典的区别,python,redis,Python,Redis,我刚开始使用Redis,我想用它来为我正在创建的应用程序存储关于用户的临时数据,因此基本上每个用户都有一个记录,用户名是键,值是一个包含一些数据的字典,我需要在一段时间后使每个记录过期,在本例中为1分钟: from datetime import timedelta import redis import json r = redis.Redis() r.setex( "user_1", timedelta(minutes=1), value="

我刚开始使用Redis,我想用它来为我正在创建的应用程序存储关于用户的临时数据,因此基本上每个用户都有一个记录,用户名是键,值是一个包含一些数据的字典,我需要在一段时间后使每个记录过期,在本例中为1分钟:

from datetime import timedelta
import redis
import json

r = redis.Redis()

r.setex(
   "user_1",
   timedelta(minutes=1),
   value="{'messages': 0, 'channel': xx}"
)

r.setex(
   "user_2",
   timedelta(minutes=1),
   value="{'messages': 0, 'channel': xy}"
)


o = r.get("user_2")

print(o.decode("utf-8"))

因此,如果我正确理解Redis,我将创建一系列字典,如:
{“user_1”:“{'messages':0,'channel':xx}”}
等等。我的问题是:我所做的和使用
hmset
有什么区别?我注意到,为了存储字典,一般的建议是使用
hmset
,但我所做的是有效的,那么有什么区别呢?

如果您想访问记录的各个字段,通常会将数据存储在哈希映射中

例如:

redis>  HSET user1 messages "0" channel "xx"

(integer) 1

redis>  HSET user2 messages "0" channel "xx2"

(integer) 1

redis>  HMGET user1 channel

1) "xx2"

另一方面,现在要访问user1的通道,您需要拉下整个记录,然后访问字段(我不记得是否需要使用json.loads将其转换回Python中的dict)。

我的理解是,这只是使用字典的一种更有效的方法。您可以更改单个键的值,而使用set可以替换整个dict的值,即使dict中只有一个键需要更改。非常感谢!这一点现在很清楚了,我只是想确定我没有做错什么。非常感谢!