From 70cdff41e0c391264065577f4f816df40e8811c9 Mon Sep 17 00:00:00 2001 From: Marcelo Zimbres Date: Thu, 14 Jul 2022 21:44:50 +0200 Subject: [PATCH] Fixes some bugs. --- aedis/connection.hpp | 18 +- aedis/detail/connection_ops.hpp | 19 +- benchmarks/benchmarks.tex | 55 +++ .../echo_server_direct/TcpEchoServer.java | 105 ++++++ .../echo_server_over_redis/package-lock.json | 328 +++++++++--------- .../echo_server_over_redis/package.json | 4 +- 6 files changed, 349 insertions(+), 180 deletions(-) create mode 100644 benchmarks/benchmarks.tex create mode 100644 benchmarks/java/echo_server_direct/TcpEchoServer.java diff --git a/aedis/connection.hpp b/aedis/connection.hpp index 92a7d9c6..e28300c6 100644 --- a/aedis/connection.hpp +++ b/aedis/connection.hpp @@ -304,6 +304,7 @@ private: resp3::request const* req = nullptr; std::size_t cmds = 0; bool stop = false; + bool written = false; }; using time_point_type = std::chrono::time_point; @@ -322,17 +323,17 @@ private: template friend struct detail::check_idle_op; template friend struct detail::start_op; - void cancel_push_requests(typename reqs_type::iterator end) + void cancel_push_requests() { - auto point = std::stable_partition(std::begin(reqs_), end, [](auto const& ptr) { - return ptr->req->commands() != 0; + auto point = std::stable_partition(std::begin(reqs_), std::end(reqs_), [](auto const& ptr) { + return !(ptr->written && ptr->req->commands() == 0); }); - std::for_each(point, end, [](auto const& ptr) { - ptr->timer.cancel(); + std::for_each(point, std::end(reqs_), [](auto const& ptr) { + ptr->timer.cancel(); }); - reqs_.erase(point, end); + reqs_.erase(point, std::end(reqs_)); } void add_request_info(std::shared_ptr const& info) @@ -416,12 +417,12 @@ private: } template - auto async_exec_read(Adapter adapter, CompletionToken token) + auto async_exec_read(Adapter adapter, std::size_t cmds, CompletionToken token) { return boost::asio::async_compose < CompletionToken , void(boost::system::error_code, std::size_t) - >(detail::exec_read_op{this, adapter}, token, resv_); + >(detail::exec_read_op{this, adapter, cmds}, token, resv_); } void coalesce_requests() @@ -435,6 +436,7 @@ private: for (auto i = 0UL; i < size; ++i) { write_buffer_ += reqs_.at(i)->req->payload(); cmds_ += reqs_.at(i)->req->commands(); + reqs_.at(i)->written = true; } } diff --git a/aedis/detail/connection_ops.hpp b/aedis/detail/connection_ops.hpp index 6e2c9c20..b18fb0bb 100644 --- a/aedis/detail/connection_ops.hpp +++ b/aedis/detail/connection_ops.hpp @@ -118,6 +118,7 @@ template struct exec_read_op { Conn* conn; Adapter adapter; + std::size_t cmds = 0; std::size_t read_size = 0; std::size_t index = 0; boost::asio::coroutine coro; @@ -132,7 +133,7 @@ struct exec_read_op { { // Loop reading the responses to this request. BOOST_ASSERT(!conn->reqs_.empty()); - while (conn->reqs_.front()->cmds != 0) { + while (cmds != 0) { BOOST_ASSERT(conn->cmds_ != 0); //----------------------------------- @@ -177,8 +178,8 @@ struct exec_read_op { read_size += n; - BOOST_ASSERT(conn->reqs_.front()->cmds != 0); - --conn->reqs_.front()->cmds; + BOOST_ASSERT(cmds != 0); + --cmds; BOOST_ASSERT(conn->cmds_ != 0); --conn->cmds_; @@ -230,7 +231,9 @@ struct exec_op { return; } - yield conn->async_exec_read(adapter, std::move(self)); + BOOST_ASSERT(!conn->reqs_.empty()); + BOOST_ASSERT(conn->reqs_.front() != nullptr); + yield conn->async_exec_read(adapter, conn->reqs_.front()->cmds, std::move(self)); if (ec) { self.complete(ec, 0); return; @@ -396,6 +399,10 @@ struct run_op { return; } + std::for_each(std::begin(conn->reqs_), std::end(conn->reqs_), [](auto const& ptr) { + return ptr->written = false; + }); + yield conn->async_start(std::move(self)); self.complete(ec); } @@ -405,7 +412,6 @@ struct run_op { template struct writer_op { Conn* conn; - typename Conn::reqs_type::iterator end; boost::asio::coroutine coro; template @@ -419,7 +425,6 @@ struct writer_op { { while (!conn->reqs_.empty() && conn->cmds_ == 0 && conn->write_buffer_.empty()) { conn->coalesce_requests(); - end = conn->reqs_.end(); yield boost::asio::async_write(*conn->socket_, boost::asio::buffer(conn->write_buffer_), std::move(self)); if (ec) { self.complete(ec); @@ -430,7 +435,7 @@ struct writer_op { // order to to use it as a flag that informs there is no // ongoing write. conn->write_buffer_.clear(); - conn->cancel_push_requests(end); + conn->cancel_push_requests(); } if (conn->socket_->is_open()) { diff --git a/benchmarks/benchmarks.tex b/benchmarks/benchmarks.tex new file mode 100644 index 00000000..0e3aee13 --- /dev/null +++ b/benchmarks/benchmarks.tex @@ -0,0 +1,55 @@ +\documentclass{article} +% translate with >> pdflatex -shell-escape + +% This file is an extract of the PGFPLOTS manual, copyright by Christian Feuersaenger. +% +% Feel free to use it as long as you cite the pgfplots manual properly. +% +% See +% http://pgfplots.sourceforge.net/pgfplots.pdf +% for the complete manual. +% +% Any required input files (for or or the table package) can be downloaded +% at +% http://www.ctan.org/tex-archive/graphics/pgf/contrib/pgfplots/doc/latex/ +% and +% http://www.ctan.org/tex-archive/graphics/pgf/contrib/pgfplots/doc/latex/plotdata/ + +\usepackage{pgfplots} +\pgfplotsset{compat=newest} + +\pagestyle{empty} + +\begin{document} +\begin{tikzpicture} + \begin{axis}[ + y dir=reverse, + xbar stacked, + xbar, xmin=0, + %hide x axis, + bar shift=0pt, + width=12cm, height=6cm, enlarge y limits=0.5, + xlabel={TCP echo server performance}, + symbolic y coords={Asio,Rust/Tokio,Libuv,Nodejs,Go}, + ytick=data, + %bar width=1cm, + nodes near coords, + nodes near coords align={horizontal}, + ] + \addplot coordinates { + (31.4,Asio) + (42.2,Rust/Tokio) + (43.6,Libuv) + (73.0,Nodejs) + (78.2,Go) + }; + \addplot coordinates { + (30.0,Asio) + (90.6,Rust/Tokio) + (0.0,Libuv) + (68.9,Nodejs) + (0.0,Go) + }; + \end{axis} +\end{tikzpicture} +\end{document} diff --git a/benchmarks/java/echo_server_direct/TcpEchoServer.java b/benchmarks/java/echo_server_direct/TcpEchoServer.java new file mode 100644 index 00000000..884cfe00 --- /dev/null +++ b/benchmarks/java/echo_server_direct/TcpEchoServer.java @@ -0,0 +1,105 @@ +import java.nio.*; +import java.nio.channels.*; +import java.net.*; +import java.util.*; +import java.io.IOException; + +public class TcpEchoServer { + + public static int DEFAULT_PORT = 55555; + + public static void main(String[] args) { +int port; + try { + port = Integer.parseInt(args[0]); + } + + catch (Exception ex) { + port = DEFAULT_PORT; + } + + //System.out.println("Listening for connections on port " + port); + ServerSocketChannel serverChannel; + Selector selector; + try { + serverChannel = ServerSocketChannel.open( ); + ServerSocket ss = serverChannel.socket( ); + InetSocketAddress address = new InetSocketAddress(port); + ss.bind(address); + serverChannel.configureBlocking(false); + selector = Selector.open( ); + serverChannel.register(selector, SelectionKey.OP_ACCEPT); + } + catch (IOException ex) { + ex.printStackTrace( ); + return; + } + while (true) { + try { + selector.select( ); + } + catch (IOException ex) { + ex.printStackTrace( ); + break; + } + Set readyKeys = selector.selectedKeys( ); + Iterator iterator = readyKeys.iterator( ); + while (iterator.hasNext( )) { + SelectionKey key = (SelectionKey) iterator.next( ); + iterator.remove( ); + try { + if (key.isAcceptable( )) { + ServerSocketChannel server = (ServerSocketChannel ) key.channel( ); + SocketChannel client = server.accept( ); + //System.out.println("Accepted connection from " + client); + client.configureBlocking(false); + SelectionKey clientKey = client.register( + selector, SelectionKey.OP_WRITE | SelectionKey.OP_READ); + ByteBuffer buffer = ByteBuffer.allocate(100); + clientKey.attach(buffer); + //System.out.println(buffer.toString()); + + } + + if (key.isReadable( )) { + SocketChannel client = (SocketChannel) key.channel( ); + ByteBuffer output = (ByteBuffer) key.attachment( ); + client.read(output); + } + + if (key.isWritable( )) { + SocketChannel client = (SocketChannel) key.channel( ); + ByteBuffer output = (ByteBuffer) key.attachment( ); + output.flip( ); + client.write(output); + output.compact( ); + + } + + } + + catch (IOException ex) { + key.cancel( ); + try { + key.channel().close(); + } + + catch (IOException cex) {} + + } + + + + } + + + + } + + + + } + + + +} diff --git a/benchmarks/nodejs/echo_server_over_redis/package-lock.json b/benchmarks/nodejs/echo_server_over_redis/package-lock.json index cb82b808..9a5c48bc 100644 --- a/benchmarks/nodejs/echo_server_over_redis/package-lock.json +++ b/benchmarks/nodejs/echo_server_over_redis/package-lock.json @@ -1,169 +1,169 @@ { - "name": "aedis", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "dependencies": { - "redis": "^4.1.0" - } - }, - "node_modules/@redis/bloom": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", - "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/client": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.1.0.tgz", - "integrity": "sha512-xO9JDIgzsZYDl3EvFhl6LC52DP3q3GCMUer8zHgKV6qSYsq1zB+pZs9+T80VgcRogrlRYhi4ZlfX6A+bHiBAgA==", - "dependencies": { - "cluster-key-slot": "1.1.0", - "generic-pool": "3.8.2", - "yallist": "4.0.0" + "name": "echo_server_over_redis", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "redis": "^4.2.0" + } }, - "engines": { - "node": ">=14" + "node_modules/@redis/bloom": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", + "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", + "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", + "dependencies": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "yallist": "4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@redis/graph": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", + "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", + "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/search": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", + "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/@redis/time-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", + "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "peerDependencies": { + "@redis/client": "^1.0.0" + } + }, + "node_modules/cluster-key-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", + "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/generic-pool": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", + "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/redis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.2.0.tgz", + "integrity": "sha512-bCR0gKVhIXFg8zCQjXEANzgI01DDixtPZgIUZHBCmwqixnu+MK3Tb2yqGjh+HCLASQVVgApiwhNkv+FoedZOGQ==", + "dependencies": { + "@redis/bloom": "1.0.2", + "@redis/client": "1.2.0", + "@redis/graph": "1.0.1", + "@redis/json": "1.0.3", + "@redis/search": "1.0.6", + "@redis/time-series": "1.0.3" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - }, - "node_modules/@redis/graph": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", - "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", - "peerDependencies": { - "@redis/client": "^1.0.0" + }, + "dependencies": { + "@redis/bloom": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", + "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", + "requires": {} + }, + "@redis/client": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.2.0.tgz", + "integrity": "sha512-a8Nlw5fv2EIAFJxTDSSDVUT7yfBGpZO96ybZXzQpgkyLg/dxtQ1uiwTc0EGfzg1mrPjZokeBSEGTbGXekqTNOg==", + "requires": { + "cluster-key-slot": "1.1.0", + "generic-pool": "3.8.2", + "yallist": "4.0.0" + } + }, + "@redis/graph": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", + "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", + "requires": {} + }, + "@redis/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", + "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", + "requires": {} + }, + "@redis/search": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", + "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", + "requires": {} + }, + "@redis/time-series": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", + "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", + "requires": {} + }, + "cluster-key-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", + "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" + }, + "generic-pool": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", + "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" + }, + "redis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/redis/-/redis-4.2.0.tgz", + "integrity": "sha512-bCR0gKVhIXFg8zCQjXEANzgI01DDixtPZgIUZHBCmwqixnu+MK3Tb2yqGjh+HCLASQVVgApiwhNkv+FoedZOGQ==", + "requires": { + "@redis/bloom": "1.0.2", + "@redis/client": "1.2.0", + "@redis/graph": "1.0.1", + "@redis/json": "1.0.3", + "@redis/search": "1.0.6", + "@redis/time-series": "1.0.3" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - }, - "node_modules/@redis/json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", - "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/search": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", - "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/@redis/time-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", - "peerDependencies": { - "@redis/client": "^1.0.0" - } - }, - "node_modules/cluster-key-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", - "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/generic-pool": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", - "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/redis": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.1.0.tgz", - "integrity": "sha512-5hvJ8wbzpCCiuN1ges6tx2SAh2XXCY0ayresBmu40/SGusWHFW86TAlIPpbimMX2DFHOX7RN34G2XlPA1Z43zg==", - "dependencies": { - "@redis/bloom": "1.0.2", - "@redis/client": "1.1.0", - "@redis/graph": "1.0.1", - "@redis/json": "1.0.3", - "@redis/search": "1.0.6", - "@redis/time-series": "1.0.3" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { - "@redis/bloom": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@redis/bloom/-/bloom-1.0.2.tgz", - "integrity": "sha512-EBw7Ag1hPgFzdznK2PBblc1kdlj5B5Cw3XwI9/oG7tSn85/HKy3X9xHy/8tm/eNXJYHLXHJL/pkwBpFMVVefkw==", - "requires": {} - }, - "@redis/client": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.1.0.tgz", - "integrity": "sha512-xO9JDIgzsZYDl3EvFhl6LC52DP3q3GCMUer8zHgKV6qSYsq1zB+pZs9+T80VgcRogrlRYhi4ZlfX6A+bHiBAgA==", - "requires": { - "cluster-key-slot": "1.1.0", - "generic-pool": "3.8.2", - "yallist": "4.0.0" - } - }, - "@redis/graph": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@redis/graph/-/graph-1.0.1.tgz", - "integrity": "sha512-oDE4myMCJOCVKYMygEMWuriBgqlS5FqdWerikMoJxzmmTUErnTRRgmIDa2VcgytACZMFqpAOWDzops4DOlnkfQ==", - "requires": {} - }, - "@redis/json": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/json/-/json-1.0.3.tgz", - "integrity": "sha512-4X0Qv0BzD9Zlb0edkUoau5c1bInWSICqXAGrpwEltkncUwcxJIGEcVryZhLgb0p/3PkKaLIWkjhHRtLe9yiA7Q==", - "requires": {} - }, - "@redis/search": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@redis/search/-/search-1.0.6.tgz", - "integrity": "sha512-pP+ZQRis5P21SD6fjyCeLcQdps+LuTzp2wdUbzxEmNhleighDDTD5ck8+cYof+WLec4csZX7ks+BuoMw0RaZrA==", - "requires": {} - }, - "@redis/time-series": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@redis/time-series/-/time-series-1.0.3.tgz", - "integrity": "sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==", - "requires": {} - }, - "cluster-key-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/cluster-key-slot/-/cluster-key-slot-1.1.0.tgz", - "integrity": "sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==" - }, - "generic-pool": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-3.8.2.tgz", - "integrity": "sha512-nGToKy6p3PAbYQ7p1UlWl6vSPwfwU6TMSWK7TTu+WUY4ZjyZQGniGGt2oNVvyNSpyZYSB43zMXVLcBm08MTMkg==" - }, - "redis": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/redis/-/redis-4.1.0.tgz", - "integrity": "sha512-5hvJ8wbzpCCiuN1ges6tx2SAh2XXCY0ayresBmu40/SGusWHFW86TAlIPpbimMX2DFHOX7RN34G2XlPA1Z43zg==", - "requires": { - "@redis/bloom": "1.0.2", - "@redis/client": "1.1.0", - "@redis/graph": "1.0.1", - "@redis/json": "1.0.3", - "@redis/search": "1.0.6", - "@redis/time-series": "1.0.3" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } + } } diff --git a/benchmarks/nodejs/echo_server_over_redis/package.json b/benchmarks/nodejs/echo_server_over_redis/package.json index f6ae8e67..7cd8756b 100644 --- a/benchmarks/nodejs/echo_server_over_redis/package.json +++ b/benchmarks/nodejs/echo_server_over_redis/package.json @@ -1,4 +1,6 @@ { "type": "module", - "dependencies": { "redis": "^4.1.0" } + "dependencies": { + "redis": "^4.2.0" + } }