1. 程式人生 > >快取框架——Redis(一)

快取框架——Redis(一)

一,服務端的安裝

        服務端我用的是redis64-2.6.12.1,版本比較低,因為2.8的都安不上,可能是因為自己電腦是windows的原因吧。

        解壓完成之後,

    進入到這個資料夾裡面,輸入:redis-server.exe redis.conf,服務開啟成功之後,會這樣子:

    

二,客戶端程式的安裝

           與memcached一樣,我們也可以通過cmd的方式操作快取,在客戶端程式裡面,可以使用dll.

                   在。net專案裡面,我使用的是ServiceStack.Redis.3.9.29.0

                  


三,簡單Demo示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using ServiceStack.Common;
using ServiceStack.ServiceInterface;
using ServiceStack.Redis;
using ServiceStack.Text;



namespace TestRedis
{
    class Program
    {
        static RedisClient Redis = new RedisClient("127.0.0.1", 6379);

        static void Main(string[] args)
        {
            //將字元列表新增到redis
            List<string> storeMembers = new List<string>{"one","two","three" };
            storeMembers.ForEach(x=>Redis.AddItemToList("addItemToList",x));

            //得到指定的key所對應的value集合
            var members = Redis.GetAllItemsFromList("addItemToList");
            members.ForEach(s=>Console.WriteLine("addItemToList:"+s));

            //獲取指定索引位置資料
            var item = Redis.GetItemFromList("addItemToList",2);
            Console.WriteLine(item);

            //移除資料
            var list = Redis.Lists["addItemToList"];
            list.Clear();//清空
            list.Remove("two");//移除指定鍵值

            //儲存物件(json序列化方法)它比object序列化方法效率高
            Redis.Set<UserInfo>("userInfo", new UserInfo() { UserName="lhc",Age=12});
            UserInfo userInfo = Redis.Get<UserInfo>("userInfo");
            Console.WriteLine("name="+userInfo.UserName+";age="+userInfo.Age);

            //儲存值型別資料
            Redis.Set<int>("my_age", 12);
            int age = Redis.Get<int>("my_age");
            Console.WriteLine("age=" + age);

            //object序列化方式儲存
            var ser = new ServiceStack.Redis.Support.ObjectSerializer();
            bool result=Redis.Set<byte[]>("userInfo2",ser.Serialize(new UserInfo(){UserName="pbc",Age=27}));
            UserInfo userInfo2=ser.Deserialize(Redis.Get<byte[]>("userInfo2")) as UserInfo;
            Console.WriteLine("name="+userInfo2.UserName+";age="+userInfo2.Age);

            //也支援列表
            List<UserInfo> userInfoList = new List<UserInfo> { 
                new UserInfo{UserName="lhccc",Age=22},
                new UserInfo{UserName="bcss",Age=100}
            };
            Redis.Set<byte[]>("UserInfoList_serialize", ser.Serialize(userInfoList));
            List<UserInfo> userList = ser.Deserialize(Redis.Get<byte[]>("UserInfoList_serialize")) as List<UserInfo>;
            userList.ForEach(
                u => {
                    Console.WriteLine("name="+u.UserName+";age="+u.Age);
                }
                );

            Console.ReadKey();

        }
    }
}

                個人感覺,redis比memcached支援資料型別多,而且記憶體資料可以持久化,效能也不錯,關於具體的技術選項分析,見下月吧。