簡體   English   中英

python redis客戶端無法使用.hgetall(key)獲取現有的哈希值

[英]python redis client fails to get existing hash values using .hgetall(key)

我遇到一種情況,當使用.hgetall(key)進行請求時,redis緩存的db2中一個明顯可知的哈希值消失了。 我希望獲得一些見識! 謝謝。

是的,所以...首先,一小段代碼:

def from_cache(self, cachekey):
    """ pull oft needed material from our persistent redis memory cache, ensuring of course that we have a connection """

    try:
        log.debug('trying to get \'%s\' from cache' % cachekey)
        return self.redis.hgetall(cachekey)
    except Exception, e:
        self.connect_to_cache()
        return self.redis.get(cachekey)

導致:

2013-05-21 14:45:26,035 23202 DEBUG trying to get 'fax:1112223333' from cache
2013-05-21 14:45:26,036 23202 DEBUG initializing connection to redis/cache memory localhost, port 6379, db 2...
2013-05-21 14:45:26,039 23202 ERROR stopping with an exception
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/simpledaemon/base.py", line 165, in start
    self.run()
  File "newgov.py", line 51, in run
    if self.ready_for_queue(fax):
  File "newgov.py", line 61, in ready_for_queue
    if self.too_many_already_queued(fax):
  File "newgov.py", line 116, in too_many_already_queued
    rules = self.from_cache(key)
  File "newgov.py", line 142, in from_cache
    return self.redis.get(cachekey)
  File "/usr/lib/python2.6/site-packages/redis/client.py", line 588, in get
    return self.execute_command('GET', name)
  File "/usr/lib/python2.6/site-packages/redis/client.py", line 378, in execute_command
    return self.parse_response(connection, command_name, **options)
  File "/usr/lib/python2.6/site-packages/redis/client.py", line 388, in parse_response
    response = connection.read_response()
  File "/usr/lib/python2.6/site-packages/redis/connection.py", line 309, in read_response
    raise response
ResponseError: Operation against a key holding the wrong kind of value

這是redis中的內容:

$ redis-cli
redis 127.0.0.1:6379> SELECT 2
OK
redis 127.0.0.1:6379[2]> type fax:1112223333
hash
redis 127.0.0.1:6379[2]> hgetall fax:1112223333
1) "delay"
2) "0"
3) "concurrent"
4) "20"
5) "queued"
6) "20"
7) "exclude"
8) ""

查看您的Python堆棧跟蹤:“返回self.execute_command('GET',name)”失敗。 這意味着:

  • hgetall命令失敗(可能是因為之前未建立連接)
  • 引發異常並陷入您的方法中
  • Redis連接已建立(我想通過調用connect_to_cache())
  • 然后您嘗試運行“ self.redis.get(cachekey)”
  • 它當然會失敗,因為cachekey的內容是哈希的鍵(而不是字符串)(在這里我想應該使用hgetall代替)
  • 引發另一個異常-Redis錯誤是類型錯誤(針對具有錯誤類型值的鍵進行的操作)

使用redis-cli,嘗試運行“ GET Fax:1112223333”,您將遇到相同的錯誤。

設置和設置時有不同類型的數據。 在hset中,您的值是哈希映射。 當您嘗試獲取哈希圖時,您將遇到相同的錯誤。 只需嘗試hgetall和redis將返回哈希圖,或嘗試使用帶有cachekey和已設置哈希圖的任何鍵的hget並享受

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM