Try Playground
Show / Hide Table of Contents

Stream Processing - Add/Update Cache Data [Deprecated]

In Stream Processing, the GetCacheStream method is used to open a stream. It returns the handle of the opened stream as an instance of CacheStream class. To add or update data with streams, the streaming mode should be set to write mode. In write mode, multiple write operations can be performed on a stream opened with StreamMode.Write by one client.

While using Stream Processing, if the key provided with the GetCacheStream API does not exist in the cache, the data written on the stream is added to the cache. If an item already exists in the cache with the provided key, binary data written on the stream is appended with the existing data against the specified key.

Stream Processing: Prerequisites to Add/Update Cache Data

  • .NET
  • Java
  • Legacy API
  • To learn about the standard prerequisites required to work with all NCache client-side features, please refer to the given page on Client-Side API Prerequisites.
  • For API details, refer to: ICache, CacheStream, StreamMode, CacheStreamAttributes, GetCacheStream, Write.
  • To learn about the standard prerequisites required to work with all NCache client-side features, please refer to the given page on Client-Side API Prerequisites.
  • For API details, refer to: Cache, CacheStream, StreamMode, CacheStreamAttributes, write, closed, getBufferedOutputStream, getCacheStream.
  • Create a new Console Application.
  • Make sure that the data being added is serializable.
  • Add NCache References by locating %NCHOME%\NCache\bin\assembly\4.0 and adding Alachisoft.NCache.Web and Alachisoft.NCache.Runtime as appropriate.
  • Include the Alachisoft.NCache.Web.Caching namespace in your application.

Writing to a Stream

In write mode, multiple write operations can be performed on a stream with StreamMode.Write by one client.

  • .NET
  • Java
  • Legacy API
// Precondition: Cache is already connected
// Generate a unique cache key
string key = "StreamKey";

// Set StreamMode object to Write
StreamMode streamMode = StreamMode.Write;

// Provide the streamMode in CacheStreamAttributes object
// CacheStreamAttributes is having properties like 'Group', 'Expiration' e.t.c
var streamAttributes = new CacheStreamAttributes(streamMode);
streamAttributes.Group = "VideoDataGroup";

// Open stream to read video file
using (var fileStream = File.OpenRead(@"..\\NCache Introduction.mp4"))
{
    // Use GetCacheStream to initialize CacheStream object by setting streamAttributes against the specified key
    using (var cacheStream = cache.GetCacheStream(key, streamAttributes))
    {
        // Create a byte array to read data in chunks of 4096 bytes
        byte[] dataToWrite = new byte[4096];
        long numBytesToRead = fileStream.Length;

        while (numBytesToRead > 0)
        {
            // Read chunk of data
            int bytesRead = fileStream.Read(dataToWrite, 0, dataToWrite.Length);

            // Break when the end of the file is reached
            if (bytesRead == 0)
                break;

            // Write stream data to cache
            cacheStream.Write(dataToWrite, 0, bytesRead);
        }
    }
}
// Precondition: Cache is already connected
// Generate a unique cache key
int readByteCount = 0;
byte[] readBuffer = new byte[5000];

// Initialize CacheStream object
CacheStream cacheStream = null;

// Provide the StreamMode in CacheStreamAttributes object
CacheStreamAttributes cacheStreamAttributes = new CacheStreamAttributes(StreamMode.Write);
// cacheStreamAttributes.setGroup();
// cacheStreamAttributes.setExpiration();
// cacheStreamAttributes.setCacheItemPriority();

// Use GetCacheStream to set StreamAttributes against the specified key
using (CacheStream caceheStream = cache.getCacheStream(key, cacheStreamAttributes))
    {
        while (fs.CanRead)
        {
            var bytesRead = fileStream.read(buffer, 0, buffer.length);

            // Now write/store these bytes in the cache
            caceheStream.write(buffer, 0, bytesRead);

            bytesCount += bytesRead;
        }
    }
    Console.Writeline(key + " file content stored as CacheStream. Total bytes: " + bytesCount);

// Close stream
cacheStream.Close();
string key="key:ncache-guide";
byte[] dataToWrite = System.IO.File.ReadAllBytes("C:\\ncache-manual.pdf");

cacheStream = cache.GetCacheStream(key, StreamMode.Write);
cacheStream.Write(dataToWrite, 0, dataToWrite.Length);
//...Close stream

Using GetBufferedStream

In Stream Processing, a buffered stream is the set of bytes used for storing the data up to a certain limit before reading or writing it to the cache. The following code shows how to use GetBufferedStream:

  • .NET
  • Java
  • Legacy API
// Generate a unique cache key
string key = "BufferedStreamKey";

// Set StreamMode object to Write mode
StreamMode streamMode = StreamMode.Write;

// Provide the streamMode in CacheStreamAttributes object
var streamAttributes = new CacheStreamAttributes(streamMode);

// Data will be written to cache once buffered data size reaches this limit
int bufferLength = 4096;

// Open stream to read video file
using (var fileStream = File.OpenRead(@"..\\NCache Introduction.mp4"))
{
        // Initialize CacheStream object by setting streamAttributes against the specified key and Get Buffered stream
    using (var cacheStream = cache.GetCacheStream(key, streamAttributes).GetBufferedStream(bufferLength))
    {
        // Create a byte array to read data
        byte[] dataToWrite = new byte[1024];
        long numBytesToRead = fileStream.Length;

        while (numBytesToRead > 0)
        {
            // Read file in chunks of 1024 bytes
            int bytesRead = fileStream.Read(dataToWrite, 0, dataToWrite.Length);

            // Break when the end of the file is reached.
            if (bytesRead == 0)
                break;

            // Write data to stream buffer.
            // Buffered data will be written to cache once it reaches limit of 4096 bytes
            cacheStream.Write(dataToWrite, 0, bytesRead);
        }
    }
}
// Generate a unique cache key

String key = "StreamKey";

// Set write mode for StreamMode object
StreamMode streamMode = StreamMode.Write;

// Provide the streamMode object to CacheStreamAttributes object
CacheStreamAttributes streamAttributes = new CacheStreamAttributes(streamMode);

// ReadAllBytes returns the stream from the provided path in a byte array
Path path = FileSystems.getDefault().getPath("test", "test.txt");
byte[] writeBuffer = Files.readAllBytes(path);

// Set buffer length
int length = writeBuffer.length;

// Set GetBufferedStream property for cache stream
BufferedOutputStream wStream = cache.getCacheStream(key, streamAttributes).getBufferedOutputStream(length);

// Write data in buffer
wStream.write(writeBuffer, 0, length);

// Data is written in cache because buffer is full
wStream.write(writeBuffer, length / 2, length / 2);

// Close the stream
wStream.close();
string key = "key:ncache-guide";
byte[] writeBuffer = System.IO.File.ReadAllBytes("C:\\ncache-manual.pdf");
int length = writeBuffer.Length;

System.IO.Stream wstream = cache.GetCacheStream(key, StreamMode.Write).GetBufferedStream(length);

//...No data is written in cache as buffer is not full
wstream.Write(writeBuffer, 0, length/2);
//...Data is written in cache because buffer is full now
wstream.Write(writeBuffer, length/2, length/2);

//...Close the stream

Additional Resources

NCache provides sample application for Streaming on GitHub.

See Also

.NET: Alachisoft.NCache.Client namespace.
Java: com.alachisoft.ncache.client namespace.

In This Article
  • Stream Processing: Prerequisites to Add/Update Cache Data
  • Writing to a Stream
  • Using GetBufferedStream
  • Additional Resources
  • See Also

Contact Us

PHONE

+1 (214) 764-6933   (US)

+44 20 7993 8327   (UK)

 
EMAIL

sales@alachisoft.com

support@alachisoft.com

NCache
  • NCache Enterprise
  • NCache Professional
  • Edition Comparison
  • NCache Architecture
  • Benchmarks
Download
Pricing
Try Playground

Deployments
  • Cloud (SaaS & Software)
  • On-Premises
  • Kubernetes
  • Docker
Technical Use Cases
  • ASP.NET Sessions
  • ASP.NET Core Sessions
  • Pub/Sub Messaging
  • Real-Time ASP.NET SignalR
  • Internet of Things (IoT)
  • NoSQL Database
  • Stream Processing
  • Microservices
Resources
  • Magazine Articles
  • Third-Party Articles
  • Articles
  • Videos
  • Whitepapers
  • Shows
  • Talks
  • Blogs
  • Docs
Customer Case Studies
  • Testimonials
  • Customers
Support
  • Schedule a Demo
  • Forum (Google Groups)
  • Tips
Company
  • Leadership
  • Partners
  • News
  • Events
  • Careers
Contact Us

  • EnglishChinese (Simplified)FrenchGermanItalianJapaneseKoreanPortugueseSpanish

  • Contact Us
  •  
  • Sitemap
  •  
  • Terms of Use
  •  
  • Privacy Policy
© Copyright Alachisoft 2002 - 2025. All rights reserved. NCache is a registered trademark of Diyatech Corp.
Back to top