Skip to content

Instantly share code, notes, and snippets.

@itamarhaber
Created February 18, 2015 03:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save itamarhaber/6c9f3dd75ec5e25d8044 to your computer and use it in GitHub Desktop.
Save itamarhaber/6c9f3dd75ec5e25d8044 to your computer and use it in GitHub Desktop.
Benchmark different pre-ordered sorted sets insertion times to win the bounty at http://stackoverflow.com/questions/28499034/most-efficient-way-to-insert-an-already-sorted-set-into-redis
import redis
import random
import timeit
key = 'so_bounty'
number = 100
sample = 10000
r = redis.Redis()
def ascset():
s = []
for i in range(sample):
s.append('value:' + `i`)
s.append(i)
return s
def dscset():
s = []
for i in range(sample,0,-1):
s.append('value:' + `i`)
s.append(i)
return s
def rndset():
s = []
for i in range(sample):
s.append('value:' + `i`)
s.append(random.randrange(sample))
return s
def zeroset():
s = []
for i in range(sample):
s.append('value:' + `i`)
s.append(0)
return s
if __name__ == '__main__':
stmt = "i = i + 1; r.zadd(key + ':' + `i`, *s)"
setup = ("from __main__ import r; " +
"from __main__ import key;" +
"from __main__ import sample;" +
"r.flushdb(); " +
"i = 0; " +
"from __main__ import {};" +
"s = {}();")
print("ascending order")
print(timeit.timeit(stmt=stmt, setup=setup.format("ascset", "ascset"), number=number))
print("descending order")
print(timeit.timeit(stmt=stmt, setup=setup.format("dscset", "dscset"), number=number))
print("random order")
print(timeit.timeit(stmt=stmt, setup=setup.format("rndset", "rndset"), number=number))
print("0 score")
print(timeit.timeit(stmt=stmt, setup=setup.format("zeroset", "zeroset"), number=number))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment