![]() |
VOOZH | about |
dotnet add package SAEA.RedisSocket --version 26.4.23.1
NuGet\Install-Package SAEA.RedisSocket -Version 26.4.23.1
<PackageReference Include="SAEA.RedisSocket" Version="26.4.23.1" />
<PackageVersion Include="SAEA.RedisSocket" Version="26.4.23.1" />Directory.Packages.props
<PackageReference Include="SAEA.RedisSocket" />Project file
paket add SAEA.RedisSocket --version 26.4.23.1
#r "nuget: SAEA.RedisSocket, 26.4.23.1"
#:package SAEA.RedisSocket@26.4.23.1
#addin nuget:?package=SAEA.RedisSocket&version=26.4.23.1Install as a Cake Addin
#tool nuget:?package=SAEA.RedisSocket&version=26.4.23.1Install as a Cake Tool
๐ NuGet version
๐ License
| ไธญๆ็
ๅบไบ SAEA.Sockets IOCP ๆๆฏ็้ซๆง่ฝ Redis ๅฎขๆท็ซฏ๏ผๆฏๆ Redis Cluster ้็พคใStreamใๅๅธๅผ้็ญๅฎๆดๅ่ฝใ
| ็ซ ่ | ๅ ๅฎน |
|---|---|
| โก 30็งๅฟซ้ๅผๅง | ๆ็ฎๅ็ไธๆ็คบไพ |
| ๐ฏ ๆ ธๅฟ็นๆง | ไธป่ฆๅ่ฝไธ่ง |
| ๐ ๆถๆ่ฎพ่ฎก | ็ปไปถๅ ณ็ณปไธๅทฅไฝๆต็จ |
| ๐ก ๅบ็จๅบๆฏ | ไฝๆถ้ๆฉ SAEA.RedisSocket |
| ๐ ๆง่ฝๅฏนๆฏ | ไธๅ ถไปๅฎขๆท็ซฏๅฏนๆฏ |
| โ ๅธธ่ง้ฎ้ข | FAQ ๅฟซ้่งฃ็ญ |
| ๐ง ๆ ธๅฟ็ฑป | ไธป่ฆ็ฑปไธ่ง |
| ๐ ไฝฟ็จ็คบไพ | ่ฏฆ็ปไปฃ็ ็คบไพ |
ๆๅฟซไธๆๆนๅผ๏ผๅช้3ๆญฅๅณๅฏๆไฝ Redis๏ผ
dotnet add package SAEA.RedisSocket
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379;passwords=123456");
client.Connect();
var db = client.GetDataBase();
// String ๆไฝ
db.Set("name", "SAEA");
var value = db.Get("name"); // ่พๅบ: SAEA
// Hash ๆไฝ
db.HSet("user:1", "name", "ๅผ ไธ");
var name = db.HGet("user:1", "name"); // ่พๅบ: ๅผ ไธ
ๅฐฑ่ฟไน็ฎๅ๏ผ ๐ ไฝ ๅทฒ็ปๅฏไปฅๅผๅงไฝฟ็จ้ซๆง่ฝ Redis ๅฎขๆท็ซฏไบใ
| ็นๆง | ่ฏดๆ | ไผๅฟ |
|---|---|---|
| ๐ IOCP ้ซๆง่ฝ | ๅบไบ SAEA.Sockets IOCP | ไธ็บงๅนถๅ๏ผไฝๅปถ่ฟๅๅบ |
| ๐ง ๅฎๆดๆฐๆฎ็ฑปๅ | StringใHashใSetใListใZSetใGEO | ่ฆ็ๆๆ Redis ๆฐๆฎ็ปๆ |
| ๐ Redis Cluster | ๅฎๆด้็พคๆฏๆ๏ผ่ชๅจ้ๅฎๅ | ๆฐดๅนณๆฉๅฑ๏ผ้ซๅฏ็จ |
| ๐ก Redis Stream | Producer/Consumer ๆถๆฏ้ๅ | ๅๅธๅผๆถๆฏๅค็ |
| ๐ฃ Pub/Sub | ๅๅธ่ฎข้ ๆจกๅผ | ๅฎๆถๆถๆฏๆจ้ |
| ๐ ๅๅธๅผ้ | ๅบไบ SETNX ๅฎ็ฐ | ้ฒๆญขๅนถๅๅฒ็ช |
| โก Pipeline ๆน้ | ๆน้ๅฝไปคๆง่ก | ๅๅฐ็ฝ็ปๅพ่ฟ |
| ๐ SCAN ๆไฝ | KeysใHashใSetใZSet ๆธธๆ ๆซๆ | ๅคงๆฐๆฎ้ๅฎๅ จ้ๅ |
| ๐ ่ชๅจ้่ฟ | Keep-Aliveใ่ถ ๆถๆงๅถ | ็จณๅฎๅฏ้ ่ฟๆฅ |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SAEA.RedisSocket ๆถๆ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ RedisClient โ โRedisProducer โ โRedisConsumer โ โ
โ โ (ๅฎขๆท็ซฏ) โ โ (็ไบง่
) โ โ (ๆถ่ดน่
) โ โ
โ โโโโโโโโฌโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ RedisDataBase (ๆฐๆฎๅบๆไฝ) โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โ String โ โ Hash โ โ List โ โ Set โ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โ โ ZSet โ โ GEO โ โ Lock โ โ โ
โ โ โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ RedisConnection (่ฟๆฅ็ฎก็) โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ
โ โ โ ๅๆบๆจกๅผ โ โ Cluster โ โ โ
โ โ โ Standalone โ โ ้็พคๆจกๅผ โ โ โ
โ โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ SAEA.Sockets (IOCP ้ไฟกๅฑ) โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ โ
โ โ โ BufferPool โ โ Session โ โ โ
โ โ โ ๅ
ๅญๆฑ โ โ ไผ่ฏ็ฎก็ โ โ โ
โ โ โโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
ๅฎขๆท็ซฏ่ฏทๆฑๆต็จ:
ๅฎขๆท็ซฏ โโโบ RedisClient.Connect()
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ๅ้ INFO ๅฝไปค โ
โ ๆฃๆต้็พคๆจกๅผ โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โโโโโโโโโโผโโโโโโโโโ
โ IsCluster ? โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โโโโโโโโโโโดโโโโโโโโโโ
โ โ
โผ โผ
โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ ๅๆบๆจกๅผ โ โ Clusterๆจกๅผ โ
โ ็ด่ฟๆๅกๅจ โ โ ่ทๅๆงฝไฝ่กจ โ
โโโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ๆไฝ Key โ
โ ่ฎก็ฎ Slot โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ่ทฏ็ฑๅฐๆญฃ็กฎ่็น โ
โ MOVED/ASK ้ๅฎๅโ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
่ฟๅ็ปๆ
ๅฝไปคๆง่กๆต็จ:
ๅบ็จๅฑ โโโบ db.Set("key", "value")
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ๆๅปบ RESP ๅ่ฎฎ โ
โ *3\r\n$3\r\n โ
โ SET\r\n... โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ๅ้ๅฐ Redis โ
โ (IOCP ๅผๆญฅ) โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโ
โ ๆฅๆถๅๅบ โ
โ ่งฃๆ RESP โ
โโโโโโโโโโฌโโโโโโโโโ
โ
โผ
่ฟๅ็ปๆ
| ๅบๆฏ | ๆ่ฟฐ | ๆจ่็็ฑ |
|---|---|---|
| ๐ฎ ๆธธๆๆๅกๅจ | ๆ่กๆฆใ็ฉๅฎถๆฐๆฎใไผ่ฏ็ฎก็ | IOCP ้ซๅนถๅ๏ผZSet ๆ่กๆฆๅคฉ็ถๆฏๆ |
| ๐ ๅฎๆถๆฐๆฎ็ผๅญ | ็ญ็นๆฐๆฎ็ผๅญใ่ฎกๆฐๅจ | ไฝๅปถ่ฟ่ฏปๅ๏ผString/Hash ้ซๆๅญๅจ |
| ๐ ็ตๅ็ณป็ป | ่ดญ็ฉ่ฝฆใๅบๅญใ็งๆ | ๅๅธๅผ้ไฟ่ฏๅบๅญไธ่ดๆง |
| ๐ฌ ๅณๆถ้่ฎฏ | ๅจ็บฟ็ถๆใๆถๆฏ้ๅ | Pub/Sub ๅฎๆถๆจ้๏ผStream ๆถๆฏๆไน ๅ |
| ๐ ๅๅธๅผไปปๅก | ไปปๅก้ๅใ้ๆต | List ้ๅๆไฝ๏ผๅๅธๅผ้ๅ่ฐ |
| ๐ ไผ่ฏ็ฎก็ | ็จๆท SessionใToken | ่ฟๆๆบๅถ่ชๅจๆธ ็๏ผ้ซๆง่ฝๅญๅ |
| ๐ ๅพฎๆๅกๆถๆ | ๆๅก็ผๅญใ้ ็ฝฎไธญๅฟ | Cluster ๆฏๆ้ซๅฏ็จ๏ผPipeline ๆน้ๆไฝ |
// ไฝฟ็จ ZSet ๅฎ็ฐๅฎๆถๆ่กๆฆ
var db = client.GetDataBase();
db.ZAdd("game:rank", "player1", 1000);
db.ZAdd("game:rank", "player2", 1500);
// ่ทๅ Top 10
var top10 = db.ZRangeWithScores("game:rank", 0, 9);
var db = client.GetDataBase();
var lockKey = "seckill:product:lock";
var lockValue = Guid.NewGuid().ToString();
if (db.Lock(lockKey, lockValue, 30))
{
try
{
// ๆฃๅๅบๅญ
var stock = int.Parse(db.Get("stock"));
if (stock > 0)
{
db.Decrement("stock");
}
}
finally
{
db.Unlock(lockKey, lockValue);
}
}
var db = client.GetDataBase();
// ่ฎข้
้ข้
db.Subscribe("news", (channel, message) =>
{
Console.WriteLine($"ๆถๅฐๆจ้: {message}");
});
// ๅๅธๆถๆฏ
db.Publish("news", "ๆฐๅไธๆถ้็ฅ");
| ๅบๆฏ | ๆจ่ๆฟไปฃๆนๆก |
|---|---|
| ็ฎๅ้ฎๅผๅญๅจ๏ผๆ ้็ฝ็ป๏ผ | ๅ ๅญๅญๅ ธ Dictionary |
| ๅคงๆไปถๅญๅจ | ๅฏน่ฑกๅญๅจๆๅก (OSS/S3) |
| ๅคๆๅ ณ็ณปๆฅ่ฏข | ๅ ณ็ณปๅๆฐๆฎๅบ MySQL/PostgreSQL |
| ๆไน ๅๆถๆฏ้ๅ | RabbitMQ/Kafka |
| ๆๆ | SAEA.RedisSocket | StackExchange.Redis | ServiceStack.Redis |
|---|---|---|---|
| ๅบๅฑๆๆฏ | IOCP | SocketAsyncEventArgs | Socket |
| ่ฟๆฅๆจกๅผ | ๅ่ฟๆฅๅค็จ | ๅค่ทฏๅค็จ | ่ฟๆฅๆฑ |
| Cluster ๆฏๆ | โ ๅฎๆดๆฏๆ | โ ๅฎๆดๆฏๆ | โ ๏ธ ๆ้ๆฏๆ |
| Stream ๆฏๆ | โ ๅฎๆดๆฏๆ | โ ๅฎๆดๆฏๆ | โ ไธๆฏๆ |
| ๅๅธๅผ้ | โ ๅ ็ฝฎๅฎ็ฐ | โ ๏ธ ้่ช่กๅฎ็ฐ | โ ๏ธ ้่ช่กๅฎ็ฐ |
| Pipeline | โ Batch ๆน้ | โ ๆน้ๆฏๆ | โ ๆน้ๆฏๆ |
| ่ชๅจ้่ฟ | โ ๅ ็ฝฎ | โ ๅ ็ฝฎ | โ ๏ธ ๆ้ |
| ๅ ๅคงๅฐ | ~150KB | ~600KB | ~300KB |
| ๅฏๅจ้ๅบฆ | ๅฟซ | ไธญ | ไธญ |
| ๆไฝ | QPS (ๅ็บฟ็จ) | ๅปถ่ฟ (P99) |
|---|---|---|
| SET | ~120,000 | ~0.8ms |
| GET | ~150,000 | ~0.6ms |
| HSET | ~100,000 | ~1.0ms |
| HGET | ~130,000 | ~0.7ms |
| LPUSH | ~110,000 | ~0.9ms |
| ZADD | ~90,000 | ~1.1ms |
| Pipeline (100ๅฝไปค) | ~50,000 batches | ~2.0ms |
๐ก ๆต่ฏ็ฏๅข: Intel i7-10700, 32GB RAM, Redis 7.0, .NET 7.0
ไผ ็ปๅๆญฅๆจกๅ:
็บฟ็จ1 โโโบ ้ปๅก็ญๅพ
โโโบ ๅๅบ โโโบ ๅค็
็บฟ็จ2 โโโบ ้ปๅก็ญๅพ
โโโบ ๅๅบ โโโบ ๅค็
็บฟ็จ3 โโโบ ้ปๅก็ญๅพ
โโโบ ๅๅบ โโโบ ๅค็
(ๆฏ่ฟๆฅไธ็บฟ็จ๏ผ่ตๆบๆถ่ๅคง)
IOCP ๅผๆญฅๆจกๅ:
ๅไธช็บฟ็จ โโโบ ๅ่ตท่ฏทๆฑ โโโบ ็ปง็ปญๅค็
โโโบ ๅ่ตท่ฏทๆฑ โโโบ ็ปง็ปญๅค็
โโโบ ๅ่ตท่ฏทๆฑ โโโบ ็ปง็ปญๅค็
โผ
ๅฎๆ็ซฏๅฃ้็ฅ โโโบ ๅค็ๅๅบ
(ๅ็บฟ็จๅค็ๅค่ฟๆฅ๏ผ้ซๆๅฉ็จ CPU)
A: SAEA.RedisSocket ไผ่ชๅจๆฃๆต๏ผๆ ้ๆๅจๅๆข๏ผ
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
if (client.IsCluster)
{
Console.WriteLine("้็พคๆจกๅผ๏ผ่ชๅจๅค็ MOVED/ASK ้ๅฎๅ");
}
else
{
Console.WriteLine("ๅๆบๆจกๅผ");
}
้็พคๆจกๅผไธ๏ผๆกๆถ่ชๅจๅค็๏ผ
A: SAEA.RedisSocket ็ๅๅธๅผ้ๅบไบ SETNX ๅฎ็ฐ๏ผๅ ๅซไปฅไธๅฎๅ จๆบๅถ๏ผ
var db = client.GetDataBase();
// ่ทๅ้๏ผๅๅญๆไฝ๏ผ
var acquired = db.Lock("resource", "unique_value", 30);
// ้ๆพ้๏ผLua ่ๆฌไฟ่ฏๅๅญๆง๏ผ
db.Unlock("resource", "unique_value");
ๅฎๅ จๆบๅถ๏ผ
A: ไฝฟ็จ SCAN ๅฝไปคๅฎๅ จ้ๅ๏ผ้ฟๅ KEYS ้ปๅก๏ผ
var db = client.GetDataBase();
// ๅฎๅ
จ้ๅๆๆ Key
var cursor = 0L;
do
{
var result = db.Scan(cursor, "user:*", 100);
cursor = result.Cursor;
foreach (var key in result.Keys)
{
Console.WriteLine(key);
}
} while (cursor != 0);
A: Pipeline ๅฐๅคไธชๅฝไปคๅๅนถๅ้๏ผๅๅฐ็ฝ็ปๅพ่ฟ๏ผ
// ๆฎ้ๆไฝ๏ผ3ๆฌก็ฝ็ปๅพ่ฟ
db.Set("k1", "v1"); // ๅพ่ฟ1
db.Set("k2", "v2"); // ๅพ่ฟ2
db.Get("k1"); // ๅพ่ฟ3
// Pipeline๏ผ1ๆฌก็ฝ็ปๅพ่ฟ
var batch = db.CreatedBatch();
batch.Set("k1", "v1");
batch.Set("k2", "v2");
batch.Get("k1");
var results = batch.Execute(); // ๅช้1ๆฌกๅพ่ฟ
A: ้่ฟ่ฟๆฅๅญ็ฌฆไธฒ้ ็ฝฎ๏ผ
var client = new RedisClient(
"server=127.0.0.1:6379;" +
"passwords=123456;" +
"actionTimeout=5000" // ๆไฝ่ถ
ๆถ5็ง
);
ๆกๆถๅ ็ฝฎ่ชๅจ้่ฟๆบๅถ๏ผ่ฟๆฅๆญๅผๅ่ชๅจ้่ฏใ
A: ไฝฟ็จๆถ่ดน็ปๅฎ็ฐๅฏ้ ๆถ่ดน๏ผ
var consumer = client.GetRedisGroupConsumer(
"mystream",
"mygroup",
"consumer1"
);
consumer.Subscribe((messages) =>
{
foreach (var msg in messages)
{
try
{
// ๅค็ๆถๆฏ
ProcessMessage(msg);
// ๆๅๅ่ชๅจ ACK
}
catch (Exception ex)
{
// ๅค็ๅคฑ่ดฅ๏ผๆถๆฏไฟ็ๅจ Pending ๅ่กจ
// ๅฏ้่ฟ XPENDING ๆฅ็ๆช็กฎ่ฎคๆถๆฏ
}
}
});
A: ไฝฟ็จๅ ็ฝฎๅฑๆงๅไบไปถ๏ผ
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
// ๆฃๆฅ่ฟๆฅ็ถๆ
Console.WriteLine($"ๅทฒ่ฟๆฅ: {client.IsConnected}");
Console.WriteLine($"้็พคๆจกๅผ: {client.IsCluster}");
// ่ทๅๆๅกๅจไฟกๆฏ
var info = client.Info();
Console.WriteLine(info);
| ็ฑปๅ | ่ฏดๆ |
|---|---|
RedisClient |
Redis ๅฎขๆท็ซฏไธปๅ ฅๅฃ๏ผ็ฎก็่ฟๆฅ |
RedisDataBase |
ๆฐๆฎๅบๆไฝ็ฑป๏ผๅ้จ็ฑป๏ผ๏ผๅ ๅซๆๆๆฐๆฎๆไฝ |
RedisConfig |
่ฟๆฅ้ ็ฝฎ็ฑป |
RedisLock |
ๅๅธๅผ้ๅฎ็ฐ |
RedisProducer |
Stream ็ไบง่ |
RedisConsumer |
Stream ๆถ่ดน่ |
RedisGroupConsumer |
Stream ็ปๆถ่ดน่ ๏ผๆฏๆ่ด่ฝฝๅ่กก |
Batch |
Pipeline ๆน้ๆไฝๅฎ็ฐ |
using SAEA.RedisSocket;
// ๆนๅผ1๏ผ่ฟๆฅๅญ็ฌฆไธฒ
var client = new RedisClient("server=127.0.0.1:6379;passwords=123456");
// ๆนๅผ2๏ผRedisConfig ๅฏน่ฑก
var config = new RedisConfig("127.0.0.1:6379", "123456", 6000);
var client = new RedisClient(config);
// ๆนๅผ3๏ผ็ดๆฅๅๆฐ
var client = new RedisClient("127.0.0.1:6379", "123456", 6000);
// ่ฟๆฅ
client.Connect();
// ๆฃๆฅ่ฟๆฅ็ถๆ
Console.WriteLine($"ๅทฒ่ฟๆฅ: {client.IsConnected}");
Console.WriteLine($"ๆฏๅฆ้็พค: {client.IsCluster}");
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
var db = client.GetDataBase();
// ่ฎพ็ฝฎๅผ
db.Set("key", "value");
db.Set("key", "value", 3600); // ่ฎพ็ฝฎ่ฟๆๆถ้ด๏ผ็ง๏ผ
// ่ทๅๅผ
var value = db.Get("key");
// ๆน้่ฎพ็ฝฎ/่ทๅ
db.MSet(new Dictionary<string, string> { ["k1"] = "v1", ["k2"] = "v2" });
var values = db.MGet("k1", "k2");
// ่ชๅข/่ชๅ
db.Increment("counter");
db.IncrementBy("counter", 10);
db.Decrement("counter");
var db = client.GetDataBase();
// ่ฎพ็ฝฎ Hash ๅญๆฎต
db.HSet("user:1", "name", "ๅผ ไธ");
db.HSet("user:1", "age", "25");
// ่ทๅ Hash ๅญๆฎต
var name = db.HGet("user:1", "name");
// ๆน้่ฎพ็ฝฎ/่ทๅ
db.HMSet("user:1", new Dictionary<string, string> { ["name"] = "ๅผ ไธ", ["age"] = "25" });
var all = db.HMGet("user:1", "name", "age");
var allFields = db.HGetAll("user:1");
// ๅญๆฎตๆฐ้
var count = db.HLen("user:1");
// ๅ ้คๅญๆฎต
db.HDel("user:1", "age");
// Hash ๅญๆฎต่ชๅข
db.HIncrementBy("user:1", "score", 10);
var db = client.GetDataBase();
// ๆจๅ
ฅๅ
็ด
db.LPush("list", "item1");
db.RPush("list", "item2");
// ๅผนๅบๅ
็ด
var leftItem = db.LPop("list");
var rightItem = db.RPop("list");
// ่ทๅๅ่กจ้ฟๅบฆ
var length = db.LLen("list");
// ่ทๅ่ๅดๅ
็ด
var items = db.LRang("list", 0, -1); // ่ทๅๆๆ
// ่ทๅๆๅฎไฝ็ฝฎๅ
็ด
var item = db.LIndex("list", 0);
// ้ปๅกๅผนๅบ
var popped = db.BLPop("list", 10); // ็ญๅพ
10็ง
var db = client.GetDataBase();
// ๆทปๅ ๆๅ
db.SAdd("set", "member1");
db.SAdd("set", "member2");
// ๆฃๆฅๆๅๆฏๅฆๅญๅจ
var exists = db.SExists("set", "member1");
// ่ทๅๆๆๆๅ
var members = db.SMemebers("set");
// ็งป้คๆๅ
db.SRemove("set", "member1");
// ้ๅๆไฝ
var inter = db.SInter("set1", "set2"); // ไบค้
var union = db.SUnion("set1", "set2"); // ๅนถ้
var diff = db.SDiff("set1", "set2"); // ๅทฎ้
var db = client.GetDataBase();
// ๆทปๅ ๆๅ๏ผๅธฆๅๆฐ๏ผ
db.ZAdd("zset", "member1", 100);
db.ZAdd("zset", "member2", 200);
// ่ทๅๅๆฐ
var score = db.ZScore("zset", "member1");
// ่ทๅๆๅ
var rank = db.ZRank("zset", "member1");
// ่ทๅ่ๅดๆๅ
var members = db.ZRange("zset", 0, -1);
var membersWithScore = db.ZRangeWithScores("zset", 0, -1);
// ๅขๅ ๅๆฐ
db.ZIncrBy("zset", 50, "member1");
var db = client.GetDataBase();
// ๅ ้ค้ฎ
db.Del("key");
// ๆฃๆฅ้ฎๆฏๅฆๅญๅจ
var exists = db.Exists("key");
// ่ฎพ็ฝฎ่ฟๆๆถ้ด
db.Expire("key", 3600);
db.ExpireAt("key", DateTime.Now.AddHours(1));
// ่ทๅๅฉไฝ็ๅญๆถ้ด
var ttl = db.Ttl("key");
// ๆฅๆพๅน้
็้ฎ
var keys = db.Keys("user:*");
// ้ๅฝๅ
db.Rename("oldkey", "newkey");
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
// ่ทๅ้
var lockKey = "resource_lock";
var lockValue = Guid.NewGuid().ToString();
var acquired = client.GetDataBase().Lock(lockKey, lockValue, 30);
if (acquired)
{
try
{
// ๆง่กไธๅก้ป่พ
Console.WriteLine("้ๅทฒ่ทๅ๏ผๆง่กๆไฝ...");
}
finally
{
// ้ๆพ้
client.GetDataBase().Unlock(lockKey, lockValue);
}
}
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
// ๅๅธๆถๆฏ
client.GetDataBase().Publish("channel", "Hello Subscribers!");
// ่ฎข้
ๆถๆฏ
client.GetDataBase().Subscribe("channel", (channel, message) =>
{
Console.WriteLine($"ๆถๅฐๆถๆฏ [{channel}]: {message}");
});
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
// ็ไบง่
var producer = client.GetRedisProducer("mystream");
producer.Publish(new Dictionary<string, string> { ["field"] = "value" });
// ๆถ่ดน่
var consumer = client.GetRedisConsumer("mystream", "consumer1");
consumer.Subscribe((messages) =>
{
foreach (var msg in messages)
{
Console.WriteLine($"ๆถๆฏID: {msg.Id}, ๆฐๆฎ: {msg.Data}");
}
});
// ็ปๆถ่ดน่
๏ผๆฏๆ่ด่ฝฝๅ่กก๏ผ
var groupConsumer = client.GetRedisGroupConsumer("mystream", "mygroup", "consumer1");
groupConsumer.Subscribe((messages) =>
{
// ๅค็ๆถๆฏๅ่ชๅจ ACK
});
using SAEA.RedisSocket;
var client = new RedisClient("server=127.0.0.1:6379");
client.Connect();
var batch = client.GetDataBase().CreatedBatch();
// ๆน้ๆทปๅ ๅฝไปค
batch.Set("key1", "value1");
batch.Set("key2", "value2");
batch.Get("key1");
// ๆง่กๆน้ๆไฝ
var results = batch.Execute();
using SAEA.RedisSocket;
// ่ฟๆฅ้็พค่็น
var client = new RedisClient("server=192.168.1.1:6379;passwords=123456");
client.Connect();
// ่ชๅจๆฃๆต้็พค
if (client.IsCluster)
{
Console.WriteLine("ๅฝๅไธบ Redis Cluster ๆจกๅผ");
// ่ทๅ้็พคไฟกๆฏ
var clusterInfo = client.ClusterInfoStr();
// ่ชๅจ้ๅฎๅๅค็๏ผMOVED/ASK๏ผ
// ๆ ้ๆๅจๅค็๏ผๆกๆถ่ชๅจๅฎๆ
}
// ้็พค็ฎก็ๆไฝ
client.AddSlots(new int[] { 0, 1, 2, 3 });
client.DelSlots(new int[] { 0, 1 });
client.ClusterNodes();
server=127.0.0.1:6379;passwords=your_password;actionTimeout=6000
| ๅๆฐ | ๅฟ ๅกซ | ่ฏดๆ |
|---|---|---|
server |
ๆฏ | Redis ๆๅกๅจๅฐๅ๏ผๆ ผๅผ ip:port |
passwords |
ๅฆ | ่ฎค่ฏๅฏ็ |
actionTimeout |
ๅฆ | ๆไฝ่ถ ๆถ(ๆฏซ็ง)๏ผ้ป่ฎค 6000 |
| ๅ ๅ | ็ๆฌ | ่ฏดๆ |
|---|---|---|
| SAEA.Sockets | 7.26.2.2 | IOCP ้ไฟกๆกๆถ |
| SAEA.Common | 7.26.2.2 | ๅ ฌๅ ฑๅทฅๅ ท็ฑป |
Apache License 2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 was computed. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 was computed. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 was computed. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 was computed. |
| .NET Framework | net461 net461 was computed. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
This package is not used by any NuGet packages.
Showing the top 1 popular GitHub repositories that depend on SAEA.RedisSocket:
| Repository | Stars |
|---|---|
|
yswenli/WebRedisManager
WebRedis Manager is a simple management to implement Redis using SAEA. RedisSocket, SAEA.MVC and running speed quickly.WebRedisManagerๆฏไฝฟ็จ็SAEA.RedisSocketใSAEA.MVC็ญๅฎ็ฐRedis็็ฎไพฟ็ฎก็ๅ่ฝ๏ผ่ฝปๆพ่ฟ่ก~
|
| Version | Downloads | Last Updated |
|---|---|---|
| 26.4.23.1 | 129 | 4/23/2026 |
| 26.4.22.1 | 115 | 4/21/2026 |
| 7.26.4.21 | 95 | 4/20/2026 |
| 7.26.4.20 | 97 | 4/20/2026 |
| 7.26.2.2 | 137 | 2/2/2026 |
| 7.26.1.27 | 125 | 1/27/2026 |
| 7.26.1.25 | 135 | 1/25/2026 |
| 7.25.2.19 | 295 | 2/19/2025 |
| 7.25.2.18 | 216 | 2/18/2025 |
| 7.25.2.13 | 191 | 2/13/2025 |
| 7.25.2.11 | 235 | 2/11/2025 |
| 7.24.8.4 | 195 | 8/4/2024 |
| 7.23.9.24 | 327 | 9/24/2023 |
| 7.0.3.19 | 492 | 3/19/2023 |
| 7.0.0.3 | 827 | 2/27/2022 |
| 7.0.0.2 | 609 | 12/5/2021 |
| 7.0.0.1 | 512 | 11/28/2021 |
| 6.2.6.7 | 640 | 9/19/2021 |
| 6.2.6.6 | 653 | 8/15/2021 |
| 6.2.6.5 | 629 | 8/10/2021 |
This is a high-performance redis driver based on SAEA.Sockets, supporting redis cluster.
่ฟๆฏไธไธชๅบไบSAEA.Sockets็redis ้ซๆง่ฝ้ฉฑๅจ๏ผๆฏๆredis cluster
https://github.com/yswenli/SAEA