zoukankan      html  css  js  c++  java
  • 高性能文件缓存key-value存储—Memcached

      1.高性能文件缓存key-value存储—Redis

      2.ASP.NET HttpRuntime.Cache缓存类使用总结

      备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文章中给出的博文地址。

    1.前言

       a.Memcached是一个高性能的分布式缓存系统,用于Web应用减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高网站的访问速度。

      b.Memcached是一个给予存储键/值对的HashMap,底层使用C语言完成,但是客户端可以使用任何语言来编写(Java,.NET,PHP).

      c.Memcached中的数据都是存储在memcached内置的内存存储空间中,由于数据仅存在于内存中,因此当某个服务器停止运行或者出现问题之后,所有存放在服务器上的键/值对都会丢失。

      d.下面这幅图可以说明Memcached的工作过程,当首次访问系统的时候,系统从数据库中取得数据保存到Memcached中,在第二次访问的时候则直接从Memcached中读取出来需要的值信息。

        

      e.Memcached的特征

        Memcached作为高速运行的分布式缓存服务器,具有以下的特点:

        e.1:协议简单(客户端通信并不是使用复杂的XML格式,而是使用简单的基于文本行的协议)

        e.2:基于libevent的事件处理(libevent是一个程序库,即使服务器的连接数增加,也能发挥o(1)的性能)

        e.3:内置内存存储方式(c中已经描述)

        e.4:Memcached不互相通信的分布式。

      f.推荐阅读,http://kb.cnblogs.com/page/42731/

      g.Github下载地址:https://github.com/kencery/Common/blob/master/KenceryCommonMethod/%E7%BC%93%E5%AD%98

    2.封装代码调用描述

      1 // 源文件头信息:
      2 // <copyright file="MemcacheHelper.cs">
      3 // Copyright(c)2014-2034 Kencery.All rights reserved.
      4 // 个人博客:http://www.cnblogs.com/hanyinglong
      5 // 创建人:韩迎龙(kencery)
      6 // 创建时间:2015-4-24
      7 // </copyright>
      8 using System;
      9 using System.Configuration;
     10 using Memcached.ClientLibrary;
     11 
     12 namespace KenceryCommonMethod
     13 {
     14     /// <summary>
     15     /// 封装使用Memchached信息,读取缓存存放在服务器
     16     /// <auther>
     17     ///     <name>Kencery</name>
     18     ///     <date>2015-4-24</date>
     19     /// </auther>
     20     /// </summary>
     21     public class MemcacheHelper
     22     {
     23         /// <summary>
     24         /// 字段_instance,存放注册的缓存信息
     25         /// </summary>
     26         private static MemcacheHelper _instance;
     27 
     28         /// <summary>
     29         /// 缓存客户端
     30         /// </summary>
     31         private readonly MemcachedClient _client;
     32 
     33         /// <summary>
     34         /// 受保护类型的缓存对象,初始化一个新的缓存对象
     35         /// </summary>
     36         protected MemcacheHelper()
     37         {
     38             //读取app.Config中需要缓存的服务器地址信息,可以传递多个地址,使用","分隔
     39             string[] serverList = ConfigurationManager.AppSettings["Memcached.ServerList"].Split(',');
     40             try
     41             {
     42                 var sockIoPool = SockIOPool.GetInstance();
     43                 sockIoPool.SetServers(serverList);
     44                 sockIoPool.InitConnections = 3;
     45                 sockIoPool.MinConnections = 3;
     46                 sockIoPool.MaxConnections = 50;
     47                 sockIoPool.SocketConnectTimeout = 1000;
     48                 sockIoPool.SocketTimeout = 3000;
     49                 sockIoPool.MaintenanceSleep = 30;
     50                 sockIoPool.Failover = true;
     51                 sockIoPool.Nagle = false;
     52                 //实例化缓存对象
     53                 _client = new MemcachedClient();
     54             }
     55             catch (Exception ex)
     56             {
     57                 //错误信息写入事务日志
     58                 throw new Exception(ex.Message);
     59             }
     60         }
     61 
     62         /// <summary>
     63         /// 获取缓存的实例对象,方法调用的时候使用
     64         /// </summary>
     65         /// <returns></returns>
     66         public static MemcacheHelper GetInstance()
     67         {
     68             return _instance;
     69         }
     70 
     71         /// <summary>
     72         /// 添加缓存信息(如果存在缓存信息则直接重写设置,否则添加)
     73         /// 使用:MemcacheHelper.GetInstance().Add(key,value)
     74         /// </summary>
     75         /// <param name="key">需要缓存的键</param>
     76         /// <param name="value">需要缓存的值</param>
     77         public void Add(string key, object value)
     78         {
     79             if (_client.KeyExists(key))
     80             {
     81                 _client.Set(key, value);
     82             }
     83             _client.Add(key, value);
     84         }
     85 
     86         /// <summary>
     87         /// 添加缓存信息
     88         /// 使用:MemcacheHelper.GetInstance().Add(key,value,Datetime.Now())
     89         /// </summary>
     90         /// <param name="key">需要缓存的键</param>
     91         /// <param name="value">需要缓存的值</param>
     92         /// <param name="expiredDateTime">设置的缓存的过时时间</param>
     93         public void Add(string key, object value, DateTime expiredDateTime)
     94         {
     95             _client.Add(key, value, expiredDateTime);
     96         }
     97 
     98         /// <summary>
     99         /// 修改缓存的值
    100         /// 使用:MemcacheHelper.GetInstance().Update(key,value)
    101         /// </summary>
    102         /// <param name="key">需要修改的键</param>
    103         /// <param name="value">需要修改的值</param>
    104         public void Update(string key, object value)
    105         {
    106             _client.Replace(key, value);
    107         }
    108 
    109         /// <summary>
    110         /// 修改缓存的值
    111         /// 使用:MemcacheHelper.GetInstance().Update(key,value,Datetime.Now())
    112         /// </summary>
    113         /// <param name="key">需要修改的键</param>
    114         /// <param name="value">需要修改的值</param>
    115         /// <param name="expiredDateTime">设置的缓存的过时时间</param>
    116         public void Update(string key, object value, DateTime expiredDateTime)
    117         {
    118             _client.Replace(key, value, expiredDateTime);
    119         }
    120 
    121         /// <summary>
    122         /// 设置缓存
    123         /// 使用:MemcacheHelper.GetInstance().Set(key,value)
    124         /// </summary>
    125         /// <param name="key">设置缓存的键</param>
    126         /// <param name="value">设置缓存的值</param>
    127         public void Set(string key, object value)
    128         {
    129             _client.Set(key, value);
    130         }
    131 
    132         /// <summary>
    133         /// 设置缓存,并修改过期时间
    134         /// 使用:MemcacheHelper.GetInstance().Set(key,value,Datetime.Now())
    135         /// </summary>
    136         /// <param name="key">设置缓存的键</param>
    137         /// <param name="value">设置缓存的值</param>
    138         /// <param name="expiredTime">设置缓存过期的时间</param>
    139         public void Set(string key, object value, DateTime expiredTime)
    140         {
    141             _client.Set(key, value, expiredTime);
    142         }
    143 
    144         /// <summary>
    145         /// 删除缓存
    146         /// 使用:MemcacheHelper.GetInstance().Delete(key)
    147         /// </summary>
    148         /// <param name="key">需要删除的缓存的键</param>
    149         public void Delete(string key)
    150         {
    151             _client.Delete(key);
    152         }
    153 
    154         /// <summary>
    155         /// 获取缓存的值
    156         /// 使用:MemcacheHelper.GetInstance().Get(key)
    157         /// </summary>
    158         /// <param name="key">传递缓存中的键</param>
    159         /// <returns>返回缓存在缓存中的信息</returns>
    160         public object Get(string key)
    161         {
    162             return _client.Get(key);
    163         }
    164 
    165         /// <summary>
    166         /// 缓存是否存在
    167         /// 使用:MemcacheHelper.GetInstance().KeyExists(key)
    168         /// </summary>
    169         /// <param name="key">传递缓存中的键</param>
    170         /// <returns>如果为true,则表示存在此缓存,否则比表示不存在</returns>
    171         public bool KeyExists(string key)
    172         {
    173             return _client.KeyExists(key);
    174         }
    175 
    176         /// <summary>
    177         /// 注册Memcache缓存(在Global.asax的Application_Start方法中注册)
    178         /// 使用:MemcacheHelper.RegisterMemcache();
    179         /// </summary>
    180         public static void RegisterMemcache()
    181         {
    182             if (_instance == null)
    183             {
    184                 _instance = new MemcacheHelper();
    185             }
    186         }
    187     }
    188 }

      善用缓存,你的系统访问速度将会有一个很大的访问速度的提升。

  • 相关阅读:
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节15(核心对象,视图解析器,FreemarkerView)
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节16(核心对象,视图解析器,TilesView)——待补充
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节17(核心对象,视图解析器,其他View)——待补充
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节18(核心对象,视图解析器,PDF)
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节19(核心对象,视图解析器,Excel)
    后端——框架——视图层框架——spring_mvc——《官网》阅读笔记——第一章节20(核心对象,视图解析器,JSON)
    任务关联的类型(Project)
    有个性的手动计划模式(Project)
    估计工期标识(Project)
    摘要任务工期计算(Project)
  • 原文地址:https://www.cnblogs.com/hanyinglong/p/Memcached.html
Copyright © 2011-2022 走看看