使用BeetleX访问redis服务
??????? BeetleX針對redis訪問封了全async/await操作模式,通過它可以更高效地訪問redis服務。BeetleX.Redis提供讀寫分離和多機故意寫入處理,同時安全的TLS訪問機制,在使用功能上組件支持絕大部分基礎指令,并提供json,protobuf和messagepack序列化的支持;組件默認基于連接池操作,高并發處理使更簡便。
支持指令
????????組件實現的基礎指令雖然不是全部,但相關基礎功能的都有實現,包括有序列,訂閱和消息隊列等等;以下是實現的指令列表。
涉及到常用功能一百多個指令都有實現,不過在集群方面組件并沒有支持,主要考慮到這種方式都可以通過服務拆分治理的方式可以解決。如果你也想參與這個組件的開發可以訪問 https://github.com/IKende/BeetleX.Redis
使用
????????在項目中通過Nuget引用BeetleX.Redis組件,最新版本是v1.0.1。引用組件后就可以通過RedisDB來操作redis服務。
RedisDB DB = new RedisDB(0);創建完RedisDB后需要添加對應的redis寫入服務地址
db.Host.AddWriteHost("127.0.0.1");以上是針對當前RedisDB添加一個服務地址,實際上可以通過AddWriteHost添加多個,當存在多個WriteHost的情況按順序寫入第一個,其他WriteHost則用于故障備份需要。如果需要讀寫分離可以通過AddReadHost添加讀的服務地址.
db.Host.AddReadHost("127.0.0.1", 6378);為了可以對應故障處理,同樣支持添加多個。
序列化格式
??????? RedisDB默認是以string的方式來處理內容,一般情況不會這樣用,畢竟在應用中都涉及到對象處理;所以在使用前最好配置一下DataFormater類型。
RedisDB.DataFormater?=?new?JsonFormater();以上是配置一個Json的序列化處理器,組件還提供ProtobufFormater和MessagePackFormater;相對于json來說這兩種序列化可以得到更高效的序列化處理性能和更低的內存占用空間。
密碼/TLS
? ? ? ? 為了安全考慮一般redis服務都會添加密碼,有些情況為了保障通訊的安全還可能基于TLS的方式訪問。
var?host?=?RedisDB.Host.AddWriteHost("127.0.0.1",?6379,?true); host.Password = "123456";以上代碼是在添加服務地址的時候指定為TLS訪問,通過Password屬性設置服務訪問密碼。
操作
????????當RedisDB定義好后就可以進行操作,RedisDB的所有操作都是基于async/await進行
SET/GET
MSET
快速訪問
????????如果不想定義RedisDB對象,組件提供了一個默認的DefaultRedis對象來簡單化操作。
DefaultRedis.Instance.DataFormater = new JsonFormater();DefaultRedis.Instance.Host.AddWriteHost("127.0.0.1");await?DefaultRedis.Set("emp1",?GetEmployee(1));await?DefaultRedis.Set("order1",?GetOrder(1));await?DefaultRedis.Set("customer1",?GetCustomer(1));await?DefaultRedis.Get<Employee,?Order,?Customer>("emp1",?"order1",?"customer1");bytes操作
????????有些情況需求直接讀寫redis的bytes數據,組件支持這樣操作。
創建訂閱
創建列表
var list = DB.CreateList<Employee>("employees"); await?list.RPush(GetEmployee(1)); await?list.RPush(GetEmployee(2)); await?list.Insert(true,?GetEmployee(2),?GetEmployee(3)); await?list.Range(0,?-1);鍵值表
序列
string member = "ken"; var sequeue = DB.CreateSequence("seq2"); var count = await sequeue.ZAdd((4.14, member)); var?value?=?await?sequeue.ZScore(member); await sequeue.ZIncrby(5, member); value?=?await?sequeue.ZScore(member);隊列
RedisStream<Employee> stream = DB.GetStream<Employee>("employees_stream"); var id = await stream.Add(DataHelper.Defalut.Employees[0]); id = await stream.Add(DataHelper.Defalut.Employees[1]); id?=?await?stream.Add(DataHelper.Defalut.Employees[2]); var len = await stream.Len();var group = await stream.GetGroup("g1"); var items = await group.Read("henry", "0"); foreach (var item in items)await?item.Ack(); items = await group.Read("henry"); 【BeetleX通訊框架代碼詳解】 【WebApi示例擴展】 BeetleX開源跨平臺通訊框架(支持TLS)
輕松實現高性能:tcp、http、websocket、redis、rpc和網關等服務應用
https://beetlex.io
如果你想了解某方面的知識或文章可以把想法發送到
henryfan@msn.com|admin@beetlex.io
總結
以上是生活随笔為你收集整理的使用BeetleX访问redis服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET 应用如何优雅的做功能开关(Fe
- 下一篇: WPF 使用 Expression De