【问题标题】:Check redis get key available, if else python script检查redis获取密钥是否可用,如果是python脚本
【发布时间】:2015-04-15 04:23:57
【问题描述】:

我目前正在为我自己的 3d 打印机使用 redis 设计一个自动 FIFO 队列,我是 python 脚本和 redis 的新手。感谢您提出任何更好的想法。

我在创建一个 python 脚本来检查一个键值是否可用时遇到了麻烦。

目前我的python脚本是

import redis
import os
import time

r = redis.StrictRedis(host='172.16.114.54', port=6379, db=0)

if r.lrange('stlfile',0 ,0) == None:
        print 'there is no key'
else:
        print r.lrange('stlfile',0 ,0)

输出:

root@user:~/scripts# python autoslice.py
['172.16.114.162/registered/uploads/teemo.stl']

虽然我的 redis 有这些值

172.16.114.54:6379> lrange stlfile 0 -1
1) "172.16.114.162/registered/uploads/teemo.stl"
2) "172.16.114.162/registered/uploads/hunter_knife.stl"

我目前可以做一个 r.lrange('stlfile', 0,0) 并且我的第一个键值将输出。

第一个问题:我如何执行 python 脚本来检查是否存在值或出现“nil”?我应该做一个字符串检查吗?

第二个问题:我的值 r.lrange('stlfile', 0,0) 出现了,这是我想要的,但没有 ['xxx'] (引号),我该如何删除他们自动? (只留下xxx值)

我曾尝试使用此方法删除我的引号,但无济于事 python How can I strip first and last double quotes

string = string[1:-1]

>>>r = redis.StrictRedis(host='172.16.114.54', port=6379, db=0)
>>>string = r.lrange ('stlfile', 0, 0)
>>>x = string[1:-1]
>>>print x
[]

不太清楚为什么我的输出是 [] 而不是不带引号的字符串

【问题讨论】:

    标签: python redis


    【解决方案1】:

    1) 您可以针对None 测试您的返回值

    if key_value == None:
       print 'there was no key'
    else:
       print 'key_value was', key_value
    

    2) 是什么让您认为返回的值带有引号?你确定是这样吗?看看这个:

        ~ mgregory$ python
    Python 2.7.5 (default, Mar  9 2014, 22:15:05) 
    [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> one = "a"
    >>> print one
    a
    >>> one
    'a'
    >>> result = [one]
    >>> print result
    ['a']
    >>> value = result[0]
    >>> print value
    a
    >>> 
    

    请注意,redis.StrictRedis() 返回的值不是字符串,而是数组。

    我们知道这一点是因为 x 是一个数组 - 当您最终打印它时,它是一个空数组。

    它是空的并不奇怪,因为它从一个元素开始,然后你从中减去两个元素。

    如果你真的认为来自 redis 的项目确实有引号,那么你需要这样做

    result = r.lrange ('stlfile', 0, 0)
    string = result[0]
    x = string[1:-1]
    print x
    

    我预测这将导致您的字符串缺少第一个和最后一个字符 - 我不相信实际上来自 redis 的结果中有引号。

    也许你的问题的核心是你认为结果是一个字符串,而实际上它是一个数组....

    【讨论】:

    • 当我设置 stlfile 0 0 时,我的值显示为 ['XXXXX'] tho
    • 这看起来像一个包含单个字符串的数组。假设你得到这样的结果result = redis.StrictRedis(host='172.16.114.54', port=6379, db=0)。试试这个:print result[0]。我想你会发现它实际上没有引号,它只是一个数组的打印表示。我已经在我的回答中更新了“看看这个”来演示
    • 如果我的变量是在 python 脚本本身中声明的,这将起作用。但我正在尝试检查redis中是否有任何变量可用。我在上面的帖子中添加了更多信息。
    • 你的 If else 帮助了我!谢谢! :D
    • 刚刚更新,您的预测是正确的! print x 现在打印我的预期结果!感谢您的帮助!
    猜你喜欢
    • 2016-05-14
    • 2020-08-19
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2012-06-15
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多