场景: 借助redis存储json.dumps()序列化的dist,删除不掉
测试代码:
import json
from redis import Redis
rd = Redis(host="xxx", port=6379, db=0)
data = {"a": 1, "b": 2, "c": 3}
rd.lpush("test1", json.dumps(data))
print("第一次打印redis列表test1中的元素")
print(rd.lrange("test1", 0, -1))
rd.lrem("test1", json.dumps(data))
print("第二次打印redis列表test1中的元素")
print(rd.lrange("test1", 0, -1))
结果
第一次打印redis列表test1中的元素 [’{“a”: 1, “b”: 2, “c”: 3}’] 第二次打印redis列表test1中的元素 [’{“b”: 2, “a”: 1, “c”: 3}’]
从结果中会发现,明明使用了lrem删除redis列表中的元素,为什么没有删除掉 答案: dist是无序的,被json.dumps() 序列化后的dist也是无序的. rd.lrem() 是删除指定元素,josn.dumps(dist)元素已经无序的被写入了redis列表中,直接用rd.lrem() 去删除重新获取的json.dumps(dist),其实这里的元素已经与写入的dist元素不同了,所以是无法删除的。 如果dist中的元素比较少的话,应该是可以删除的,顺序没有被打乱,但如果元素比较多的时候,就会出现乱序,这个时候在通过JSON序列化生成的字符串就不是原来的字符串了。
|