From c6cc72986a17fb5729b984a3e0a8ec76e96b3934 Mon Sep 17 00:00:00 2001 From: 2881099 <2881099@users.noreply.github.com> Date: Tue, 6 May 2025 14:59:22 +0800 Subject: [PATCH] =?UTF-8?q?Updated=20=E8=AF=BB=E5=86=99=E5=88=86=E7=A6=BB?= =?UTF-8?q?=20(markdown)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 读写分离.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/读写分离.md b/读写分离.md index 7ec4088..e38e24d 100644 --- a/读写分离.md +++ b/读写分离.md @@ -28,6 +28,43 @@ fsql.Select().Master().WhereId(a => a.Id == 1).ToOne(); //强制读【主库 fsql.Ado.Query("/*master*/ select * from t where ..."); //强制读【主库】 ``` +## 使用 FreeSqlCloud 另一种读写分离 + +```csharp +public enum DbEnum { db1, db2, db3 } + +var fsql = new FreeSqlCloud(); + +fsql.Register(DbEnum.db3, () => new FreeSqlBuilder() + .UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=1") + .UseAutoSyncStructure(true).Build()); +fsql.Register(DbEnum.db2, () => new FreeSqlBuilder() + .UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=2") + .UseAutoSyncStructure(true).Build()); +fsql.Register(DbEnum.db1, () => new FreeSqlBuilder() + .UseConnectionString(DataType.Sqlite, @"Data Source=:memory:;max pool size=3") + .UseAutoSyncStructure(true).Build()); + +fsql.EntitySteering = (_, e) => +{ + switch (e.MethodName) + { + case "Select": + if (e.DBKey == DbEnum.db1) //判断主库时 + { + var dbkeyIndex = new Random().Next(0, e.AvailableDBKeys.Length); + e.DBKey = e.AvailableDBKeys[dbkeyIndex]; //重新定向到其他 db + } + break; + case "Insert": + case "Update": + case "Delete": + case "InsertOrUpdate": + break; + } +}; +``` + ## 参考资料 - [《数据库事务》](%e4%ba%8b%e5%8a%a1)