Exemple #1
0
        public MemcachedLocker(MemcachedClient client, string key, TimeSpan timeOut)
        {
            this.client = client;
            this.key = key;
            this.timeOut = timeOut;

            int sleep = 10;
            DateTime now = DateTime.Now;
            while (DateTime.Now - now < timeOut)
            {
                if (client.Add<DateTime?>(key, DateTime.Now.Add(timeOut)))
                    return;

                //需要排除锁未释放的可能,如果检测到超过超时时间2倍的话,尝试获得锁
                ulong version;
                var time = client.Get<DateTime?>(key, out version);
                if (time == null || (time.HasValue && time.Value.ToLocalTime().Add(timeOut + timeOut) < DateTime.Now))
                {
                    LocalLoggingService.Warning("{0} {1} {2} {3}", DistributedServerConfiguration.ModuleName, "MemcachedLocker", "MemcachedLocker",
                                        string.Format("发现一个超时的分布式锁,超时时间:{0} Key : {1}",
                                        time, key));
                    if (client.Add<DateTime?>(key, DateTime.Now.Add(timeOut), version))
                        return;
                }

                if (sleep < 1000)
                    sleep = sleep * 110 / 100;
                else
                    sleep = 1000;

                Thread.Sleep(sleep);
            }

            throw new TimeoutException(string.Format("获得锁的时间超过了设定的最大时间 {0}", timeOut.ToString()));
        }
 public void Add(string key, object obj)
 {
     if (obj != null && !mc.KeyExists(key))
     {
         mc.Add(key, obj);
     }
 }
Exemple #3
0
 /// <summary>
 /// 添加缓存信息(如果存在缓存信息则直接重写设置,否则添加)
 /// 使用:MemcacheHelper.GetInstance().Add(key,value)
 /// </summary>
 /// <param name="key">需要缓存的键</param>
 /// <param name="value">需要缓存的值</param>
 public void Add(string key, object value)
 {
     if (_client.KeyExists(key))
     {
         _client.Set(key, value);
     }
     _client.Add(key, value);
 }
Exemple #4
0
 public void Add <T>(string key, T value, DateTime date)
 {
     key = preFix + key;
     if (value == null)
     {
         mc.Delete(key);
     }
     else
     {
         mc.Add(key, value, date);
     }
 }
Exemple #5
0
        /// <summary>
        /// 添加缓存
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        public static void SetCache(string key, object obj)
        {
            bool exists = true;

            if (string.IsNullOrEmpty(key))
            {
                throw new ArgumentNullException("key", "缓存键为null");
            }
            mc.Delete(key);
            if (mc.Add(key, obj) == false)
            {
                throw new CacheException("存入缓存失败");
            }
        }
        public void Add(string groupName, string key, object value)
        {
            MemcachedClient client = GetMemcachedClient(groupName);

            RemoteCachePolicy policy = cacheSettingManager.GetRemoteCachePolicy(groupName);

            if (policy != null && policy.AbsoluteExpirationTimeInSecond > 0)
            {
                client.Add(key, value, DateTime.Now.AddSeconds(policy.AbsoluteExpirationTimeInSecond));
            }
            else
            {
                client.Add(key, value);
            }
        }
        //增加
        protected void Button2_Click(object sender, EventArgs e)
        {
            client.Add("a", 5);
            client.Add("b", "test");
            bool result = client.Add("cc", "1234");

            if (result)
            {
                Response.Write("<script>alert('添加成功!')</script>");
            }
            else
            {
                Response.Write("<script>alert('添加成功!')</script>");
            }
        }
Exemple #8
0
 /// <summary>
 /// 添加缓存
 /// </summary>
 /// <param name="key">关键字</param>
 /// <param name="value">缓存值</param>
 public void Add <T>(string key, T value)
 {
     if (this.enable)
     {
         if (cache.Get(key) != null)
         {
             cache.Replace(key, value);
         }
         else
         {
             cache.Add(key, value);
         }
     }
     return;
 }
Exemple #9
0
    /// <summary>
    /// 覆盖缓存
    /// </summary>
    /// <param name="pKey"></param>
    /// <param name="pObject"></param>
    /// <returns></returns>
    private static bool StoreCache(string pKey, object pObject)
    {
        MemcachedClient mc = new MemcachedClient();

        mc.EnableCompression = true;
        bool _result = false;

        if (IsCache(mc, pKey))
        {
            if (mc.Get(pKey) == null)
            {
                mc.Set(pKey, pObject);//缓存存在,强行覆盖
            }
            else
            {
                mc.Replace(pKey, pObject);//缓存存在,强行覆盖
            }
            _result = true;
        }
        else
        {
            mc.Add(pKey, pObject);//第一次加载缓存
            _result = true;
        }
        return(_result);
    }
Exemple #10
0
        //1.Add test
        public String AddTest()
        {
            MemcachedClient cache = MemcachedClient.GetInstance("BeITMemcached");

            cache.Add("BeIt", "123");
            return(HandleLogs("[Cmd=Add]BeIt:" + cache.Get("BeIt").ToString()));
        }
 public static string GetAccessToken()
 {
     try
     {
         string key = "GetWxCatInfo_AccessToken";
         //判断缓存是否存在
         string access_token = memcached.Get <string>(key);
         if (string.IsNullOrEmpty(access_token))
         {
             string appid  = db.config["wechat:appid"];
             string secret = db.config["wechat:secret"];
             //获取最新的token
             string url      = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
             var    response = client.SendAsync(new HttpRequestMessage(HttpMethod.Get, url)).Result;
             var    content  = response.Content.ReadAsStringAsync().Result;
             OAuthAccessTokenJsonResult result = Newtonsoft.Json.JsonConvert.DeserializeObject <OAuthAccessTokenJsonResult>(content);
             if (result.errcode != 0)
             {
                 Console.WriteLine("失败:" + Newtonsoft.Json.JsonConvert.SerializeObject(result));
                 return("");
             }
             access_token = result.access_token;
             memcached.Add(key, result.access_token, 120);
         }
         return(access_token);
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
     return("");
 }
        //更多的是存储一个自定义的类的实例对象。这就需要使用到序列化,下面我们来新加一个类MyObject,让其作为可序列化的对象来存储进Memcached中
        public void MemcachedTest(string[] args)
        {
            //初始化池
            SockIOPool sock = SockIOPool.GetInstance();

            sock.SetServers(serverlist.ToArray()); //添加服务器列表
            sock.InitConnections      = 3;         //设置连接池初始数目
            sock.MinConnections       = 3;         //设置最小连接数目
            sock.MaxConnections       = 5;         //设置最大连接数目
            sock.SocketConnectTimeout = 1000;      //设置连接的套接字超时。
            sock.SocketTimeout        = 3000;      //设置套接字超时读取
            sock.MaintenanceSleep     = 30;        //设置维护线程运行的睡眠时间。如果设置为0,那么维护线程将不会启动;

            //获取或设置池的故障标志。
            //如果这个标志被设置为true则socket连接失败,
            //将试图从另一台服务器返回一个套接字如果存在的话。
            //如果设置为false,则得到一个套接字如果存在的话。否则返回NULL,如果它无法连接到请求的服务器。
            sock.Failover = true;            //如果为false,对所有创建的套接字关闭Nagle的算法。
            sock.Nagle    = false;

            sock.Initialize();

            MemcachedClient mc = new MemcachedClient();

            mc.EnableCompression = true; //是否启用压缩数据

            //mc.Set(key,val);//设置 键值
            //mc.KeyExists(key) //键 是否存
            //mc.Get(key)   //获取 一个键值
            //mc.Delete(key);// 删除 键值

            Console.WriteLine("----------------------------Set-----------");
            mc.Set("key1", "value1");
            Console.WriteLine(mc.Get("key1"));
            Console.WriteLine("---------------------------replay---------");
            mc.Replace("key1", "Replay new Key1");
            Console.WriteLine(mc.Get("key1"));
            Console.WriteLine("---------------------------键值是否存在----");
            if (mc.KeyExists("key2"))
            {
                Console.WriteLine("key2存在");
            }
            else
            {
                Console.WriteLine("key2不存在,设置新值");
                mc.Set("key2", "New key2");
            }
            Console.WriteLine("-------------------------删除数据--------");
            mc.Delete("key2");
            Console.WriteLine("删除之后的数据: " + mc.Get("key2"));

            Console.WriteLine("-------------------------数据过期--------");
            mc.Add("key3", "新数据三内容", DateTime.Now.AddMilliseconds(5000));
            Console.WriteLine(mc.Get("key5"));
            System.Threading.Thread.Sleep(6000);
            Console.WriteLine("过期: " + mc.Get("key5"));

            Console.ReadLine();
        }
Exemple #13
0
        /// <summary>
        /// 设置缓存数据
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">值</param>
        /// <param name="coverType">覆盖类型</param>
        public void Set(string key, object value, CoverType coverType = CoverType.set)
        {
            switch (coverType)
            {
            case CoverType.set:
                _mcClient.Set(key, value);
                break;

            case CoverType.add:
                _mcClient.Add(key, value);
                break;

            case CoverType.replace:
                _mcClient.Replace(key, value);
                break;
            }
        }
        public void MemcachedClientTest()
        {
            client.Add("FirstCache", 1, DateTime.Now.AddSeconds(3600));
            var value = client.Get("FirstCache");

            Assert.IsNotNull(value);
            Assert.AreEqual(value, 1);
        }
 /// <summary>
 /// Set-新增或修改
 /// </summary>
 /// <param name="key">键</param>
 /// <param name="value">值</param>
 /// <returns>是否成功</returns>
 public static bool AddCache(string key, object value)
 {
     if (MemcacheHelperInit())
     {
         if (!mc.KeyExists(key))
         {
             return(mc.Add(key, value));
         }
         else
         {
             return(mc.Set(key, value));
         }
     }
     else
     {
         return(false);
     }
 }
Exemple #16
0
        /// <summary>
        /// 缓存锁
        /// </summary>
        /// <returns></returns>
        public static void LockCache(string name)
        {
            var flag = false;

            while (!flag)
            {
                flag = cache.Add("L_C_Ta_" + name, "123", new TimeSpan(0, 0, 0, 30));
            }
        }
Exemple #17
0
        internal static void SetValue(string sessionId, string userName, DateTime dateTime)
        {
            MemcachedClient _mc = GetClient();

            if (_mc.KeyExists(sessionId))
            {
                _mc.Delete(sessionId);
            }
            _mc.Add(sessionId, userName, dateTime);
        }
Exemple #18
0
 public virtual void Insert(string key, object value, int seconds)
 {
     if (null != _client)
     {
         _client.Add(key, value, DateTime.Now.AddSeconds(seconds));
     }
     if (null != _logger)
     {
         _logger.Error("the distribute client is null.");
     }
 }
Exemple #19
0
 public void Add(string key, object value, DateTime expireDate)
 {
     if (mc.KeyExists(key))
     {
         mc.Set(key, value, expireDate);
     }
     else
     {
         mc.Add(key, value, expireDate);
     }
 }
Exemple #20
0
 /// <summary>
 /// 添加缓存
 /// 注意:如果缓存KEY已经存在,不会再次存储
 /// </summary>
 /// <param name="key">The key</param>
 /// <param name="value">The value</param>
 /// <param name="expiredTime">The expiredTime</param>
 /// <returns>
 /// The Boolean
 /// </returns>
 /// 创建者:孟祺宙
 /// 创建日期:2014/8/15 11:19
 /// 修改者:
 /// 修改时间:
 /// ----------------------------------------------------------------------------------------
 public bool Add(string key, object value, DateTime expiredTime)
 {
     try
     {
         return(_memcachedClient.Add(GetKey(key), value, expiredTime));
     }
     catch (Exception ex)
     {
         return(false);
     }
 }
Exemple #21
0
 //1.Add test
 public void AddTest()
 {
     try
     {
         MemcachedClient cache = MemcachedClient.GetInstance("BeITMemcached");
         cache.Add("BeIt", "123");
         HandleLogs("[Cmd=Add]BeIt:" + cache.Get("BeIt").ToString());
     }
     catch (Exception)
     {
     }
 }
        /// <summary>
        /// 添加单个依赖项的缓存 (最小时间单位为秒)
        /// </summary>
        public static void Set(string depend, string key, object obj, int exp)
        {
            depend = depend.ToLower();
            key    = key.ToLower();

            try
            {
                //HttpContext.Current.Application.Lock();

                //将数据加入缓存
                mclient.Add(key, obj, exp);

                //HttpContext.Current.Application.UnLock();

                ////将Keys加入字典
                //MDictionary_AddKeys(depend, key);
            }
            catch (System.Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Exemple #23
0
        public void TestSet()
        {
            MemcachedClient mc = new MemcachedClient();

            mc.EnableCompression = false;
            mc.Add("SetTest", "123");
            //Test Set
            mc.Set("SetTest", "public bool Set(string key, object value, DateTime expiry, int hashCode)");
            if (mc.KeyExists("SetTest"))
            {
                HandleLogs("[Cmd=Set]SetTest的值是:" + mc.Get("SetTest").ToString());
            }
        }
Exemple #24
0
        public override bool Add(string key, object value, CacheItemPolicy policy, string regionName = null)
        {
            if (policy == null)
            {
                policy = new CacheItemPolicy()
                {
                    AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2)
                };
            }
            TimeSpan ts = policy.AbsoluteExpiration - DateTimeOffset.Now;

            return(_mclient.Add(key, value, DateTime.Now + ts));
        }
Exemple #25
0
        private ulong GetIncreasedIndex(string index_key)
        {
            ulong?index = null;

            while (index == null)
            {
                bool r = m_Client.Add(index_key, 0);
                if (r)
                {
                    index = 0;
                }
                else
                {
                    //index = m_Client.Increment(en_index_key, 1);
                    MemcachedClient.CasResult casRst;
                    ulong unique;
                    do
                    {
                        object t = m_Client.Gets(index_key, out unique);
                        if (t == null)
                        {
                            index = null;
                            break;
                        }
                        index = Convert.ToUInt64(t);
                        if (index >= MAX_LENGTH)
                        {
                            index = 0;
                        }
                        else
                        {
                            index = index + 1;
                        }
                        casRst = m_Client.CheckAndSet(index_key, index.Value, unique);
                    } while (casRst != MemcachedClient.CasResult.Stored);
                }
            }
            return(index.Value);
        }
Exemple #26
0
        //增加
        protected void Button1_Click(object sender, EventArgs e)
        {
            GetDb(out MemcachedClient MClient);
            bool incre = MClient.Add("key1", "helloworld");

            MClient.Set("key2", 12);
            MClient.Set("key3", 3.1415);
            MClient.Add("key4", "设置过期时间", DateTime.Now.AddMinutes(1));
            MClient.Set("key5", "good", 4);
            MClient.Set("key6", "20");

            string s = MClient.Get("key1").ToString();

            if (s == "helloworld" && incre == true)
            {
                Response.Write("<script>alert('添加成功!')</script>");
            }
            else
            {
                Response.Write("<script>alert('添加失败!')</script>");
            }
        }
        public void TestGet()
        {
            MemcachedClient mc = new MemcachedClient();

            mc.Add("Get", "Get A Cmd=Get");
            if (mc.KeyExists("Get"))
            {
                Object o = mc.Get("Get");
                if (o != null)
                {
                    HandleLogs("[Cmd=Get]Get的值是:" + o.ToString());
                    mc.Delete("Get");
                }
            }
        }
Exemple #28
0
        public SimpleRun()
        {
            var bin = new DatabaseBuilder().Append(MakeDoc(5000)).Build();

            db = new MemoryDatabase(bin);

            sqliteMemory = new SQLite_Test(5000, null, false, true);
            sqliteMemory.Prepare(); sqliteMemory.Insert(); sqliteMemory.CreateIndex();
            sqliteFile = new SQLite_Test(5000, null, false, false);
            sqliteFile.Prepare(); sqliteFile.Insert(); sqliteFile.CreateIndex();


            defaultLiteDb = new LiteDB_Test(5000, null, new LiteDB.FileOptions {
                Journal = true, FileMode = LiteDB.FileMode.Shared
            });
            defaultLiteDb.Prepare(); defaultLiteDb.Insert(); defaultLiteDb.CreateIndex();
            inmemoryLiteDb = new LiteDB_Test(5000);
            inmemoryLiteDb.Prepare(); inmemoryLiteDb.Insert(); inmemoryLiteDb.CreateIndex();

            liteDb2 = new LiteDB_Test2(5000);
            liteDb2.Prepare(); liteDb2.Insert(); liteDb2.CreateIndex();

            dictionary = new Dictionary <int, TestDoc>();
            foreach (var item in MakeDoc(5000))
            {
                dictionary.Add(item.id, item);
            }

            {
                var options  = new DbOptions().SetCreateIfMissing(true);
                var tempPath = Guid.NewGuid() + ".bin";
                rocksDb = RocksDb.Open(options, tempPath);
                foreach (var item in MakeDoc(5000))
                {
                    rocksDb.Put(Encoding.UTF8.GetBytes("testdata." + item.id), MessagePackSerializer.Serialize(item));
                }
            }


            var config = new MemcachedClientConfiguration(new LoggerDummy(), new Dummy());

            localMemcached = new MemcachedClient(new LoggerDummy(), config);
            foreach (var item in MakeDoc(5000))
            {
                localMemcached.Add("testdoc2." + item.id, item, 9999);
            }
        }
Exemple #29
0
        //[ValidateModel]
        public object test(TestReq req)
        {
            var list = new List <testrr> {
                new testrr {
                    name = "txy", sex = 1
                },
                new testrr {
                    name = "wz", sex = 0
                },
            };

            cache.Add("test", JsonConvert.SerializeObject(list), DateTime.Now.AddDays(1));

            var r = cache.Get("test");
            //return r;
            var list2 = JsonConvert.DeserializeObject <List <testrr> >(r.ToString());

            return(list2);
        }
Exemple #30
0
        /// <summary>
        /// 存入Memcached
        /// </summary>
        /// <param name="cacheKey">缓存键值</param>
        /// <param name="cacheValue">缓存值</param>
        /// <param name="expiration">缓存过期策略(FileMonitorExpiration模式不适用)</param>
        public static void MemcachedSet(this string cacheKey, object cacheValue, IExpiration expiration)
        {
            DateTime expiredTime = DateTime.MaxValue;

            if (expiration is RelativeTimeExpiration)
            {
                expiredTime = ((RelativeTimeExpiration)expiration).ExpiredTime;
            }
            else if (expiration is AbsTimeExpiration)
            {
                expiredTime = ((AbsTimeExpiration)expiration).ExpiredTime;
            }

            if (mClient.KeyExists(cacheKey))
            {
                mClient.Delete(cacheKey);
            }

            mClient.Add(cacheKey, cacheValue, expiredTime);
        }
Exemple #31
0
        /// <summary>
        /// 将数据以键值对的方式,缓存到Memcached
        /// </summary>
        /// <param name="key">缓存键</param>
        /// <param name="obj">缓存值</param>
        /// <param name="expiry">有效期(服务器当前时间+expiry)</param>
        public void Store(string key, object obj, TimeSpan expiry)
        {
            DateTime timeout = DateTime.Now.Add(expiry);

            if (Exists(key))
            {
                if (Get(key) == null)
                {
                    memcachedClient.Set(key, obj, timeout);//缓存存在(且对象为null),强行覆盖
                }
                else
                {
                    memcachedClient.Replace(key, obj, timeout);//缓存存在,强行覆盖
                }
            }
            else
            {
                memcachedClient.Add(key, obj, timeout);//第一次加载缓存
            }
        }