• ASP.NET使用Memcached


      一、安装MemcachedMemcached配置和状态查询

              要想使用Memcached做缓存首先需要安装Memcached服务,安装方法如下:

    1. memcached.exe下载
    2. 保存至相应路径
    3. 打开cmd命令行
    4. 输入memcached.exe保存的所在路径 –d install 回车
    5. 打开控制面板的程序与功能选项
    6. 打开和关闭windows功能,选择telnet客户端和服务端
    7. 在cmd命令行中输入telnet 127.0.0.1 11211
    8. 获得以下相关memcaced运行信息

     

    1. 打开系统的管理工具,查看服务
    2. 找到Memcached Server服务
    3. 运行框中输入regedit,打开注册表
    4. 找到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesmemcached Server
    5. 找到ImagePath项,值为"d:memcachedmemcached.exe" -d runservice,在后面加上-l 127.0.0.1 -m 3000 -c 2048
    6. 已经将最大内存修改成3000
    7. 在cmd命令行输入telnet 127.0.0.1 11211

    返回如下的数据:   

            time:    1255537291                               服务器当前的unix时间戳
            total_items:    54                                     从服务器启动以后存储的items总数量
            connection_structures:    19                    服务器分配的连接构造数
            version:    1.2.6                                        memcache版本
            limit_maxbytes:    67108864                    分配给memcache的内存大小(字节)
            cmd_get:    1645                                      get命令(获取)总请求次数
            evictions:    0                                            为获取空闲内存而删除的items数(分配给memcache的空间用满后需
                                                                             要删除旧的items来得到空间分配给新的items)
            total_connections:    19                           从服务器启动以后曾经打开过的连接数
            bytes:    248723                                      当前服务器存储items占用的字节数
            threads:    1                                             当前线程数
            get_misses:    82                                      总未命中次数
            pointer_size:    32                                    当前操作系统的指针大小(32位系统一般是32bit)
            bytes_read:    490982                              总读取字节数(请求字节数)
            uptime:    161                                           服务器已经运行的秒数
            curr_connections:    18                             当前打开着的连接数
            pid:    2816                                               memcache服务器的进程ID
            bytes_written:    16517259                     总发送字节数(结果字节数)
            get_hits:    1563                                      总命中次数
            cmd_set:    54                                          set命令(保存)总请求次数
            curr_items:    28                                       服务器当前存储的items数量

     

    1. 16.     web项目下的Config文件夹中添加Memcached.config文件,文件内容如下

    <?xml version="1.0" encoding="utf-8" ?>

    <memcached-configuration xmlns="urn:memcached-configuration">

        <master>

            <memcached>

                <server address="127.0.0.1" port="11211" />

                <socket-pool minPoolSize="10" maxPoolSize="999" connectionTimeout="00:00:10" deadTimeout="00:02:00" />

            </memcached>

        </master>

    </memcached-configuration>

        Address主机号

        Port端口号

    使用注册表修改端口号:

     

    1. 17.     在项目中引入Enyim.Caching.dll文件,Enyim.Caching.dll会读取项目下Config文件夹下的Memcached.config文件

    程序中引入

    using Enyim.Caching;

    using Enyim.Caching.Memcached;

    1. 18.     获取缓存客户端实例

    MemcachedClient mc = MemcachedClient.CacheClient

    mc.FlushAll() 清理缓存

    mc.KeyExists(key.ToLower()) 判断key是否存在

    mc.Get<Value>(key.ToLower()) 根据key获取value

    1. 19.     帮助类如下

    public class MemcacheDictionary<Value>

    {

    private MemcachedClient mc = MemcachedClient.CacheClient;

     

    public MemcacheDictionary()

    {

    mc.FlushAll();

    }

     

     

    public bool Exists(string key)

    {

    return mc.KeyExists(key.ToLower());

    }

            public Value Get(string key)

            {

                if (key == null)

                    return default(Value);

                return mc.Get<Value>(key.ToLower());

            }

            public List<Value> GetAll(string CacheKeyPrefix)

            {

                List<string> keys = mc.Get_Keys(CacheKeyPrefix);

                List<Value> data = new List<Value>();

                var fromcache = mc.Get_Multi(keys);

                foreach (string key in keys)

                {

                    if (fromcache.ContainsKey(key.ToLower()))

                        data.Add((Value)fromcache[key.ToLower()]);

                }

                return data;

            }

            public List<Value> GetAll()

            {

                List<string> keys = mc.Get_Keys();

                List<Value> data = new List<Value>();

                var fromcache = mc.Get_Multi(keys);

                foreach (string key in keys)

                {

                    if (fromcache.ContainsKey(key.ToLower()))

                        data.Add((Value)fromcache[key.ToLower()]);

                }

                return data;

            }

            public void Set(string key, Value value)

            {

                mc.Store(StoreMode.Set, key.ToLower(), value);

            }

            public void Set(string key, Value value, DateTime expiresAt)

            {

                mc.Store(StoreMode.Set, key.ToLower(), value, expiresAt);

            }

            public void Set(string key, Value value, TimeSpan validFor)

            {

                mc.Store(StoreMode.Set, key.ToLower(), value, validFor);

            }

            public bool Remove(string key)

            {

                return mc.Remove(key.ToLower());

            }

            public void RemoveAll(string CacheKeyPrefix)

            {

                List<string> keys = mc.Get_Keys(CacheKeyPrefix);

                keys.ForEach(key => mc.Remove(key.ToLower()));

            }

            public List<string> GetAllKeyList()

            {

    return mc.Get_Keys();

    }

    }

     

     

     

  • 相关阅读:
    Struts2
    HIbernate缓存
    spring的静态代理和动态代理
    JVM与垃圾回收机制(GC)和类的生命周期
    java开发设计六大基本原则
    数据表链表结构
    HashMap的底层实现
    string与位运算
    log4j和logback
    C#深入类的方法
  • 原文地址:https://www.cnblogs.com/licin/p/5846280.html
Copyright © 2020-2023  润新知