前言

本篇我們會示範使用 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 還支援了很多型別,可以自行嘗試看看。

參考連結