Posts
>-
條款二十六,運行插入命令時總是指定塞入的欄位。
像是下面這樣不指定要塞入欄位的寫法,塞入的動作會對資料表欄位的順序有所依賴,當欄位順序一有變動就會產生不如預期的結果,而且問題發生時不是很容易可以被偵測出來。
INSERT INTO messages VALUES (l_mess_no ,l_mess_typ ,l_mess_text ); 如果在塞入時明確的指定塞入的欄位,就能避開這樣的問題。
INSERT INTO messages (mess_no ,mess_typ ,mess_text ) VALUES (l_mess_no ,l_mess_typ ,l_mess_text );
read morePosts
StackExchange.Redis - Scripting
使用 StackExchange.Redis 開發 Redis 的 Lua Scripting 程式,只要簡單的透過 Database 物件的 ScriptEvaluateAsync 方法,將 Lua script 及所需的 keys 與 values 帶入即可。
using StackExchange.Redis; ... var configuration = GetConfiguration(); using (var conn = ConnectionMultiplexer.Connect(configuration)) { var db = conn.GetDatabase(); var script = GetScript(); var keys = GetKeys(); var values = GetValues(); var result = db.ScriptEvaluate(script, keys, values); ... } ... 像是下面這邊筆者用 Lua script 實作了類似 Redis 的 MSET 命令,可同時設定三組 Key/Value,寫起來會像下面這樣:
using System; using StackExchange.Redis; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var configuration = "localhost:6379"; using (var conn = ConnectionMultiplexer.
read morePosts
StackExchange.Redis - Pub/Sub Demo
使用 StackExchange.Redis 開發 Redis 的 Pub/Sub 程式,需先調用 GetSubscriber 方法取得 Subscriber 物件,再透過該 Subscriber 物件去設定事件訂閱以及發佈訂閱即可。
像是下面這邊筆者訂閱了 MemberOnLine 的事件,當事件發生時會將上線資訊顯示在主控台,然後發佈 LarryNung 上線的事件給訂閱者:
using System; using StackExchange.Redis; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var configuration = "localhost:6379"; using (var conn = ConnectionMultiplexer.Connect(configuration)) { var sub = conn.GetSubscriber(); var key = "MemberOnLine"; sub.Subscribe(key, (c, v) => { Console.WriteLine("{0} Online...", v); }); sub.PublishAsync(key, "LarryNung", CommandFlags.FireAndForget); } } } } 運行結果如下:
{% img /images/posts/PubSubInStackExchange.
read morePosts
StackExchange.Redis - Server Command Demo
要使用 StackeExchange.Redis 取得 Server 的資訊,或是運行 Server 的命令。要先調用 GetServer 方法取得 Server 物件,再透過該 Server 成員屬性或方法去操作即可。
像是下面這邊筆者遍巡了每台 Server,並將其相關的資訊顯示到主控台:
using System; using StackExchange.Redis; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var configuration = "localhost:6379"; using (var conn = ConnectionMultiplexer.Connect(configuration)) { var endPoints = conn.GetEndPoints(); foreach (var endPoint in endPoints) { var server = conn.GetServer(endPoint); Console.WriteLine("Server: {0}", server.Multiplexer); Console.WriteLine("IsSlave: {0}", server.IsSlave); Console.WriteLine("AllowSlaveWrites: {0}", server.AllowSlaveWrites); Console.WriteLine("ServerType: {0}", server.ServerType); Console.WriteLine("Version: {0}", server.Version); Console.WriteLine("ServerTime: {0}", server.
read morePosts
StackExchange.Redis - Configuration
欲連線至 Redis,需先設定 Configutaion,在 StackExchange.Redis 提供兩種設定方式,一種是用 ConfigurationOptions 物件直接宣告設定:
using StackExchange.Redis; ... var configuration = new ConfigurationOptions() { EndPoints = { {"localhost", 6379}, {"localhost", 6380} }, Password = "LarryNung" }; using (var conn = ConnectionMultiplexer.Connect(configuration)) { ... } ... 一種是透過字串的方式設定:
using StackExchange.Redis; ... var configuration = "localhost:6379,localhost:6380,password=LarryNung"; using (var conn = ConnectionMultiplexer.Connect(configuration)) { ... } ... 如果不清楚有哪些可供設定,可參閱下表:
{% img /images/posts/ConfigurationInStackExchange.Redis/1.png %}
{% img /images/posts/ConfigurationInStackExchange.Redis/2.png %}
read morePosts
StackExchange.Redis - A high performance general purpose redis client for .NET languages
StackExchange.Redis 是 StackExchange 提供的 redis client 實作。
該套件具有以下特點:
High performance multiplexed design, allowing for efficient use of shared connections from multiple calling threads Abstraction over redis node configuration: the client can silently negotiate multiple redis servers for robustness and availability Convenient access to the full redis feature-set Full dual programming model both synchronous and asynchronous usage, without requiring “sync over async” usage of the TPL Support for redis “cluster” 使用上需先透過 NuGet 套件管理視窗安裝套件,他有提供兩種套件,一種是不含強命名簽章的套件 StackExchange.
read morePosts
FX.Configuration - A lightweight/simple/flexible/extensible library to read configurations using strongly typed classes
FX.Configuration 是一號稱輕量,簡單,具彈性,可擴充的 Configuration 讀取套件,可以將 Configuration 讀取到對應的強型別類別中,便於後續 Configuration 設定值得取用。支援 Application/JSON/Mixed Configuration。
使用上可分為幾個步驟。
{% img /images/posts/FxConfiguration/1.png %}
首先需先透過 NuGet 套件管理視窗安裝套件。
{% img /images/posts/FxConfiguration/2.png %}
或是透過 Package Manager Console 輸入下列命令安裝套件。
Install-Package FX.Configuration {% img /images/posts/FxConfiguration/3.png %}
套件安裝完成後,接著要準備 Configuration 設定檔案,視需求決定是要用 Application/JSON/Mixed 哪種 Configuration,並訂定 Configuration 的結構以及要有哪些設定值。
再來要建立 Configuration 對應的類別供後續讀取使用,不同型態的 Configuration 類別需繼承不同的基底類別。
最後建立 Configuration 對應的類別實體,存取該實體的成員屬性即可取得 Configuration 的設定值。
進一步的使用可參閱筆者其它文章,像是讀取Application configuration,讀取JSON configuration,以及讀取mixed configuration。
Link NuGet Gallery | FX.Configuration 0.4.1 friendlyx / fx.configuration — Bitbucket FX.Configuration - Read application configuration - Level Up FX.
read morePosts
FX.Configuration - Read mixed configuration
要用 FX.Configuration 同時讀取 Application 與 JSON Configuration,需先引用 FX.Configuration 套件。
接著在 Application Configuration 中設定資料。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="Setting1" value="Larry Nung"/> </appSettings> </configuration> 以及在 JSON Configuration 中設定資料。
{ "Setting2": "Level Up (http://larrynung.github.io/index.html)" } 再來要設定 Configuration 對應的存取類別,這邊跟一般的 Model 實作類似,只是要類別需繼承自 MixedConfiguration。
using FX.Configuration; namespace ConsoleApplication12 { public class MyMixedConfig : MixedConfiguration { public string Setting1 { get; private set; } public string Setting2 { get; private set; } } } 準備好後就只要將類別實體化即可透過成員屬性取得 Configuration 的設定值。
read more