Skip to content

Commit 13f58b8

Browse files
committed
apparently I hadn't hit "save all"
1 parent fe211f7 commit 13f58b8

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

docs/PipelinesMultiplexers.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ Multiplexing
6969

7070
Pipelining is all well and good, but often any single block of code only wants a single value (or maybe wants to perform a few operations, but which depend on each-other). This means that we still have the problem that we spend most of our time waiting for data to transfer between client and server. Now consider a busy application, perhaps a web-server. Such applications are generally inherently concurrent, so if you have 20 parallel application requests all requiring data, you might think of spinning up 20 connections, or you could synchronize access to a single connection (which would mean the last caller would need to wait for the latency of all the other 19 before it even got started). Or as a compromise, perhaps a pool of 5 connections which are leased - no matter how you are doing it, there is going to be a lot of waiting. **StackExchange.Redis does not do this**; instead, it does a *lot* of work for you to make effective use of all this idle time by *multiplexing* a single connection. When used concurrently by different callers, it **automatically pipelines the separate requests**, so regardless of whether the requests use blocking or asynchronous access, the work is all pipelined. So we could have 10 or 20 of our "get a and b" scenario from earlier (from different application requests), and they would all get onto the connection as soon as possible. Essentially, it fills the `waiting` time with work from other callers.
7171

72-
For this reason, the only redis features that StackExchange.Redis does not offer (and *will not ever offer*) are the "blocking pops" ([BLPOP](http://redis.io/commands/blpop), [BRPOP](http://redis.io/commands/brpop) and [BRPOPLPUSH](http://redis.io/commands/brpoplpush)) - because this would allow a single caller to stall the entire multiplexer, blocking all other callers. The only other time that StackExchange.Redis needs to hold work is when verifying pre-conditions for a transaction, which is why StackExchange.Redis encapsulates such conditions into internally managed `Condition` instances. [Read more about transactions here](/Transactions). If you feel you want "blocking pops", then I strongly suggest you consider pub/sub instead:
72+
For this reason, the only redis features that StackExchange.Redis does not offer (and *will not ever offer*) are the "blocking pops" ([BLPOP](http://redis.io/commands/blpop), [BRPOP](http://redis.io/commands/brpop) and [BRPOPLPUSH](http://redis.io/commands/brpoplpush)) - because this would allow a single caller to stall the entire multiplexer, blocking all other callers. The only other time that StackExchange.Redis needs to hold work is when verifying pre-conditions for a transaction, which is why StackExchange.Redis encapsulates such conditions into internally managed `Condition` instances. [Read more about transactions here](Transactions). If you feel you want "blocking pops", then I strongly suggest you consider pub/sub instead:
7373

7474
```C#
7575
sub.Subscribe(channel, delegate {

docs/index.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,16 @@ PM> Install-Package StackExchange.Redis.StrongName
3434
Documentation
3535
---
3636

37-
- [Basic Usage](/Basics) - getting started and basic usage
38-
- [Configuration](/Configuration) - options available when connecting to redis
39-
- [Pipelines and Multiplexers](/PipelinesMultiplexers) - what is a multiplexer?
40-
- [Keys, Values and Channels](/KeysValues) - discusses the data-types used on the API
41-
- [Transactions](/Transactions) - how atomic transactions work in redis
42-
- [Events](/Events) - the events available for logging / information purposes
43-
- [Pub/Sub Message Order](/PubSubOrder) - advice on sequential and concurrent processing
44-
- [Where are `KEYS` / `SCAN` / `FLUSH*`?](/KeysScan) - how to use server-based commands
45-
- [Profiling](/Profiling) - profiling interfaces, as well as how to profile in an `async` world
46-
- [Scripting](/Scripting) - running Lua scripts with convenient named parameter replacement
37+
- [Basic Usage](Basics) - getting started and basic usage
38+
- [Configuration](Configuration) - options available when connecting to redis
39+
- [Pipelines and Multiplexers](PipelinesMultiplexers) - what is a multiplexer?
40+
- [Keys, Values and Channels](KeysValues) - discusses the data-types used on the API
41+
- [Transactions](Transactions) - how atomic transactions work in redis
42+
- [Events](Events) - the events available for logging / information purposes
43+
- [Pub/Sub Message Order](PubSubOrder) - advice on sequential and concurrent processing
44+
- [Where are `KEYS` / `SCAN` / `FLUSH*`?](KeysScan) - how to use server-based commands
45+
- [Profiling](Profiling) - profiling interfaces, as well as how to profile in an `async` world
46+
- [Scripting](Scripting) - running Lua scripts with convenient named parameter replacement
4747

4848
Questions and Contributions
4949
---

0 commit comments

Comments
 (0)