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; } }
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); } }
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); } }