最近做的一個東西,需要用python從redis的有序集合中一次性刪除多個值;
redis的自帶方法zrem是支持此功能的
# 移除多個元素 redis> ZREM page_rank baidu.com bing.com (integer) 2
python redis 的api 中也支持
zrem(self, name, *values) Remove member ``values`` from sorted set ``name``
參數 *values 代表 values是一個元組
但是我在用這個方法的時候,一直實現不了刪除多個值,代碼如下
def zDelByValues(self,key,values): relSet = self._getRelSet(key) if 'false' == relSet: return 'false' return self.getRedisW().zrem(relSet,values)
此時參數 values 可以接收 單個數字,字符串,比如 a.zDelByValues(foo,2) , a.zDelByValues(foo,'2') ,a.zDelByValues(foo,(2)) ,都可以成功,其它情況都會拋出錯誤;
糾結半天,原來是自己傳參傳錯了;
def zDelByValues(self,key,values): relSet = self._getRelSet(key) if 'false' == relSet: return 'false' return self.getRedisW().zrem(relSet,*values)
上面的代碼少了一個"*",一開始受php的影響,以為直接傳值就行了,而不需要將符號帶進去。以后得注意,不要犯類似的錯誤。
這樣,a.zDelByValues(foo,(2,3,4,5,6,7)) 就可以一次性完成刪除多個值的功能。
