使用python向redis插入有序集合时出现了问题:
def add(proxy, score=10):
if not db.zscore(REDIS_KEY, proxy):
return db.zadd(REDIS_KEY, score, proxy)
不知道为什么网上的代码都是我上面写的那样,但是可能是由于版本原因,这个方法已经不能用了,不过它既然提示了哪里出的问题,我们索性去源码里看一下:
很明显,这个方法接受两个必须参数,name是有序集合的键名,mapping应该就是要插入的值和权重的字典形式了,而不是分开两个参数传入,再往下看:
这里执行iteritems方法传入mapping后将返回值的前两项添加到新列表里,然后执行插入语句,联想到redis的插入语句 zadd key score1 value1 score2 value2...
,那么这里的返回列表中第一项应该是值, 第二项是权重(注意他这里顺序的调整),继续看一下iteritems方法:
果然如此!这里就是返回了传入字典的键值对元组,那么正确的插入代码应该是这样子的:
def add(proxy, score=10):
if not db.zscore(REDIS_KEY, proxy):
return db.zadd(REDIS_KEY, {
proxy: score})
检查一下是否插入成功:
完美!