Error 99 connecting to 192.168.3.212:6379. Cannot assign requested address

Redis - corelation between QPS, response time, number of connections, response size and network connection speed - Stack Overflow https://stackoverflow.com/questions/28241728/redis-corelation-between-qps-response-time-number-of-connections-response-s

连接数与带宽

Here are my answers:

Want to understand more about this magic.

Redis is awesome, but there is no magic. It is just a smart and efficient implementation of very pragmatic concepts. And because it is a human-sized project, it is actually easy to understand why, by having a look at the source code.

Is this just network latency or Redis has to maintain some overhead till entire data is flushed out.

Of course, Redis has to maintain communication buffers, so that it can deal with slower network links. That said, this should have very little impact on the perceived latency. In your case, the 50 ms are probably mainly due to the network latency, which you could probably check by running a ping command or any other similar tool.

Can number of connections affect Redis throughput?

Of course, it can, like for any server software. Now, you need to distinguish the throughput per connection, and the global throughput of the server.

The throughput per connection is heavily impacted by the number of connections. Consider that the server can only provide a certain bandwidth, and this bandwidth is shared across connections. The more connections, the less bandwidth per connection.

On the other hand, the global throughput of the server is only lightly impacted by the number of connections. Redis can accept tens of thousands of connection with no issue. There is still an overhead though. As a rule of thumb, consider that at 30000 connections, Redis supports only half of the throughput it can support at 100 connections. See the nice graphs available on the Redis benchmark page.

Will the last request take 500muSec * 1000 = 500ms?

Yes, but your figures are probably wrong.

Yes, all activity is serialized (single-threaded design), so the processing time of each command has to be added. When many commands are received at the same time, the last one will be served after all the other ones. If each command takes 5 us to be processed, and 1000 are received at the same time, the last reply will be sent in 5 ms.

Now, in practice, the number of truly concurrent queries is not so high. Redis rarely receives 1000 simultaneous queries in the same event loop iteration.

Furthermore, you are confusing the response time (as measured on client-side), and theprocessing time (that would be measured on Redis side). The response time can be 500 us, but the processing time is much closer to 5 us, the difference being the time spent on the network and in the OS process scheduling. Keep in mind that only the processing time has to be cumulated, everything else is parallelized over the connections (network latency for instance).

To calculate the average processing time of your instance, just use redis-benchmark to saturate the instance. When using pipelining, it is not uncommon to see instances processing up to 400 Kop/s or more, which gives an average processing time of 2.5 us.

Can response size have an affect here?

Of course, it can, like for any server software. Past a certain size, the latency is always impacted by the volume of data, because both the bandwidth and the speed of the network are limited. With ethernet networks, this threshold is closely related to the size of the MTU.

TCP connection on the Redis has to wait till the last packet is delivered and if the network connection is slow, will it slowdown Redis?

Absolutely not. Redis systematically buffers the replies (whatever their size), and manages all sockets in a non-blocking way, thanks to an event loop. If one connection is slow (or one client is slow), Redis will fill the corresponding socket buffer as much it can, register the socket in the event loop, and move to another connection. The event loop will continue sending traffic on the slow connection when there is space again in the socket buffer. Nothing ever blocks.

Error 99 connecting to 192.168.3.212:6379. Cannot assign requested address的更多相关文章

  1. connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to upstream, client: 114.80.182.136, server: localhost, request: "GET /home/senior HTTP/1.1", upstream: "

    connect() to 192.168.30.71:8082 failed (99: Cannot assign requested address) while connecting to ups ...

  2. 解决Zabbix网页端Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No route to host问题

    在安装配置完zabbix_agentd以后,网页端出现  Get value error: cannot connect to [[192.168.238.139]:10050]: [113] No ...

  3. ERROR 1130 (HY000): Host '192.168.20.165' is not allowed to connect to this MySQL server

    问题 远程连接mysql时遇到如下问题: ERROR 1130 (HY000): Host '192.168.20.165' is not allowed to connect to this MyS ...

  4. redis.exceptions.ConnectionError: Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接

    redis.exceptions.ConnectionError: Error 10061 connecting to 127.0.0.1:6379. 由于目标计算机积极拒绝,无法连接   是由于没有 ...

  5. Redis配置主从时报错“Could not connect to Redis at 192.168.0.50:6379: Connection refused not connected>”

    配置Redis主从时,修改完从节点配置文件,然后报错 [root@Rich七哥-0-50 redis]# /opt/redis/redis-cli -h 192.168.0.50 Could not ...

  6. socket.error: [Errno 99] Cannot assign requested address

    方法一:python 命令行下运行  vi /etc/hosts 将127.0.1.1 那一行的名字改成你的(用 vi /etc/hostname 获取) 127.0.0.1 localhost 12 ...

  7. [译]Python - socket.error: Cannot assign requested address

    原文来源: https://stackoverflow.com/questions/48306528/python-socket-error-cannot-assign-requested-addre ...

  8. 解决commBind: Cannot bind socket FD 18 to [::1]: (99) Cannot assign requested address squid

    最近玩squid主要是为了爬虫代理,但是使用docker搭建squid的时候发现,docker一直默认使用的 ipv6,但是squid使用ipv4,导致无法绑定,出现commBind: Cannot ...

  9. python socket编程腾讯云下报错[Errno 99] Cannot assign requested address的解决方式

    先写服务端server.py: import socket import time HOST = '172.17.xx.xx' #服务器的私网IP #HOST = 'localhost' PORT = ...

随机推荐

  1. linux find的用法

    ①.一般格式: ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 说明: #-print 将查找到的文 ...

  2. Python2和Python3共存安装robotframework

    1.下载Python2.Python3安装包 https://www.python.org/ 2.下载pip.tar.gz https://pypi.python.org/pypi/pip#downl ...

  3. xtu read problem training A - Dividing

    A - Dividing Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Descri ...

  4. FZU1004-Number Triangle经典动归题,核心思路及代码优化

    Problem 1004 Number Triangle Accept: 2230    Submit: 5895Time Limit: 1000 mSec    Memory Limit : 327 ...

  5. [Istio]流量管理API v1alpha3路由规则

    Istio提供一个API进行流量管理,该API允许用户将请求路由到特定版本的服务,为弹性测试注入延迟和失败,添加断路器等,所有这些功能都不必更改应用程序本身的代码.Istio 1.0中引入新的流量管理 ...

  6. Go切片基础

    package main import "fmt" //切片(Slice)本身没有数据,是对底层Array的一个view //不使用指针就可以改数组内容 //slice可以向后扩展 ...

  7. hdu 1711kmp裸题

    #include<stdio.h> #define N 1000050 int text[N],t[N],next[N],n,m; void getnext() { int j=0,k=- ...

  8. File类的三种构造方法

    package cn.zmh.File; import java.io.File; /* * * File类的构造方法 三种重载形式 * * */ public class FileDemo1 { p ...

  9. linux下启动mysql服务(类似于windows下net start mysql)

    1.linux系统启动方式:service mysql start.其类似于windows下net start mysql

  10. Meteor教程

    Meteor 是一个构建在 Node.js 之上的平台,用来开发实时网页程序.Meteor 程序位于数据库和用户界面之间,保持二者之间的数据同步更新. 因为 Meteor 是基于 Node.js 开发 ...