Skip to main content

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

How to fix Git push error: "RPC failed; curl 56 HTTP/2 stream 7 was reset send-pack: unexpected disconnect while reading sideband packet fatal: the remote end hung up unexpectedly"

Problem Today I saw the following problem when I tried to push my changes to a Git server after doing some work for upgrading an Umbraco v7 project to v8.18.8.  Possible reasons After some investigations, it seems like this could be because of the following reasons; Git is not happy with the amount of changes that are being pushed into the server.  There are possible limitations on the server about the size/amount of files that you can push. Your internet connection is not good and stable enough. Your Git client's version is old. Solution options For me, the easiest option was connecting to another Wifi and trying again. Apparently, this option helped quite a few people, so it is worth giving it a try. Unfortunately, it didn't work for me. A bad internet connection wasn't an option for me either, as my internet is pretty fast (500 Mbps). Similarly, my Git client version was the latest version (git version 2.41.0.windows.3).  On StackOverflow, there were a lot of recommendat

How to use JQuery Ajax Methods for Async ASP.NET MVC Action Methods

Making repeatedly calls to async methods can be a nightmare. In this case, it makes sense to use 2 ajax methods, instead of one. Here is a simple solution to overcome this problem. See that  ajaxcalls   is emptied after the success response for the first ajax call and then the second ajax method is used to make one single call to the async action method. Hope it helps. View: @section Scripts{     < script type ="text/javascript">         var smartDebitObject = new Object();         smartDebitObject.MembershipNumber = $( "#MembershipNumber" ).val();         smartDebitObject.ProfileId = $( "#ProfileId" ).val();         smartDebitObject.FirstName = $( "#FirstName" ).val();         smartDebitObject.LastName = $( "#LastName" ).val();         smartDebitObject.AddressLine1 = $( "#AddressLine1" ).val();         smartDebitObject.Postcode = $( "#Postcode" ).val();         smartDebitObject

How to fix Umbraco v9 "Boot Failed : Umbraco failed to boot, if you are the owner of the website please see the log file for more details." error

If you have started working with Umbraco v9 and done your first Azure deployment to one of your testing environments, there is a possibility that you might see the following "Boot Failed" error. Error: Checking the logs In order to understand the problem, you should check the Umbarco log file.  The default location for this file is umbraco/Logs and this file contains the Machine name, along with the date information. You can reach this file via Azure's Kudu Service  or alternatively, you can get download your Azure App Service's publish profile and connect your App Service via an FTP application, i.e. FileZilla. See the FileZilla screen below; Once you get your log file, you can download it to your local machine and open it with a text editor, i.e. Notepad++. When you open it, you will see all logs, including the error message. Please be aware, as most things with Umbraco, logging is also customizable, so you can either use the default Umbraco logging which is Micros