zoukankan      html  css  js  c++  java
  • Redis可以做哪些事儿?

        Redis可以作为数据库,提供高速缓存,消息队列等功能,这里介绍Redis可以做的其中两件事:

      1.提供缓存功能,作为缓存服务器;

      2.轻量级的消息队列(MQ)进行使用.

     /// <summary>
        /// Redis帮助类
        /// </summary>
        public class RedisHelper
        {
            /// <summary>
            /// 往消息队列中放入数据
            /// </summary>
            /// <param name="listId">队列Id</param>
            /// <param name="value">数据</param>
            public static void Enqueue(string listId, string value)
            {
                using (IRedisClient client = RedisManager.ClientManager.GetClient())
                {
                    client.EnqueueItemOnList(listId, value);
                }
                return;
            }
    
            /// <summary>
            /// 从消息队列中取出数据
            /// </summary>
            /// <param name="listId">队列Id</param>
            /// <returns></returns>
            public static string Dequeue(string listId)
            {
                using (IRedisClient client = RedisManager.ClientManager.GetClient())
                {
                    return client.DequeueItemFromList(listId);
                }
            }
    
            /// <summary>
            /// 从消息队列中取出数据
            /// </summary>
            /// <param name="redisClient"></param>
            /// <param name="listId"></param>
            /// <returns></returns>
            public static string Dequeue(IRedisClient redisClient, string listId)
            {
                return redisClient.DequeueItemFromList(listId);
            }
    
            /// <summary>
            /// Redis写
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key">键</param>
            /// <param name="value">值</param>
            /// <param name="cacheTime">缓存时间(分钟)</param>
            /// <returns></returns>
            public static bool Set<T>(string key, T value, int cacheTime = 0)
            {
                using (IRedisClient client = RedisManager.ClientManager.GetClient())
                {
                    if (cacheTime <= 0)
                    {
                        return client.Set<T>(key, value);
                    }
                    return client.Set<T>(key, value, DateTime.Now.AddMinutes(cacheTime));
                }
            }
    
            /// <summary>
            /// Redis读
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="key">键</param>
            /// <returns></returns>
            public static T Get<T>(string key)
            {
                using (IRedisClient client = RedisManager.ClientManager.GetClient())
                {
                    return client.Get<T>(key);
                }
            }
        }
    
        /// <summary>
        /// Redis管理类
        /// </summary>
        public class RedisManager
        {
            public static PooledRedisClientManager ClientManager { get; private set; }
            static RedisManager()
            {
                RedisClientManagerConfig redisConfig = new RedisClientManagerConfig();
                redisConfig.MaxWritePoolSize = 128;
                redisConfig.MaxReadPoolSize = 128;
                ClientManager = new PooledRedisClientManager(new string[] { "127.0.0.1" }, new string[] { "127.0.0.1" }, redisConfig);
            }
        }
    

      

    消息队列数据消费方示例代码:

     JavaScriptSerializer serializer = new JavaScriptSerializer();
                //数据消费者
                while (true)
                {
                    string data = RedisHelper.Dequeue("sendActiveEmail");
                    if (data != null)
                    {
                        EmailModel emailModel = (EmailModel)serializer.Deserialize(data, typeof(EmailModel));
                        Console.WriteLine("发送邮件:" + emailModel.MailTo);
                        CommonHelper.SendEmail(emailModel.MailTo, emailModel.Subject, emailModel.Body, true);
                        Console.WriteLine("发送邮件完成");
                    }
                    else
                    {
                        Thread.Sleep(500);
                    }
                }
    

      

    附:

    Redis驱动开发包(.dll):

  • 相关阅读:
    luoguP1080 国王游戏 题解(NOIP2012)(贪心+高精)
    luoguP1079 Vigenère 密码 题解(NOIP2012)
    luoguP2184 贪婪大陆 题解(树状数组)
    luoguP2680 运输计划 题解(二分答案+树上差分)
    树链剖分总结
    树上差分总结
    luoguP3258 [JLOI2014]松鼠的新家 题解(树上差分)
    简单差分(保证你一看就懂)
    luoguP3128 [USACO15DEC]最大流Max Flow 题解(树上差分)
    luoguP1541 乌龟棋 题解(NOIP2010)
  • 原文地址:https://www.cnblogs.com/miaosha5s/p/5371347.html
Copyright © 2011-2022 走看看