Comments (5)
@JoelBender Hi. First thing is that i would not recommend to use pubsub with a redis cluster. There is currently alot of problems with the implementation inside redis iteself that makes it very slow and has crazy ammount of overhead. In short, it is implemented in a way that for each published message it will be sent to all nodes in the cluster because it is implemented so that any client can connect to any node and listen to any channel. This means that the fanout has to be implemented in the way it is. The only sane suggestion i have yet seen is to use the same hashslot mechanics that is already implemented for all other commands where the slot is determined by the key. By doing this in the pubsub case, it would remove the need to distribute the published messages to all nodes and then it would be really easy for clients to implement this pattern.
Anyhow, i still find it interesting that the client behaves this way. It should be releasing back the connection after a published message O.o. I will do some digging during the week and see what i can find out.
from redis-py-cluster.
Thank you! I completely understand why it shouldn't be used as it stands now, and I will be using MQTT for my very simple pubsub application requirements. I intend to also dig into this bug at some point, but it will be quite some time before I get the chance.
from redis-py-cluster.
This issue is similar to #129 and and the provided solution could fix this issue also.
from redis-py-cluster.
@JoelBender I worked some on this problem today and took a deeper look and compared my implementation to how redis-py handles connections in the pool and i saw several flaws with my implementation. I have now reworked the connection_pool code to be more similar to redis-py and how it works in there. It also means that it impacts pubsub code because those connections is no longer tracked in a different variables. You can see the code here #136 where it should fix this problem and more.
from redis-py-cluster.
@JoelBender Connection pool logic works much better in 1.2.0 and when i test things out by publishing alot of messages with a limited number of connections i do not see this problem with reaching the max number of connections because they are now added back to the pool properly when the command is done. You will however still get to the max number of connections used if you would to run with say max connections = 16 and use the same client object in say 32+ threads and max out the number of publish commands sent. But this is intended behavior and you would see the very same thing in redis-py.
If yo find some other or similar errors in release 1.2.0, please open a new ticket.
from redis-py-cluster.
Related Issues (20)
- archive repo since redis-py is cluster compatible HOT 6
- Redis Cluster cannot be connected. Please provide at least one reachable node. when connecting to cluster HOT 2
- Support of Redis v4.1 HOT 1
- get wrong return value "OK" from redis HOT 1
- how to use ACL in redis cluster client HOT 1
- TypeError: unsupported operand type(s) for +: 'int' and 'str' HOT 1
- version 2.1.3 raise rediscluster.exceptions.MovedError when connect redis cluster HOT 4
- Is need to connection pool disconect? HOT 2
- ClusterWithReadReplicasConnectionPool with read_from_replicas causes dump. HOT 1
- KeyError:636 -> BaseException HOT 2
- Support for PSYNC HOT 1
- rediscluster.exceptions.ClusterError: TTL exhausted HOT 4
- The first node of cluster can not connect HOT 2
- Is there any params for RedisCluster __init__, to let redis know when did idle client connection should be kicked out HOT 3
- ImportError: cannot import name 'SlotNotCoveredError' from 'rediscluster.exceptions' HOT 1
- Turn off vervose logging HOT 4
- Best practice for deletion from Redis HOT 2
- Please update so that it can be installed on Python 3.11 HOT 2
- use redis-py-cluster unable to connect to redis cluster in python 2.7 HOT 2
- is ClusterBlockingConnectionPool work in gevent? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from redis-py-cluster.