• 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 to the existing data against the specified key.

Prerequisites

Before using the NCache client-side APIs, ensure that the following prerequisites are fulfilled:

  • .NET
  • Java
  • Legacy API
  • Install the following NuGet packages in your .NET client application:
    • Enterprise: Alachisoft.NCache.SDK
    • OpenSource: Alachisoft.NCache.Opensource.SDK
  • Include the following namespaces in your application:
    • Alachisoft.NCache.Client
    • Alachisoft.NCache.Runtime.Exceptions
  • The cache must be running.
  • Make sure that the data being added is serializable.
  • For API details, refer to: ICache, CacheStream, StreamMode, CacheStreamAttributes, GetCacheStream, Write.
  • Add the following Maven dependencies for your Java client application in pom.xml file:
<dependency>
    <groupId>com.alachisoft.ncache</groupId>
    <!--for NCache Enterprise-->
    <artifactId>ncache-client</artifactId>
    <version>x.x.x</version>
</dependency>
  • Import the following packages in your Java client application:
    • import com.alachisoft.ncache.client.*;
    • import com.alachisoft.ncache.runtime.exceptions.*;
  • The cache must be running.
  • Make sure that the data being added is serializable.
  • 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
  • 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
try
{
  // 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 contains properties such as 'Group', 'Expiration', etc
  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);
          }
      }
  }
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
}
catch (Exception ex)
{
    // handle exception
    // This includes StreamException
}
try
{
  // 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 cacheStream = cache.getCacheStream(key, cacheStreamAttributes))
      {
          while (fs.CanRead)
          {
              var bytesRead = fileStream.read(buffer, 0, buffer.length);

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

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

  // Close stream
  cacheStream.Close();
}
catch (OperationFailedException exception) 
{
    // Exception can occur due to:
    // Connection Failures
    // Operation Timeout
    // Operation performed during state transfer
} 
catch (Exception exception) 
{
    // Generic exception like IllegalArgumentException or NullPointerException
}
try
{
  // 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
          }
      }
  }
}
catch (OperationFailedException ex)
{
    // Exception can occur due to:
    // - Connection failures
    // - Operation timeout
    // - Operation performed during state transfer
}
catch (Exception ex)
{
    // Generic exceptions:
    // - Stream-related exceptions
}
Note

To ensure the operation is fail-safe, it is recommended to handle any potential exceptions within your application, as explained in Handling Failures.

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-619-2601   (US)

+44 20 7993 8327   (UK)

 
EMAIL

sales@alachisoft.com

support@alachisoft.com

NCache
  • 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