Page tree
Skip to end of metadata
Go to start of metadata

CAST supports Memcached via its NoSQL for .NET extension. Details about the support provided for .NET source code is discussed below.

Supported Client Libraries

Supported Operations

OperationMethods Supported
Select
 Select Methods Supported
 Select Methods For Enyim Library
  • Enyim.Caching.MemcachedClient.Get
  • Enyim.Caching.MemcachedClient.GetAsync
  • Enyim.Caching.MemcachedClient.ExecuteGet
 Select Methods For CacheManager Library
  • CacheManager.Core.ICache.Get
  • CacheManager.Core.ICache.Exists
  • CacheManager.Core.ICache.Expire
 Select Methods For LazyCache Library
  • LazyCache.AppCacheExtensions.GetOrAdd
  • LazyCache.AppCacheExtensions.GetOrAddAsync
Insert
 Insert Methods Supported
 Insert Methods For Enyim Library
  • Enyim.Caching.MemcachedClient.Store
  • Enyim.Caching.MemcachedClient.StoreAsync
  • Enyim.Caching.MemcachedClient.ExecuteStore
 Insert Methods For Cachemanager
  • CacheManager.Core.ICacheManager.GetOrAdd
  • CacheManager.Core.ICacheManager.TryGetOrAdd
 Insert Methods For LazyCache
  • LazyCache.AppCacheExtensions.GetOrAdd
  • LazyCache.AppCacheExtensions.GetOrAddAsync
  • LazyCache.AppCacheExtensions.Add
Delete
 Delete Methods Supported
 Delete Methods For Enyim Library
  • Enyim.Caching.MemcachedClient.Remove
  • Enyim.Caching.MemcachedClient.RemoveAsync
  • Enyim.Caching.MemcachedClient.ExecuteRemove
 Delete Methods For Cachemanager
  • CacheManager.Core.ICache.Remove
 Delete Methods For LazyCache
  • LazyCache.IAppCache.Remove
Update
 Update Methods Supported
 Update Methods For Enyim
  • Enyim.Caching.MemcachedClient.Increment
  • Enyim.Caching.MemcachedClient.IncrementAsync
  • Enyim.Caching.MemcachedClient.ExecuteIncrement
  • Enyim.Caching.MemcachedClient.Decrement
  • Enyim.Caching.MemcachedClient.DecrementAsync
  • Enyim.Caching.MemcachedClient.ExecuteDecrement
  • Enyim.Caching.MemcachedClient.Append
  • Enyim.Caching.MemcachedClient.AppendAsync
  • Enyim.Caching.MemcachedClient.PrependAsync
  • Enyim.Caching.MemcachedClient.ExecuteAppend
  • Enyim.Caching.MemcachedClient.Prepend
  • Enyim.Caching.MemcachedClient.ExecutePrepend
  • Enyim.Caching.MemcachedClient.Replace
  • Enyim.Caching.MemcachedClient.ReplaceAsync
 Update Methods For Cachemanager
  • CacheManager.Core.ICache.Put
  • CacheManager.Core.ICacheManager.Update
  • CacheManager.Core.ICacheManager.TryUpdate
  • CacheManager.Core.ICacheManager.AddOrUpdate

Objects

IconDescription

DotNet Memcached Connection


DotNet Memcached Data

DotNet Unknown Memcached Connection

DotNet Unknown Memcached Data

Links

Links are created for transaction and function point needs:

Link typeSource and destination of link Methods supported
parentLink

Between Memcached connection object and Memcached Data object.


useLink

Between the caller .Net method object and Memcached Data object.





useSelectLink
  • Get
  • GetAsync
  • ExecuteGet
useInsertLink
  • Store
  • StoreAsync
  • ExecuteStore

useDeleteLink

  • Remove
  • RemoveAsync
  • ExecuteRemove
useUpdateLink
  • Increment
  • IncrementAsync
  • ExecuteIncrement
  • Decrement
  • DecrementAsync
  • ExecuteDecrement
  • Append
  • AppendAsync
  • ExecuteAppend
  • Prepend
  • PrependAsync
  • ExecutePrepend

What results can you expect?

Once the analysis/snapshot generation is completed, you can view the results in the normal manner (for example via CAST Enlighten). Some examples are shown below.

Memcached Connection

 Memcached Client Configuration
  • In the Memcached class file, when we add the server information by parsing the ipaddress and provide the port Number. Below is a sample source code with its result in Enlighten
public MemcacedCache()
      {
         _logger = new Logger();
         var config = new MemcachedClientConfiguration();
         config.Servers.Add(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11211));
         config.Protocol = MemcachedProtocol.Binary;
         
         _cache = new MemcachedClient(null, config);
      }

  • In the Memcached class file, when we pass the server information as a parameter. Below is a sample source code with its result in Enlighten :
namespace MemcachedTryout
{
   internal class MemcacedCache : ICache
   {  const string MEMCACHE_HOST = "127.0.0.1";
      const int MEMCACHE_PORT = 14551;
      public MemcacedCache()
      {
        _logger = new Logger();
         var config = new MemcachedClientConfiguration();
         config.Servers.Add(GetIPEndPointFromHostName(MEMCACHE_HOST, MEMCACHE_PORT));
         _cache = new MemcachedClient(null, config);
      }
  ---
}

  • If the server information is provided in xml file. Below is a sample source code with its result in Enlighten :
App.config code block
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
    <sectionGroup name="enyim.com">
      <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching" />
    </sectionGroup>
  </configSections>

  <enyim.com>
    <memcached protocol="Binary">
      <servers>
         <!--put your own server(s) here-->
        <add address="127.0.0.1" port="11211" />
      </servers>
    </memcached>
  </enyim.com>

  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
      </layout>
    </appender>
    <root>
      <level value="Debug" />
      <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>

 Memcached Unknown Connection Object
  • In the Memcached class file, when we pass the server information as a parameter and if passed parameter is unresolved it will create Unknown Connection Object. Below is a sample source code with its result in Enlighten:
namespace MemcachedTryout
{
   internal class MemcacedCache : ICache
   {
      private readonly MemcachedClient _cache;
      private readonly ILogger _logger;

      public MemcacedCache()
      {
         _logger = new Logger();
         var config = new MemcachedClientConfiguration();
         config.Servers.Add(GetIPEndPointFromHostName(MEMCACHE_HOST, MEMCACHE_PORT));     
         _cache = new MemcachedClient(null, config);
      }
 ----
}

 Support of WazMemcached Library
  • Below is a sample source code with its result in Enlighten:
public string MemcachedRoleName { get; set; }
public string EndpointName { get; set; }
private MemcachedClient Client
{
   get { return _client ?? (_client = WindowsAzureMemcachedHelpers.CreateDefaultClient(MemcachedRoleName, EndpointName)); }
}

CRUD Operations

 Insert Operations
 Insert Operations For Enyim
  public async Task<bool> Addsync<T>(string key, T value)
      {
         _logger.Debug("Adding item to cache with key {0}", key);
         return await _cache.Store(StoreMode.Set, "Hello", value, TimeSpan.FromDays(90));
      }

 Insert Operations For Cachemanager
public ValuesController(ICacheManager<string> valuesCache, ICacheManager<int> intCache, ICacheManager<DateTime> dates)
{
	_cache = valuesCache;

	dates.Add("now", DateTime.UtcNow);
	intCache.Add("count", 1);
}

 Select Operations
 Select Operations for Enyim
public async Task<T> Getsync<T>(string key)
      {
         var cacheItem = await _cache.Get<T>(Constants.num33);
        
         if (cacheItem == null)
         {
            _logger.Debug("Cache miss with key {0}", key);
            return default(T);
         }
         _logger.Debug("Cache hit with key {0}", key);
         return cacheItem;
      }

 Select Operations for CacheManager
public IActionResult Get(string key)
{
	var value = _cache.GetCacheItem(key);
	if (value == null)
	{
		return NotFound();
	}

	return Json(value.Value);
}

 Select Operations for LazyCache
[HttpGet]
[Route("api/dbtime")]
public DbTimeEntity Get()
{
	Func<DbTimeEntity> actionThatWeWantToCache = () => dbContext.GeDbTime();

	var cachedDatabaseTime = cache.GetOrAdd(cacheKey, actionThatWeWantToCache);

	return cachedDatabaseTime;
}

 Delete Operations
 Delete Operations for Enyim
public async Task<bool> Removesync(string key)
      {
         _logger.Debug("Removing item from cache with key {0}", key);
         return await _cache.Remove(Constants.key);
      }

 Delete Operations for CacheManager
public IActionResult Delete(string key)
{
if (_cache.Remove(key))
{
return Ok();
}

return NotFound();
}

 Delete Operations for LazyCache
[HttpDelete]
[Route("api/dbtime")]
public IActionResult DeleteFromCache()
{
cache.Remove(cacheKey);
var friendlyMessage = new {Message = $"Item with key '{cacheKey}' removed from server in-memory cache"};
return Ok(friendlyMessage);
}

 Update Operations
 Update Operations for Enyim
public async Task<bool> Updatesync<T>(string key, T value)
      {
		 _cache.Increment("num1", 1, 10);
		 
      }

 Update Operations CacheManager
public IActionResult Put(string key, [FromBody]string value)
{
	if (_cache.AddOrUpdate(key, value, (v) => value) != null)
	{
		return Ok();
	}

	return NotFound();
}

Evolution

  • Support provided for reading connection details from configuration files
  • Added Support for all the CRUD operations of  LazyCache and CacheManager Libraries

Limitations

  • Limited resolution available. In case data is not resolved, it is reflected as unknown value
  • No labels