• 自定义缓存Memcache 以及Cache


    *****缓存存储配置项(读缓存和appsetting配直节点的问题 )*****

    MemCache经常用于数据不用经常改动的数据 不用每次都去数据库中读取,可以防止在系统的缓存中,缓存在内存中读取速度快,但是memcache(是可以分布的缓存)没有保存机制,服务器挂掉,memcache丢失

     

    系统的配置节放在了appsettings配置节下  <add key=”mingzi” value=”assas” />

    ConfigurationManager.appsetting[“mingzi”];获取

     

    CacheHelper

     public class CaCheHelper

        {

            /// <summary>

            /// 获取cache

            /// </summary>

            /// <param name="key"></param>

            /// <param name="value"></param>

            public static void set(string key, string value)

            {

                System.Web.Caching.Cache cache = HttpRuntime.Cache;

                cache[key] = value;

            }

            /// <summary>

            /// 设置cache

            /// </summary>

            /// <param name="key"></param>

            /// <returns></returns>

            public static object Get(string key)

            {

                System.Web.Caching.Cache cache = HttpRuntime.Cache;

                return cache[key];

            }

            /// <summary>

            /// 移除cache

            /// </summary>

            /// <param name="key"></param>

            public static void Remove(string key)

            {

                System.Web.Caching.Cache cache = HttpRuntime.Cache;

                cache.Remove(key);

            }

    }

     

    MemCacheHelper

      private static readonly MemcachedClient mc = null;

            static MemCacheHelper()

            {

                string[] serverlist = { "127.0.0.1:11211" }; //把ip和端口号定义在webConfig

                //初始化池

                SockIOPool pool = SockIOPool.GetInstance();

                pool.SetServers(serverlist);

                pool.InitConnections = 3;

                pool.MinConnections = 3;

                pool.MaxConnections = 5;

                pool.SocketConnectTimeout = 1000;

                pool.SocketTimeout = 3000;

                pool.MaintenanceSleep = 30;

                pool.Failover = true;

                pool.Nagle = false;

                pool.Initialize();

                // 获得客户端实例

                mc = new MemcachedClient();

                mc.EnableCompression = false;

            }

            /// <summary>

            /// 设置

            /// </summary>

            /// <param name="key"></param>

            /// <param name="value"></param>

            public static void Set(string key, object value)

            {

                mc.Set(key, value);

            }

            /// <summary>

            /// 获取缓存

            /// </summary>

            /// <param name="key"></param>

            /// <returns></returns>

            public static object Get(string key)

            {

                return mc.Get(key);

            }

            /// <summary>

            /// 设置缓存并且制定过期时间

            /// </summary>

            /// <param name="key"></param>

            /// <param name="value"></param>

            /// <param name="dt"></param>

            public static void Set(string key, object value, DateTime dt)

            {

                mc.Set(key, value, dt);

            }

            /// <summary>

            /// 删除缓存

            /// </summary>

            /// <param name="key"></param>

            /// <returns></returns>

            public static bool Delete(string key)

            {

                if (mc.KeyExists(key))

                {

                    return mc.Delete(key);

                }

                return false;

            }

    }

     

     

    //读取的时候先进行判断  如果缓存数据中有这个配置节那么就直接返回  如果没有这个配置节那么就从数据库中读取 并且返回  同时把从数据库中读取的数据放入缓存中

      public string GetValue(string key)

            {

                //加上缓存依赖项 在更新数据的时候别忘了remove缓存

                //object obj = Common.CaCheHelper.Get("setting_" + key);//第一次没有所以从数据库中取出

                //if (obj == null)

                //{

                //    var setting = this.DbSession.SettingsDal.LoadEntities(c => c.Name == key).FirstOrDefault();

                //    if (setting != null)

                //    {

                //        Common.CaCheHelper.set("setting_" + key, setting.Value);

                //        //读取出来数据后放入缓存

                //        //返回对应的值

                //        return setting.Value;

                //    }

                //}

                //return obj.ToString();

     

                object o = BookShop.Common.MemCacheHelper.Get("setting_" + key);

                if (o == null)

                {

                    var setting = this.DbSession.SettingsDal.LoadEntities(c => c.Name == key).FirstOrDefault();

                    if (setting != null)

                    {

                        BookShop.Common.MemCacheHelper.Set("setting_" + key, setting.Value);

                        return setting.Value;

                    }

                }

                return o.ToString();

  • 相关阅读:
    Java高并发专题之34、谷歌提供的一些好用的并发工具类
    Java高并发专题之31、等待线程完成的方式你知道几种?
    Java高并发专题之27、实战:你的接口太慢了需要优化
    Java高并发专题之36、线程6种状态详解
    Java高并发专题之32、原子操作增强类LongAdder、LongAccumulator
    Java高并发专题之35、延迟队列 DelayQueue 详解
    Java高并发专题之29、实战:一起来搞懂限流
    Java高并发专题之33、怎么演示公平锁和非公平锁
    Java高并发专题之30、JUC中的CompletableFuture
    plugin:prettier/recommended和vue/maxattributesperline冲突
  • 原文地址:https://www.cnblogs.com/lierjie/p/3833939.html
Copyright © 2020-2023  润新知