Beispiel #1
0
        public void Set(string key, object value)
        {
            ThrowIfKeyNull(key);
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }
            if (key.Length > 2048)
            {
                throw new ArgumentException("The key can't be longer than 2048 characters");
            }

            var serialized = JsonConvert.SerializeObject(value, Formatting.None, new JsonSerializerSettings {
                TypeNameHandling = TypeNameHandling.Auto
            });
            var record = GetRecord(key);

            if (record == null)
            {
                record = new KeyValueRecord {
                    StringKey = key, Value = serialized
                };
                _repository.Create(record);
                Trigger(key);
            }
            else
            {
                record.Value = serialized;
            }
        }
Beispiel #2
0
 public void WriteHint(KeyValueRecord data, uint valuePosition)
 {
     lock (_stream) {
         _stream.Write(BitConverter.GetBytes(data.Serial));
         _stream.Write(BitConverter.GetBytes((uint)data.Key.LongLength));
         _stream.Write(BitConverter.GetBytes(data.ValueSize));
         _stream.Write(BitConverter.GetBytes(valuePosition));
         _stream.Write(data.Key);
     }
 }
Beispiel #3
0
 public uint Write(KeyValueRecord data)
 {
     if (!_write)
     {
         throw new InvalidOperationException("cannot write to readonly file");
     }
     lock (_streamSyncRoot) {
         _stream.Seek(0, SeekOrigin.End);
         _stream.Write(data.Hash);
         _stream.Write(BitConverter.GetBytes(data.Serial));
         _stream.Write(BitConverter.GetBytes((uint)data.Key.LongLength));
         _stream.Write(BitConverter.GetBytes(data.ValueSize));
         _stream.Write(data.Key);
         data.Value.CopyTo(_stream, data.ValueSize);
         _stream.Flush();
         return((uint)_stream.Position - data.ValueSize);
     }
 }