【问题标题】:How to store data with django redis如何使用 django redis 存储数据
【发布时间】:2015-11-22 13:12:00
【问题描述】:

我在我的 django 项目中使用 celery 和 redis。

# In tasks.py
@shared_task
def my_func():
    r = redis.StrictRedis()
    context = {
        "my_var1" : afunction(6)
        "my_var2" : afunction(10)
    }
    r.set('this_var', context)

# In views.py
def home(request):
    r = redis.StrictRedis()
    return render(request, "home.html", r.get('this_var'))

#In home.html
<h1>{{ my_var1 }}</h1>
<h1>{{ my_var2 }}</h1>

其中afunction() 只是我制作的一个函数,它在将数字作为参数时会做一些事情。此外,我已经很好地设置了 celery beat、celery 和 redis,因为我已经用其他示例对它们进行了测试以确保它们能够正常工作。此外,我之前使用过r.getr.set 和其他东西,它们已经奏效了。但是,在 home.html 页面上,我看不到 my_var1my_var2 的内容,这表明 'this_var' 没有存储我的字典 context。有人可以帮我吗?

另外,如果我只是在views.py 中的home(request) 函数中放置上下文,那么一切都会正常工作。

【问题讨论】:

    标签: python django redis celery


    【解决方案1】:

    这是因为您使用字典调用 redis.set() 而 set 旨在处理字符串。所以添加到 redis 的是字典的字符串表示形式。

    您需要使用hmset 来保存字典并使用hgetall 来检索它。例如:

    r.hmset('this_var', context)
    

    return render(request, "home.html", r.hgetall('this_var'))
    

    【讨论】:

    • 它不起作用。我收到此错误:WRONGTYPE Operation against a key hold the wrong kind of value,但谢谢。
    • 它确实有效。打开 python 控制台,在其中输入这些命令并亲自查看。 WrongType 操作错误是因为您的 hmgetall() 调用试图检索已存在于 redis 中的值,但该值是在您之前使用 set() 尝试插入的,而不是 hmset() 删除该值
    猜你喜欢
    • 1970-01-01
    • 2016-06-15
    • 2014-04-04
    • 2016-08-22
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    相关资源
    最近更新 更多