public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas)
            {
                using (var ms = new MemoryStream())
                {
                    this.SaveHeader(ms);
                    bool retval;
                    var  ts = TimeSpan.FromMinutes(this.Timeout);

                    retval = useCas
                                                                ? client.Cas(Memcached.StoreMode.Set, HeaderPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, this.HeadCas).Result
                                                                : client.Store(Memcached.StoreMode.Set, HeaderPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);

                    if (!metaOnly)
                    {
                        ms.Position = 0;

                        using (var bw = new BinaryWriter(ms))
                        {
                            this.Data.Serialize(bw);
                            retval = useCas
                                                                                ? client.Cas(Memcached.StoreMode.Set, DataPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, this.DataCas).Result
                                                                                : client.Store(Memcached.StoreMode.Set, DataPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                        }
                    }

                    return(retval);
                }
            }
Ejemplo n.º 2
0
        public IActionResult Store(string key, [FromBody] StoreCacheItem item)
        {
            if (item == null)
            {
                return(this.NullValueErrorResult(key, _logger));
            }

            if (!item.Cas.HasValue || item.Cas.Value == 0)
            {
                bool result = true;
                if (item.ValidFor.HasValue)
                {
                    result = _memcachedClient.Store(GetMode(item), key, item.Value, item.ValidFor.Value);
                }
                else if (item.ExpireAt.HasValue)
                {
                    result = _memcachedClient.Store(GetMode(item), key, item.Value, item.ExpireAt.Value);
                }
                else
                {
                    result = _memcachedClient.Store(GetMode(item), key, item.Value);
                }

                if (!result)
                {
                    return(StatusCode(StatusCodes.Status400BadRequest, result));
                }

                return(StatusCode(StatusCodes.Status201Created));
            }
            else
            {
                CasResult <bool> result = new CasResult <bool>();

                if (item.ValidFor.HasValue)
                {
                    result = _memcachedClient.Cas(GetMode(item), key, item.Value, item.ValidFor.Value, item.Cas.Value);
                }
                else if (item.ExpireAt.HasValue)
                {
                    result = _memcachedClient.Cas(GetMode(item), key, item.Value, item.ExpireAt.Value, item.Cas.Value);
                }
                else
                {
                    result = _memcachedClient.Cas(GetMode(item), key, item.Value, item.Cas.Value);
                }

                if (!result.Result)
                {
                    return(StatusCode(StatusCodes.Status400BadRequest, result));
                }

                return(StatusCode(StatusCodes.Status201Created, result));
            }
        }
            public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas)
            {
                using (var ms = new MemoryStream()) {
                    // Save the header first
                    SaveHeader(ms);
                    var ts = TimeSpan.FromMinutes(Timeout);

                    // Attempt to save the header and fail if the CAS fails
                    bool retval = useCas
                        ? client.Cas(StoreMode.Set, HeaderPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, HeadCas).Result
                        : client.Store(StoreMode.Set, HeaderPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                    if (retval == false)
                    {
                        return(false);
                    }

                    // Save the data
                    if (!metaOnly)
                    {
                        ms.Position = 0;

                        // Serialize the data
                        using (var bw = new BinaryWriter(ms)) {
                            Data.Serialize(bw);

                            // Attempt to save the data and fail if the CAS fails
                            retval = useCas
                                ? client.Cas(StoreMode.Set, DataPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, DataCas).Result
                                : client.Store(StoreMode.Set, DataPrefix + id, new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                        }
                    }

                    // Return the success of the operation
                    return(retval);
                }
            }
Ejemplo n.º 4
0
 public CasResult <bool> Cas(StoreMode mode, string key, object value)
 {
     return(_memcachedClient.Cas(mode, key, value));
 }
            public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas)
            {
                using (var ms = new MemoryStream())
                {
                    this.SaveHeader(ms);
                    bool retval;
                    var ts = TimeSpan.FromMinutes(this.Timeout);

                    retval = useCas
                                ? client.Cas(Memcached.StoreMode.Set, HeaderPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, this.HeadCas).Result
                                : client.Store(Memcached.StoreMode.Set, HeaderPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);

                    if (!metaOnly)
                    {
                        ms.Position = 0;

                        using (var bw = new BinaryWriter(ms))
                        {
                            this.Data.Serialize(bw);
                            retval = useCas
                                        ? client.Cas(Memcached.StoreMode.Set, DataPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, this.DataCas).Result
                                        : client.Store(Memcached.StoreMode.Set, DataPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                        }
                    }

                    return retval;
                }
            }
Ejemplo n.º 6
0
        public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas, ICompressor compressor, Logger logger)
        {
            var ts = TimeSpan.FromMinutes(Timeout);

            bool retval;

            using (var ms = new MemoryStream())
            {
                // Save the header first
                SaveHeader(ms);

                // Attempt to save the header and fail if the CAS fails
                retval = useCas
                                                 ? client.Cas(StoreMode.Set, HeaderPrefix + id,
                                                              new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, HeadCas).Result
                                                 : client.Store(StoreMode.Set, HeaderPrefix + id,
                                                                new ArraySegment <byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                if (retval == false)
                {
                    return(false);
                }
            }

            // Save the data
            if (!metaOnly)
            {
                byte[] data;

                ArraySegment <byte> arraySegment;

                using (var ms = new MemoryStream())
                {
                    using (var bw = new BinaryWriter(ms))
                    {
                        // Serialize the data
                        Data.Serialize(bw);
                        data = ms.ToArray();
                    }
                }

                if (compressor == null)
                {
                    if (logger != null)
                    {
                        logger.Info(string.Format("Save Item with id '{0}' with size {1}", id, data.LongLength));
                    }

                    arraySegment = new ArraySegment <byte>(data);
                }
                else
                {
                    var tempdata = compressor.Compress(data);

                    if (logger != null)
                    {
                        logger.Info(string.Format("Save Item with id '{0}' that was compressed from {1} bytes to {2} bytes", id, data.LongLength, tempdata.LongLength));
                    }

                    arraySegment = new ArraySegment <byte>(tempdata);
                }

                // Attempt to save the data and fail if the CAS fails
                retval = useCas
                                                 ? client.Cas(StoreMode.Set, DataPrefix + id, arraySegment, ts, DataCas).Result
                                                 : client.Store(StoreMode.Set, DataPrefix + id, arraySegment, ts);
            }

            // Return the success of the operation
            return(retval);
        }
Ejemplo n.º 7
0
        public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas, ICompressor compressor, Logger logger)
        {
            var ts = TimeSpan.FromMinutes(Timeout);

            bool retval;

            using (var ms = new MemoryStream())
            {
                // Save the header first
                SaveHeader(ms);

                // Attempt to save the header and fail if the CAS fails
                retval = useCas
                             ? client.Cas(StoreMode.Set, HeaderPrefix + id,
                                          new ArraySegment<byte>(ms.GetBuffer(), 0, (int) ms.Length), ts, HeadCas).Result
                             : client.Store(StoreMode.Set, HeaderPrefix + id,
                                            new ArraySegment<byte>(ms.GetBuffer(), 0, (int) ms.Length), ts);
                if (retval == false)
                {
                    return false;
                }
            }

            // Save the data
            if (!metaOnly)
            {

                byte[] data;

                ArraySegment<byte> arraySegment;

                using (var ms = new MemoryStream())
                {
                    using (var bw = new BinaryWriter(ms))
                    {
                        // Serialize the data
                        Data.Serialize(bw);
                        data = ms.ToArray();
                    }
                }

                if (compressor == null)
                {
                    if (logger != null)
                        logger.Info(string.Format("Save Item with id '{0}' with size {1}", id, data.LongLength));

                    arraySegment = new ArraySegment<byte>(data);
                }
                else
                {
                    var tempdata = compressor.Compress(data);

                    if (logger != null)
                        logger.Info(string.Format("Save Item with id '{0}' that was compressed from {1} bytes to {2} bytes", id, data.LongLength, tempdata.LongLength));

                    arraySegment = new ArraySegment<byte>(tempdata);
                }

                // Attempt to save the data and fail if the CAS fails
                retval = useCas
                             ? client.Cas(StoreMode.Set, DataPrefix + id, arraySegment, ts, DataCas).Result
                             : client.Store(StoreMode.Set, DataPrefix + id, arraySegment, ts);
            }

            // Return the success of the operation
            return retval;
        }
            public bool Save(IMemcachedClient client, string id, bool metaOnly, bool useCas)
            {
                using (var ms = new MemoryStream()) {
                    // Save the header first
                    SaveHeader(ms);
                    var ts = TimeSpan.FromMinutes(Timeout);

                    // Attempt to save the header and fail if the CAS fails
                    bool retval = useCas
                        ? client.Cas(StoreMode.Set, HeaderPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, HeadCas).Result
                        : client.Store(StoreMode.Set, HeaderPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                    if (retval == false) {
                        return false;
                    }

                    // Save the data
                    if (!metaOnly) {
                        ms.Position = 0;

                        // Serialize the data
                        using (var bw = new BinaryWriter(ms)) {
                            Data.Serialize(bw);

                            // Attempt to save the data and fail if the CAS fails
                            retval = useCas
                                ? client.Cas(StoreMode.Set, DataPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts, DataCas).Result
                                : client.Store(StoreMode.Set, DataPrefix + id, new ArraySegment<byte>(ms.GetBuffer(), 0, (int)ms.Length), ts);
                        }
                    }

                    // Return the success of the operation
                    return retval;
                }
            }