python - hset() 用于 python 中的 redis

标签 python redis hashset

我有下一个问题:

我在 python 中为 Redis 服务器使用 hset() 过程。此过程描述 here .

好的,现在我无法理解参数 value...从一方面来说它应该是数字 0 或 1,无论如何我也可以为这个参数使用其他数字(而且我也在 net 中查找具有其他值的示例)。例如我定义下一个 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 是什么意思?

最佳答案

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

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

redis_server.hset(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。

关于python - hset() 用于 python 中的 redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24014531/

相关文章:

python - 为什么在该可哈希对象的集合中找不到我的可哈希对象,该集合是另一个对象的属性?

python - 将外部提供的缓冲区复制到字节的最有效方法是什么

python - 比较具有不同 x 轴值的直方图

Redis - HMSET 一个 json 对象

Java HashSet 包含对象

python - 如何调试 PyQt 崩溃?

python - Celery:访问链中的所有先前结果

java - 使用 "begin with"而不是 "contains"重新搜索查询

java - 从 HashSet 中删除元素

java - 如何声明和初始化包含 HashSet 的 HashMap