如何从存储在redis中的列表中打印数据?
How to print data from list stored in redis?
我的数据已经存储在redis的列表'lst'中。
我必须打印列表的所有元素
for i in range(0,r_server.llen('lst')):
print ??????
在for循环中写什么?
您的方法有效但无效 - 您将执行大量不必要的请求,从而浪费 CPU、带宽和时间。如果您的 lst
有 N 个元素,您的循环将需要 N+1 次调用 redis,其中 N 次调用将调用 LINDEX
,其复杂度为 O(N)。
Redis 使用 LRANGE
命令提供了一种更好的方法,因此您基本上可以用一次调用替换对 Redis 的所有调用,就像这样:
l = redis_server.lrange('lst', 0, -1)
for x in l:
print x
但是请注意,对大型列表执行此操作也存在问题,因为您会在 Redis 准备对 LRANGE
请求的回复时阻塞 Redis(+ 为回复缓冲区消耗内存)。在这种情况下,您应该考虑在 lst
上使用带有 RPOPLPUSH
的循环列表模式或其副本,无论是否考虑并发性。
for e in r.lrange( 'LanguageList', 0, -1 ):
print(e)
更快的方法是:
for item in redis_server.lrange('lst', 0, -1):
print(item)
我的数据已经存储在redis的列表'lst'中。
我必须打印列表的所有元素
for i in range(0,r_server.llen('lst')):
print ??????
在for循环中写什么?
您的方法有效但无效 - 您将执行大量不必要的请求,从而浪费 CPU、带宽和时间。如果您的 lst
有 N 个元素,您的循环将需要 N+1 次调用 redis,其中 N 次调用将调用 LINDEX
,其复杂度为 O(N)。
Redis 使用 LRANGE
命令提供了一种更好的方法,因此您基本上可以用一次调用替换对 Redis 的所有调用,就像这样:
l = redis_server.lrange('lst', 0, -1)
for x in l:
print x
但是请注意,对大型列表执行此操作也存在问题,因为您会在 Redis 准备对 LRANGE
请求的回复时阻塞 Redis(+ 为回复缓冲区消耗内存)。在这种情况下,您应该考虑在 lst
上使用带有 RPOPLPUSH
的循环列表模式或其副本,无论是否考虑并发性。
for e in r.lrange( 'LanguageList', 0, -1 ):
print(e)
更快的方法是:
for item in redis_server.lrange('lst', 0, -1):
print(item)