hset()for python中的redis

时间:2014-06-03 11:54:40

标签: python redis hashset

我有下一个问题:

我在python中使用Redis Server的hset()过程。该过程描述为here

好吧,现在我无法理解参数value ......一方面它应该是一个数字0或1,无论如何我还可以使用其他数字作为这个参数(我也找到了例子)净与其他价值观)。例如,我定义下一个def:

    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;

print loopKeyValues(1000)

此函数返回HashValue的错误消息:

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

当我使用set() - def而不是hset()时,程序会给我一个很好的时间图。这里可能存在什么问题,参数value是什么意思?

1 个答案:

答案 0 :(得分:7)

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

哈希对象就像Python词典。它们提供关联数组。当你写:

redis_server.hset(key, value, number)

这意味着将使用条目“value”/“number”添加/设置散列对象“key”。在Python中,你会写:

key[value] = number

您收到错误,因为在Redis中键入了对象。在给定键存储字符串后,Redis不再考虑此对象是一个哈希对象:因此与哈希对象关联的操作将不适用于此键。

换句话说,如果你有:

SET 10 100

然后你不能这样做:

HSET 10 100 1

但是你可以这样做:

DEL 10
HSET 10 100 1

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