C# Redis 基础操作源代码

Anonymity | | 访问(207)
using ServiceStack.Redis;
using ServiceStack.Redis.Generic;
using System;
using System.Collections.Generic;
using System.Web.Mvc;

namespace Clump.Redis.Controllers
{
    public class RedisController : Controller
    {
        private string host = "localhost";
        private int port = 6379;
        private string password = "foobared";

        // 普通字符串
        // String是最常用的一种数据类型,普通的key/value存储都可以归为此类 。
        // 一个Key对应一个Value,string类型是二进制安全的。
        // Redis的string可以包含任何数据,比如jpg图片(生成二进制)或者序列化的对象。
        public string StringTest()
        {
            string key = "stringTest";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                if (redisClient.Get(key) == null)
                {
                    redisClient.Set(key, "default value", DateTime.Now.AddSeconds(5));
                }
                message = "String value is: " + redisClient.Get(key);
            }
            return message;
        }

        // Hash实体对象测试
        public string ObjectTest()
        {
            string key = "objectTest";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                if (redisClient.Get(key) == null)
                {
                    redisClient.Set(key, new HomeModel("1", "111"), DateTime.Now.AddSeconds(5));
                }
                message = "Object value is: " + redisClient.Get(key).ToString();
            }
            return message;
        }

        // 列表
        public string ListTest()
        {
            string key = "listTest";
            string message = "";
            Listlist = null;
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                if (redisClient.Get<List>(key) == null)
                {
                    ListnewList = new List();
                    newList.Add(new HomeModel("1", "111"));
                    newList.Add(new HomeModel("2", "222"));
                    newList.Add(new HomeModel("3", "333"));
                    newList.Add(new HomeModel("4", "444"));
                    newList.Add(new HomeModel("5", "555"));
                    redisClient.Set<List>(key, newList, DateTime.Now.AddSeconds(600));
                }
                list = redisClient.Get<List>(key);
                if (list != null && list.Count > 0)
                {
                    foreach (HomeModel item in list)
                    {
                        message += "<br/>" + item.ToString();
                    }
                }

            }
            return message;
        }

        // List数据,无限累加 可重复
        public string ListAddRangeTest()
        {
            string key = "HomeModelList";
            string message = "";

            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                ListnewList = new List();
                newList.Add(new HomeModel("6", "666"));
                newList.Add(new HomeModel("7", "777"));
                newList.Add(new HomeModel("8", "888"));
                newList.Add(new HomeModel("9", "999"));

                IRedisTypedClientredis = redisClient.As();
                IRedisListrlstRInStore = redis.Lists[key];
                rlstRInStore.AddRange(newList);

                Listlist = redis.GetAllItemsFromList(redis.Lists[key]);
                if (list != null && list.Count > 0)
                {
                    foreach (HomeModel item in list)
                    {
                        message += "<br/>" + item.ToString();
                    }
                }
            }
            return message;
        }

        // 删除List数据,无限累加 可重复
        public string ListRemoveTest()
        {
            string key = "HomeModelList";
            string message = "";

            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                IRedisTypedClientredis = redisClient.As();
                redis.RemoveAllFromList(redis.Lists[key]);
            }
            return message;
        }

        // 队列使用(先进先出)
        public string EnqueueTest()
        {
            string key = "enqueueTest";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                redisClient.EnqueueItemOnList(key, "1111111");
                redisClient.EnqueueItemOnList(key, "2222222");
                redisClient.EnqueueItemOnList(key, "3333333");
                long count = redisClient.GetListCount(key);
                for (int i = 0; i < count; i++)
                {
                    message += "<br/>" + redisClient.DequeueItemFromList(key);
                }
            }
            return message;
        }

        // 栈使用(先进后出)
        public string PushTest()
        {
            string key = "pushTest";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                redisClient.PushItemToList(key, "1111111");
                redisClient.PushItemToList(key, "2222222");
                redisClient.PushItemToList(key, "3333333");
                long count = redisClient.GetListCount(key);
                for (int i = 0; i < count; i++)
                {
                    message += "<br/>" + redisClient.PopItemFromList(key);
                }
            }
            return message;
        }

        // Set类型 它是string类型的无序集合。set是通过hash table实现的,添加,删除和查找,对集合我们可以取并集,交集,差集.
        public string SetTest()
        {
            string key1 = "setTest1";
            string key2 = "setTest2";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                redisClient.AddItemToSet(key1, "1111111");
                redisClient.AddItemToSet(key1, "2222222");
                redisClient.AddItemToSet(key1, "3333333");

                redisClient.AddItemToSet(key2, "1111111");
                redisClient.AddItemToSet(key2, "2222222");
                redisClient.AddItemToSet(key2, "4444444");
                redisClient.AddItemToSet(key2, "5555555");

                //普通使用
                HashSethashset = redisClient.GetAllItemsFromSet(key1);
                message += "<br/>普通使用<br/>";
                foreach (string str in hashset)
                {
                    message += "<br/>" + str;
                }

                //求并集  
                HashSethashset1 = redisClient.GetUnionFromSets(new string[] { key1, key2 });
                message += "<br/><br/>求并集<br/>";
                foreach (string str in hashset1)
                {
                    message += "<br/>" + str;
                }

                //求交集  
                HashSethashset2 = redisClient.GetIntersectFromSets(new string[] { key1, key2 });
                message += "<br/><br/>求交集<br/>";
                foreach (string str in hashset2)
                {
                    message += "<br/>" + str;
                }

                //求差集  
                HashSethashset3 = redisClient.GetDifferencesFromSet(key1, new string[] { key2 });
                message += "<br/><br/>求差集<br/>";
                foreach (string str in hashset3)
                {
                    message += "<br/>" + str;
                }

            }
            return message;
        }

        // Sorted Set类型
        // sorted set 是set的一个升级版本,它在set的基础上增加了一个顺序的属性,
        // 这一属性在添加修改元素的时候可以指定,每次指定后,zset(表示有序集合)会自动重新按新的值调整顺序。
        // 可以理解为有列的表,一列存value,一列存顺序。操作中key理解为zset的名字。
        // Redis sorted set的使用场景与set类似,区别是set不是自动有序的,
        // 而sorted set可以通过用户额外提供一个优先级(score)的参数来为成员排序,
        // 并且是插入有序的,即自动排序。当你需要一个有序的并且不重复的集合列表,那么可以选择sorted set数据结构。
        public string SortedSetTest()
        {
            string key = "sortedSetTest";
            string message = "";
            using (RedisClient redisClient = new RedisClient(host, port, password))
            {
                // 不会存在重复数据
                redisClient.AddItemToSortedSet(key, "1111111");
                redisClient.AddItemToSortedSet(key, "2222222");
                redisClient.AddItemToSortedSet(key, "3333333");

                redisClient.AddItemToSortedSet(key, "1111111");// 不会二次保存
                redisClient.AddItemToSortedSet(key, "2222222");// 不会二次保存
                redisClient.AddItemToSortedSet(key, "4444444");
                redisClient.AddItemToSortedSet(key, "5555555");

                Listlist = redisClient.GetAllItemsFromSortedSet(key);
                foreach (string str in list)
                {
                    message += "<br/>" + str;
                }


            }
            return message;
        }
    }

    // 模型对象
    public class HomeModel
    {
        public HomeModel()
        {
        }
        public HomeModel(string message, string createTime)
        {
            this.Message = message;
            this.CreateTime = createTime;
        }
        public string Message { get; set; }
        public string CreateTime { get; set; }
        public override string ToString()
        {
            return "Message=" + this.Message + ",CreateTime=" + this.CreateTime;
        }
    }
}