前言
本篇我們會示範使用 C# 來對 Redis 進行儲存。
本文
我們會使用StackExchange.Redis這個Nuget套件進行示範。
接下來我們建立一個簡易的 Model。
public class Employee
{
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public Employee(string employeeId, string name, int age)
{
Id = employeeId;
Name = name;
Age = age;
}
}
給予一個初始值後我們將他轉成 JSON 的格式存入 Redis。
static void Main(string[] args)
{
//先取得連線
var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var db = connection.GetDatabase();
var emp = new Employee("1","Sian",27);
Console.WriteLine("資料存入Redis成功 : " +
db.StringSet("Emp1", JsonConvert.SerializeObject(emp)));
}
使用 Another Redis Desktop Manager 可以看到資料存入的詳細資訊,格式為 Json 大小為 33B。
取出資料。
var data = JsonConvert.DeserializeObject(db.StringGet("Emp1"));
Console.WriteLine("取出資料為:" + data);
為了節省儲存資料的大小,通常都會將資料進行壓縮;而這邊比較常見的方式為壓縮成 byte array 的方式。
我們可以透過 MessagePack-CSharp 來簡易的達成這件事。
使用的方式很簡單。
首先在我們的 Model 地方加上幾個 Attribute。
[MessagePackObject]
public class Employee
{
[Key(0)]
public string Id { get; set; }
[Key(1)]
public string Name { get; set; }
[Key(2)]
public int Age { get; set; }
public Employee(string employeeId, string name, int age)
{
Id = employeeId;
Name = name;
Age = age;
}
}
接下來在程式內就可以直接使用序列化方式壓縮成 byte[]。
static void Main(string[] args)
{
var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var db = connection.GetDatabase();
var emp = new Employee("1","Sian",27);
var data = MessagePackSerializer.Serialize(emp);
Console.WriteLine(data);
Console.WriteLine("資料存入Redis成功 : " +
db.StringSet("Emp2", data));
}
在管理介面就可以看到此筆資料格式已經不同了,且大小只剩下原本的三分之一。
透過管理介面也可以看到詳細內容,資料呈現選擇 Msgpack 即可。
取回資料。
static void Main(string[] args)
{
var connection = ConnectionMultiplexer.Connect("127.0.0.1:6379");
var db = connection.GetDatabase();
var emp = new Employee("1","Sian",27);
var data = MessagePackSerializer.ConvertToJson(db.StringGet("Emp2"));
Console.WriteLine("取出資料為:" + data);
}
MessagePack 還支援了很多型別,可以自行嘗試看看。