利用redis维护topN集合
我有一个需求,就是维护最近N条浏览历史,下面记录一下这个小技巧。
我们用redis来实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# -*- coding: utf-8 -*- import redis r = redis.Redis() for i in range(0, 1000): p = r.pipeline() p.lpush("topN", i) p.ltrim("topN", 0, 9) p.execute() topN = r.lrange("topN", 0, -1) #[b'999', b'998', b'997', b'996', b'995', b'994', b'993', b'992', b'991', b'990'] print(topN) |
用pipeline向List左侧lpush多个新元素,然后利用ltrim保留List左侧的N个元素。
因为使用pipeline把插入和删除做成了批量提交,所以性能很不错。
另外,ltrim的实现是从List右侧向左删除,所以时间复杂度只与要删除的元素个数相关,性能也很好~
如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~
