• Facebook
  • Twitter
  • Youtube
  • LinedIn
  • RSS
  • Docs
  • Comparisons
  • Blogs
  • Download
  • Contact Us
Download
Show / Hide Table of Contents

Add/Update Data with Streams [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.

Prerequisites

  • .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.
  • Install either of the following NuGet packages in your .NET client application:
    • Enterprise: Install-Package Alachisoft.NCache.SDK -Version 4.9.1.0
    • Professional: Install-Package Alachisoft.NCache.Professional.SDK -Version 4.9.1.0
  • 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.
  • To learn more about the NCache Legacy API, please download the NCache 4.9 documents available as a .zip file on the Alachisoft Website.

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 = "key:ncache-video";

// 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 = "ImageDataGroup";

// 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();
// Using NCache Enterprise 4.9.1
// Precondition: Cache is already connected
// Generate a unique cache key
string key = "key:ncache-video";
// Open the source file
using (var fileStream = File.OpenRead(@"..\\NCache Introduction.mp4"))
{
    // Get cache stream using key and stream mode
    using (CacheStream cacheStream = cache.GetCacheStream(key, StreamMode.Write))
    {
        byte[] buffer = new byte[4096]; // 4 KB chunks
        int bytesRead;
        long totalBytes = 0;
        while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
        {
            cacheStream.Write(buffer, 0, bytesRead);
            totalBytes += bytesRead;
            // Write stream data to cache
        }
    }
}

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
// Precondition: Cache is already connected
// Generate a unique cache key
string key = "key:ncache-video";

// 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);
        }
    }
}
// Precondition: Cache is already connected
// 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();
// Using NCache Enterprise 4.9.1
// Precondition: Cache is already connected
string key = "key:ncache-video";

// Read entire image file into byte array
byte[] writeBuffer = File.ReadAllBytes(@"..\\NCache Introduction.mp4")
int length = writeBuffer.Length;

// Open CacheStream in Write mode
CacheStream cacheStream = cache.GetCacheStream(key, StreamMode.Write);

// Use a buffered stream with specified buffer size (e.g., 4096)
using (Stream bufferedStream = cacheStream.GetBufferedStream(4096))
{
    // Write in two parts (simulate partial write)
    bufferedStream.Write(writeBuffer, 0, length / 2);
    bufferedStream.Write(writeBuffer, length / 2, length - (length / 2)); // in case of odd length

    // Flush and close the buffered stream (calls Flush automatically)
    bufferedStream.Close();
}

Additional Resources

NCache provides sample application for Stream Processing on GitHub.

See Also

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

Contact Us

PHONE

+1 (214) 764-6933   (US)

+44 20 7993 8327   (UK)

 
EMAIL

sales@alachisoft.com

support@alachisoft.com

NCache
  • NCache Enterprise
  • NCache Community
  • 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 - . All rights reserved. NCache is a registered trademark of Diyatech Corp.
Back to top