日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用BeetleX访问redis服务

發布時間:2023/12/4 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用BeetleX访问redis服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??????? BeetleX針對redis訪問封了全async/await操作模式,通過它可以更高效地訪問redis服務。BeetleX.Redis提供讀寫分離和多機故意寫入處理,同時安全的TLS訪問機制,在使用功能上組件支持絕大部分基礎指令,并提供json,protobuf和messagepack序列化的支持;組件默認基于連接池操作,高并發處理使更簡便。

支持指令

????????組件實現的基礎指令雖然不是全部,但相關基礎功能的都有實現,包括有序列,訂閱和消息隊列等等;以下是實現的指令列表。

AUTH| BLPOP| BRPOP| BRPOPLPUSH| DECR| DECRBY| DEL| DUMP| EXISTS| EXPIRE|?EXPIREAT|?FLUSHALL|?GET|?GETBIT|?GETRANGE|?GETSET|?HDEL|? HEXISTS|?HGET|?HGETALL|?HINCRBY|?HINCRBYFLOAT|?HKEYS|?HLEN|?HMGET|? HMSET|?HSET|?HSETNX|?HSTRLEN|?HVALS|?INCR|?INCRBY|?INCRBYFLOAT|? KEYS|?LINDEX|?LINSERT|?LLEN|?LPOP|?LPUSH|?LPUSHX|?LRANGE|?LREM|? LSET|?LTRIM|?MGET|?MOVE|?MSET|?MSETNX|?OBJECT|?PERSIST|?PEXPIRE|? PEXPIREAT|?PING|?PSETEX|?PTTL|?PUBLISH|?RANDOMKEY|?RENAME|?RENAMENX| RPOP|?RPOPLPUSH|?RPUSH|?RPUSHX|?SCAN|?SELECT|?SET|?SETBIT|?SETEX|? SETNX|?SETRANGE|?STRLEN|?SUBSCRIBE|?TOUCH|?TTL|?TYPE|?UNLINK| UNSUBSCRIBE|?WAIT|?ZADD|?ZCARD|?ZCOUNT|?ZINCRBY|?ZINTERSTORE|? ZLEXCOUNT|?ZRANGE|?ZRANGEBYLEX|?ZRANGEBYSCORE|?ZRANK|?ZREM|? ZREMRANGEBYLEX|?ZREMRANGEBYRANK|?ZREMRANGEBYSCORE|?ZREVRANGE|? ZREVRANGEBYSCORE|?ZREVRANK|?ZSCORE|?ZUNIONSTORE|?PFCount|?PFAdd| PFMerge|?INFO|?XACK|?XADD|?XDEL|?XGROUP|?XLEN|?XRANGE|?XREAD| XREADGROUP|?XREVRANGE|

涉及到常用功能一百多個指令都有實現,不過在集群方面組件并沒有支持,主要考慮到這種方式都可以通過服務拆分治理的方式可以解決。如果你也想參與這個組件的開發可以訪問 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

var result = await DB.Set("test", "henryfan1"); var?value?=?await?DB.Get<string>("test");
  • MSET

var result = await DB.MSet(("key1", "hello"), ("key2", "world")); var get = await DB.Get<string>("key1"); get = await DB.Get<string>("key2");

快速訪問

????????如果不想定義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 data = Encoding.UTF8.GetBytes("henryfan@msn.com"); await DB.Set("bytes", new ArraySegment<byte>(data)); var result = await DB.Get<ArraySegment<byte>>("bytes"); Assert.Equal<string>(Encoding.UTF8.GetString(result.Array, 0, result.Count), "henryfan@msn.com");

創建訂閱

var subscribe = DefaultRedis.Subscribe(); subscribe.Register<Employee>("employees", e => {Console.WriteLine($"Receive employee {e.FirstName} {e.LastName}"); }); subscribe.Listen();

創建列表

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);

鍵值表

var table = DB.CreateHashTable("myhash"); await?table.MSet(("field1",?"hello"),?("field2",?"world")); var values = await table.Get<string, string, string>("field1", "field2", "nofield");

序列

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服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。