Python中Redis的hset()函数

7

我有一个问题:

我在使用Python中的Redis服务器的hset()过程。该过程的描述在这里

现在,我无法理解参数value... 一方面,它应该是0或1,但是我也可以使用其他数字作为此参数(我在网络上也找到了其他值的示例)。例如,我定义以下函数:

    def setHashKeyValue(key, value, number):
        assert (key != None), "Please, get a key"
        #assert (number == 0 or number ==1), "Please enter 0 or 1"
        redis_server.hset(key, value, number);

下面这些参数,我得到了正确的输出结果:
setHashKeyValue('5', 'test ok for key 5', 1)
setHashKeyValue('6', 'test ok for key 6', 1)

另一方面,我想定义一些循环进行时间测量,因此我定义了以下def函数:
def loopKeyValues(number):
    timeUse = []
    for x in range(number):
        start = time.time()
        setHashKeyValue(x, x**2, 1)
        end = time. time()
        timeUse.append(end-start)
    plt.plot(timeUse)
    plt.ylabel("time")
    plt.show()
    return timeUse;

and

print loopKeyValues(1000)

这个函数给我返回了一个关于HashValue的错误信息:

redis.exceptions.ResponseError: WRONGTYPE Operation against a key holding the wrong kind of value

当我使用set()代替hset()时,程序返回了一个漂亮的时间图。这里可能存在问题,参数value是什么意思?
1个回答

16

value参数只是哈希对象条目的键。

哈希对象类似于Python字典。它们提供关联数组。当您编写:

redis_server.hset(key, value, number)

这意味着哈希对象“key”将被添加/设置为一个条目“value”/“number”。在Python中,您可以编写:

key[value] = number

你遇到了错误,因为在Redis中对象是有类型的。一旦你在给定的键上存储了一个字符串,Redis就不能再将这个对象视为哈希对象:因此,与哈希对象相关联的操作将无法针对此键起作用。

换句话说,如果您有:

SET 10 100

那么你就不能做以下事情:

HSET 10 100 1

但是你可以这样做:

DEL 10
HSET 10 100 1

我建议在使用Python脚本之前,先试用redis-cli程序来尝试Redis。


非常感谢,现在一切都清楚了。我只是以错误的顺序定义了我的参数。 - Guforu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接