Memcached Caching

Tools
  • MemCacheD Manager v1.0.3.0 as Memcached Server
  • Enyim Memcached Client as Memcached .Net Client Library (Add these references to your project: Enyim.Caching.dll, log4net.dll, MemcachedProviders.dll)
  • Your Client Program
 MemCacheD Manager
  • Run the setup file and configure a Memcached Server as shown below:


Client Program
  • Create a new .Net project and add these settings to web.config file as shown below:
<configSections>
             <section name="cacheProvider" type="MemcachedProviders.Cache.CacheProviderSection,  MemcachedProviders" allowDefinition="MachineToApplication" restartOnExternalChanges="true"/>
             <sectionGroup name="enyim.com">
                    <section name="memcached" type="Enyim.Caching.Configuration.MemcachedClientSection, Enyim.Caching"/>
             </sectionGroup>
             <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
       </configSections>


       <enyim.com>
             <memcached>
                    <servers>
                           <!-- put your own server(s) here-->
                           <add address="127.0.0.1" port="12345"/>
                    </servers>
                    <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00"/>
             </memcached>
       </enyim.com>


       <cacheProvider defaultProvider="MemcachedCacheProvider">
             <providers>
                    <add name="MemcachedCacheProvider" type="MemcachedProviders.Cache.MemcachedCacheProvider, MemcachedProviders" keySuffix="_MySuffix" defaultExpireTime="2000"/>
             </providers>
       </cacheProvider>


       <log4net>
             <!--Define some output appenders-->
             <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
                    <layout type="log4net.Layout.PatternLayout">
                           <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
                    </layout>
                    <!--<threshold value="OFF"/>-->
                    <!--Setup the root category, add the appenders and set the default priority-->
                    <root>
                           <priority value="WARN"/>
                           <appender-ref ref="ConsoleAppender">
                                  <filter type="log4net.Filter.LevelRangeFilter">
                                        <levelMin value="WARN"/>
                                        <levelMax value="FATAL"/>
                                  </filter>
                           </appender-ref>
                    </root>
             </appender>
       </log4net>


  • Continue to add more settings data inside of <system.web> tag 
 
<sessionState timeout="1" cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="MemcachedSessionProvider">
                    <providers>
                           <add name="MemcachedSessionProvider" type="MemcachedProviders.Session.SessionStateProvider,MemcachedProviders" dbType="None" writeExceptionsToEventLog="false"/>                        
                    </providers>
             </sessionState>

  • Add these references to your project: Enyim.Caching.dll, log4net.dll, MemcachedProviders.dll
  • Code your client program. Here is my sample program.

  • Here is the code behind:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MemcachedProviders.Cache;
using Enyim.Caching;

namespace WAMemcachedSessionTester
{
    public partial class _Default : System.Web.UI.Page
    {

        protected void btnEkle_Click(object sender, EventArgs e)
        {
            string strKey = TextBox1.Text;
            object objValue = TextBox2.Text;

            DistCache.Add(strKey, objValue);
            DropDownList1.Items.Add(strKey);
            Label2.Text = (string)DistCache.Get(strKey);

        }

        protected void btnGetir_Click(object sender, EventArgs e)
        {
            string strKey = null;
            strKey = DropDownList1.SelectedValue.ToString();
            Label1.Text = (string)DistCache.Get(strKey);

        }

        protected void Page_Load(object sender, EventArgs e)
        {
            Session["SessionTestBilgi"] = "Test Bilgi OK";

            if (Session["TIME"] == null)
            {
                Session["TIME"] = DateTime.Now;
            }
            Response.Write(Session["TIME"].ToString());
        }

        protected void btnSessionBilgisiGetir_Click(object sender, EventArgs e)
        {
            Label8.Text = "Session --->> " + Session["SessionTestBilgi"] + " && SessionID --->> " + Session.SessionID.ToString();
        }
    }
}

  • Deploy the client program to IIS.
  • Add a new Application Pool and name it as TestAppPool.
  • Change the client program's application pool to TestAppPool as shown below:


















  •  Run the client program and then stop TestAppPool and check if the same data is still coming. If yes, then this means you are getting the data from the Memcached Server.
Happy coding.

Comments

Post a Comment

Popular posts from this blog

Solution for "Can not obtain Oracle client information from registry"

Solution for the fault: "System.Diagnostics.Process.Start is not working on IIS, but working on ASP.NET Development Server"