Я думаю, что вы на самом деле ищете что-то вроде redis-benchmark
.Он включен в дистрибутив redis.
Из командной строки redis-cli
я заполнил пустой случайный экземпляр redis списком, подобным вашему:
127.0.0.1:6379>eval "local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, 1 do sum = sum + result[i]; end; return tostring(sum);" 0
Затем я запустил redis-benchmark
:
$ redis-benchmark -n 100000 script load "local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, 1 do sum = sum + result[i]; end; return tostring(sum);"
script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, ====== script load local result = redis.call('lrange', 'mylist', 0, -1); local sum = 0; for i=1, #result, 1 do sum = sum + result[i]; end; return tostring(sum); ======
100000 requests completed in 1.20 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.99% <= 1 milliseconds
100.00% <= 1 milliseconds
83263.95 requests per second
Как видите, результаты сильно отличаются от того, что вы показываете.100 000 вызовов скрипта были выполнены за 1,2 секунды.
Я не знаю, почему ваши тесты показали значительно худшую производительность, но я могу представить несколько вариантов:
- Память / процессорограничения в вашем образе докера
- сетевая задержка
- накладные расходы из используемой вами библиотеки python-redis
Но, по сути, вам не следует использовать redis для обработкисвязанные скрипты.Поскольку redis является однопоточным, сценарий lua будет блокировать выполнение всех остальных сценариев до тех пор, пока он не завершится.
Я предлагаю вам поэкспериментировать с redis-benchmark, чтобы лучше понять, как работает redis.