C# 操作Memcached

Memcached是开源高性能分布式缓存组件,目前已经广泛应用各类互联网领域. 具有多种语言的客户端开发包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL. 这此站点已经在使用YouTube,Reddit,Zynga,Facebook,Orange它. 看
下面的图比较形象.

同样它也是扩平台的,今天我们来看windows下的服务端以及使用.net的客户端访问它.我们
选择了Enyim Memcached这个客户端. 
      首先,我们安装windows版的服务端,你可以从这个站点下载. 安装时使用命令行:

memcached.exe –d install

这样将Windows service中创建一个memcached的服务. 同样你可以使用 –d uninstall 来卸载它. 运行时将默认监听11211
IP:127.0.0.1,如下图所示:

要在nuget里引用(安装) EnyimMemcached ,下面是以调用阿里云的ocs(memcached)服务为例

[csharp] view plaincopy
  1. using System;
  2. using Enyim.Caching;
  3. namespace MemcacheTest
  4. {
  5. /// <summary>
  6. /// MemcachedClient 帮组类 对外提供接口方法
  7. /// </summary>
  8. public class MemcachedHelper
  9. {
  10. /// <summary>
  11. /// 定义一个静态MemcachedClient客户端,它随类一起加载,所有对象共用
  12. /// </summary>
  13. private static MemcachedClient mclient;
  14. /// <summary>
  15. /// 静态构造函数,初始化Memcached客户端
  16. /// </summary>
  17. static MemcachedHelper()
  18. {
  19. mclient = MemCached.getInstance();
  20. }
  21. /// <summary>
  22. /// 向Memcached缓存中添加一条数据
  23. /// </summary>
  24. /// <param name="groupName">组名,用来区分不同的服务或应用场景</param>
  25. /// <param name="key">键</param>
  26. /// <param name="value">值</param>
  27. /// <param name="expiry">过期时间</param>
  28. /// <returns>返回是否添加成功</returns>
  29. public static bool SetValue(string groupName,string key, object value, DateTime expiry)
  30. {
  31. key = groupName + "-" + key;
  32. return mclient.Store(Enyim.Caching.Memcached.StoreMode.Set,key, value, expiry);
  33. }
  34. /// <summary>
  35. /// 向Memcached缓存中添加一条数据 默认超时24小时
  36. /// </summary>
  37. /// <param name="groupName">组名,用来区分不同的服务或应用场景</param>
  38. /// <param name="key"></param>
  39. /// <param name="value"></param>
  40. /// <returns></returns>
  41. public static bool SetValue(string groupName, string key, object value)
  42. {
  43. key = groupName + "-" + key;
  44. return mclient.Store(Enyim.Caching.Memcached.StoreMode.Set, key, value, DateTime.Now.AddHours(24));
  45. }
  46. /// <summary>
  47. /// 通过key 来得到一个对象
  48. /// </summary>
  49. /// <param name="groupName">组名,用来区分不同的服务或应用场景</param>
  50. /// <param name="key">键</param>
  51. /// <returns>对象</returns>
  52. public static object GetValue(string groupName, string key)
  53. {
  54. key = groupName + "-" + key;
  55. return mclient.Get(key);
  56. }
  57. /// <summary>
  58. /// 通过key 来得到一个对象(前类型)
  59. /// </summary>
  60. /// <typeparam name="T">类型</typeparam>
  61. /// <param name="groupName">组名,用来区分不同的服务或应用场景</param>
  62. /// <param name="key">键</param>
  63. /// <returns></returns>
  64. public static T GetValue<T>(string groupName, string key)
  65. {
  66. key = groupName + "-" + key;
  67. return mclient.Get<T>(key);
  68. }
  69. /// <summary>
  70. /// 清除指定key的cache
  71. /// </summary>
  72. /// <param name="groupName">组名,用来区分不同的服务或应用场景</param>
  73. /// <param name="key">键</param>
  74. /// <returns></returns>
  75. public static bool Remove(string groupName, string key)
  76. {
  77. key = groupName + "-" + key;
  78. return mclient.Remove(key);
  79. }
  80. /// <summary>
  81. /// 清除所有cache
  82. /// </summary>
  83. public static void RemoveAll()
  84. {
  85. mclient.FlushAll();
  86. }
  87. }
  88. }
[csharp] view plaincopy
  1. using System.Net;
  2. using Enyim.Caching;
  3. using Enyim.Caching.Configuration;
  4. using Enyim.Caching.Memcached;
  5. namespace MemcacheTest
  6. {
  7. /// <summary>
  8. /// MemcachedClient 配置类
  9. /// </summary>
  10. public sealed class MemCached
  11. {
  12. private static MemcachedClient MemClient;
  13. static readonly object padlock = new object();
  14. //线程安全的单例模式
  15. public static MemcachedClient getInstance()
  16. {
  17. if (MemClient == null)
  18. {
  19. lock (padlock)
  20. {
  21. if (MemClient == null)
  22. {
  23. MemClientInit();
  24. }
  25. }
  26. }
  27. return MemClient;
  28. }
  29. static void MemClientInit()
  30. {
  31. //初始化缓存
  32. MemcachedClientConfiguration memConfig = new MemcachedClientConfiguration();
  33. IPAddress newaddress = IPAddress.Parse(Dns.GetHostEntry("XXXXXXXXXX.m.cnhzalicm10pub001.ocs.aliyuncs.com").AddressList[0].ToString()); //xxxx替换为ocs控制台上的“内网地址”
  34. IPEndPoint ipEndPoint = new IPEndPoint(newaddress, 11211);
  35. // 配置文件 - ip
  36. memConfig.Servers.Add(ipEndPoint);
  37. // 配置文件 - 协议
  38. memConfig.Protocol = MemcachedProtocol.Binary;
  39. // 配置文件-权限,如果使用了免密码功能,则无需设置userName和password
  40. memConfig.Authentication.Type = typeof(PlainTextAuthenticator);
  41. memConfig.Authentication.Parameters["zone"] = "";
  42. memConfig.Authentication.Parameters["userName"] = "XXXXXXXXXXXXXXXXX";
  43. memConfig.Authentication.Parameters["password"] = "XXXXXXXXXX";
  44. //下面请根据实例的最大连接数进行设置
  45. memConfig.SocketPool.MinPoolSize = 5;
  46. memConfig.SocketPool.MaxPoolSize = 200;
  47. MemClient = new MemcachedClient(memConfig);
  48. }
  49. }
  50. }
[csharp] view plaincopy
  1. 程序调用
  2. MemcachedHelper.SetValue(groupName,strKey, strValue, DateTime.Now.AddMinutes(5));
  3. var restr = MemcachedHelper.GetValue(groupName,strKey);
  4. var obj = MemcachedHelper.GetValue<Product>(groupName,"p001");

Memcached快递上手之C#相关推荐

  1. linux内存管理子系统采用基于内存区域,Linux 内存管理之highmem简介

    一.Linux内核地址空间 一般来说Linux 内核按照 3:1 的比率来划分虚拟内存(X86等):3 GB 的虚拟内存用于用户空间,1GB 的内存用于内核空间.当然有些体系结构如MIPS使用2:2 ...

  2. 快速上手微信小程序-快递100

    2007 年 1 月 9 日,乔布斯在旧金山莫斯科尼会展中心发布了首款 iPhone,而在十年后的 1 月 9 日,微信小程序正式上线.张小龙以这样的形式,向乔布斯致敬. 小程序在哪里? 小程序功能模 ...

  3. 快递收发软件移动端上线啦!易上手好操作,轻松提高企业快递管理效率

    为提升企业快递管理效率及企业管理员的操作便捷性,快递管家企业版移动端上线啦!旨在帮助企业在移动端实现快递寄件下单管理.寄件类型管理.打印管理及智能化到件录入管理.签收管理等功能. 如何开通快递管家企业 ...

  4. 为何Redis要比Memcached好用(转)

    转载链接:http://blog.csdn.net/renfufei/article/details/40598889 GitHub版本地址: https://github.com/cncounter ...

  5. 设置自动关门时长_小米苹果全适配,绿米D100全自动指纹锁新鲜上手

    Ciao Bella,我是老房 关于智能指纹门锁,其实老房老早就想装了.家里有位平均一两个月就要忘带一次钥匙的媳妇儿,甚至有好几次,我特意说了晚上有应酬晚回去千万记得要带钥匙,结果喝酒喝到一半,一个电 ...

  6. 如何快速上手一款开源软件

    最近一篇比较火的文章中提到,techcrunch上有一篇文章,列举了当前最火的开源软件列表 https://techcrunch.com/2017/04/07/tracking-the-explosi ...

  7. 福禄克2500V数字绝缘电阻测试仪开箱与上手实测

    福禄克近2年的手持仪表新品很多,今天我们分享一篇有点不一样的用户体验:一位资深工程师"玩家",超详尽的开箱.上手实测体验,及功能分享. 重点内容提前敲黑板: 开箱与配件 功能介绍 ...

  8. “死”在拥挤赛道上的快递员工

    文/白草 来源/螳螂财经 极兔打价格战引起通达系快递全网封杀,近日网曝快递员纷纷罢工,单票收入越来越低,而双11日均包裹量预估高达4.9亿,陪跑11年的快递业今年亚历山大. 最明显的一个压力就是,今年 ...

  9. 这所高校的快递被机器人承包了,别人家的学校!

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 近日,在浙大校园里,自如行驶的22个物流机器人引来学生关注,它们会穿过人群.马路,到 ...

最新文章

  1. winstore独立安装包下载_QT使用教程(二)之下载篇
  2. Java设计模式(十):迭代器设计模式
  3. TextBox和DataGridView控件的事件发生顺序
  4. Calendar详解
  5. html5 filereader读取文件,H5的FileReader分布读取文件应该如何使用以及其方法简介...
  6. 第一章第一节:C++简介与学习方法
  7. shell 脚本编程的10 个最佳实践
  8. 敏捷开发一千零一问系列之六:业务人员怎样参与开发?
  9. 单例模式的懒汉模式和饿汉模式
  10. 在Linux环境下Nginx解决跨域问题
  11. 为什么打工人996会猝死,而老板007不会?
  12. 安装Windows Outlook邮箱客户端
  13. Microsoft Visio 文本框上标或下标
  14. matlab随机样本的选择,matlab随机抽样 | 学步园
  15. PCL:demeanPointCloud ❤️ 去点云质心
  16. 在博客和Markdown和Python中自由添加emoji!包括博客标题和Python打印!
  17. 【2022软件创新实验室暑假集训】Java环境安装与基础介绍
  18. 秦皇岛达内传授零基础怎样学平面设计
  19. 彩铃多多 v2.4.5.0
  20. OSI模型与TCP/IP协议族

热门文章

  1. Non-resolvable parent POM for com.example:demo:0.0.1-SNAPSHOT: Could not transfer artifact org.sprin
  2. 一个适合在校生宝藏编程学习网站
  3. 千锋教育+计算机四级网络-计算机网络学习-02
  4. 无线接入控制服务器(ac),无线AP控制器是什么?无线AP与无线AC的区别
  5. Scrapy之10行代码爬下电影天堂全站
  6. BS4爬取电影天堂的下载地址并保存至csv文件
  7. 解决VirtualBox不能为虚拟电脑打开一个新任务
  8. 这应该是我见过最干净的影视资源搜索站点
  9. matlab二维绘图部分
  10. linux aria进程,Linux安装 Aria2