首先,你要在你电脑上安装配置好Memcached环境哦

Startup类的ConfigureServices中加入

  1. //memcachedcore1
  2. services.AddEnyimMemcached(options => Configuration.GetSection("enyimMemcached").Bind(options));

Configure中加入 启用中间件

  1. app.UseEnyimMemcached();//memcachedcore2

建一个Helper

  1. using Enyim.Caching;
  2. using Enyim.Caching.Configuration;
  3. using Microsoft.Extensions.Configuration;
  4. using Microsoft.Extensions.Logging;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Threading.Tasks;
  9.  
  10. namespace Web.Content
  11. {
  12. public class MemcachedHelper
  13. {
  14. private static string _DEPEND_ = "mcache_default_depend";
  15. private static string _DICT_CACHE_ = "default_core_depend_dictiaonry";
  16. private static int _EXP_ = * ; //默认缓存10分钟
  17. private static int HH = ; //1小时=3600秒
  18.  
  19. static readonly object mlock = new object();
  20. private static readonly ILoggerFactory _loggerFacotry = new LoggerFactory();
  21. /// <summary>
  22. /// 定义一个静态MemcachedClient客户端,它随类一起加载,所有对象共用
  23. /// </summary>
  24. private static MemcachedClient mclient;
  25. /// <summary>
  26. /// 构造函数,连接memcachedcore并为KEYS字典开辟储存空间
  27. /// </summary>
  28. static MemcachedHelper()
  29. {
  30. //mclient = MemCached.getInstance();
  31. if (mclient == null)
  32. {
  33. lock (mlock)
  34. {
  35. if (mclient == null)
  36. {
  37. var options = new MemcachedClientOptions();
  38. UtilConf.Configuration.GetSection("enyimMemcached").Bind(options);
  39. mclient = new MemcachedClient(_loggerFacotry, new MemcachedClientConfiguration(_loggerFacotry, options));
  40. }
  41. }
  42. }
  43. //在缓存中开辟一个专门用来存储Kyes的字典对象
  44. MDictionary_SaveDict(new Dictionary<string, List<string>>());
  45. }
  46.  
  47. #region ** 获取缓存 **
  48. /// <summary>
  49. /// 获取缓存
  50. /// </summary>
  51. public static object Get(string key)
  52. {
  53. key = key.ToLower();
  54. return mclient.Get(key);
  55. }
  56. #endregion
  57.  
  58. #region ** 添加缓存 **
  59. /// <summary>
  60. /// 添加单个依赖项的缓存 (最小时间单位为秒)
  61. /// </summary>
  62. public static void Set(string depend, string key, object obj, int exp)
  63. {
  64. depend = depend.ToLower();
  65. key = key.ToLower();
  66.  
  67. try
  68. {
  69. //HttpContext.Current.Application.Lock();
  70.  
  71. //将数据加入缓存
  72. mclient.Add(key, obj, exp);
  73.  
  74. //HttpContext.Current.Application.UnLock();
  75.  
  76. ////将Keys加入字典
  77. //MDictionary_AddKeys(depend, key);
  78. }
  79. catch (System.Exception ex)
  80. {
  81. throw new Exception(ex.Message);
  82. }
  83. }
  84.  
  85. #region ++ Set的多种实现方式
  86. /// <summary>
  87. /// 默认时间
  88. /// </summary>
  89. public static void Set(string depend, string key, object obj)
  90. {
  91. MemcachedHelper.Set(depend, key, obj, _EXP_);
  92. }
  93. /// <summary>
  94. /// 默认Depend和时间
  95. /// </summary>
  96. public static void Set(string key, object obj)
  97. {
  98. MemcachedHelper.Set(_DEPEND_, key, obj, _EXP_);
  99. }
  100. /// <summary>
  101. /// 默认Depend
  102. /// </summary>
  103. public static void Set(string key, object obj, int exp)
  104. {
  105. MemcachedHelper.Set(_DEPEND_, key, obj, exp);
  106. }
  107. /// <summary>
  108. /// 长时间缓存
  109. /// </summary>
  110. public static void SetLong(string depend, string key, object obj)
  111. {
  112. int t = ; //1年 = 10 * 365 * 24 * 60 * 60;
  113. MemcachedHelper.Set(depend, key, obj, t);
  114. }
  115. /// <summary>
  116. /// 长时间默认depend
  117. /// </summary>
  118. public static void SetLong(string key, object obj)
  119. {
  120. int t = ; //365 * 24 * 60 * 60; //1年
  121. MemcachedHelper.Set(_DEPEND_, key, obj, t);
  122. }
  123. public static void SetAllLong(string key, object obj)
  124. {
  125. int t = ; //365 * 24 * 60; //10年
  126. MemcachedHelper.Set(_DEPEND_, key, obj, t);
  127. }
  128. #endregion
  129.  
  130. #endregion
  131.  
  132. #region ** 删除缓存 **
  133. /// <summary>
  134. /// 删除有依赖项的Keys的缓存
  135. /// </summary>
  136. public static void RemoveKeys(string depend, string key)
  137. {
  138. depend = depend.ToLower();
  139. key = key.ToLower();
  140.  
  141. try
  142. {
  143. //HttpContext.Current.Application.Lock();
  144.  
  145. //删除缓存
  146. mclient.Remove(key);
  147.  
  148. //删除key
  149. MDictionary_RemoveKeys(depend, key);
  150.  
  151. //HttpContext.Current.Application.UnLock();
  152.  
  153. }
  154. catch (System.Exception ex)
  155. {
  156. throw new Exception(ex.Message);
  157. }
  158. }
  159.  
  160. /// <summary>
  161. /// 删除默认depend的缓存
  162. /// </summary>
  163. public static void RemoveKeys(string key)
  164. {
  165. RemoveKeys(_DEPEND_, key);
  166. }
  167.  
  168. /// <summary>
  169. /// 删除整个依赖项
  170. /// </summary>
  171. public static void RemoveDepend(string depend)
  172. {
  173. depend = depend.ToLower();
  174.  
  175. try
  176. {
  177. //获取keys列表
  178. List<string> keysList = MDictionary_GetKeys(depend);
  179.  
  180. //循环删除数据
  181. for (int i = ; i < keysList.Count; i++)
  182. {
  183. string k = keysList[i];
  184. //清空缓存Key
  185. mclient.Remove(k);
  186. ////清空字典下的Key
  187. //MDictionary.RemoveKeys(depend, k);
  188. }
  189. ////清空字典
  190. //MDictionary_RemoveDepend(depend);
  191.  
  192. }
  193. catch (System.Exception ex)
  194. {
  195. throw new Exception(ex.Message);
  196. }
  197. }
  198. #endregion
  199.  
  200. #region --字典管理--
  201.  
  202. #region ** 字典存取 **
  203. /// <summary>
  204. /// 取出字典
  205. /// </summary>
  206. public static Dictionary<string, List<string>> MDictionary_GetDict()
  207. {
  208. Dictionary<string, List<string>> dict = mclient.Get(_DICT_CACHE_) as Dictionary<string, List<string>>;
  209. if (dict == null)
  210. {
  211. Dictionary<string, List<string>> newDict = new Dictionary<string, List<string>>();
  212. MDictionary_SaveDict(newDict);
  213. return newDict;
  214. }
  215. else
  216. {
  217. return dict;
  218. }
  219. }
  220.  
  221. /// <summary>
  222. /// 存入字典
  223. /// </summary>
  224. public static void MDictionary_SaveDict(Dictionary<string, List<string>> dict)
  225. {
  226. //默认保存360天
  227. mclient.Add(_DICT_CACHE_, dict, HH * * );
  228. }
  229.  
  230. /// <summary>
  231. /// 添加并存入
  232. /// </summary>
  233. public static void MDictionary_AddToDictAndSave(string depend, List<string> listKeys)
  234. {
  235. //取出字典
  236. Dictionary<string, List<string>> dict = MDictionary_GetDict();
  237.  
  238. //修改或新增字典
  239. if (dict.ContainsKey(depend))
  240. {
  241. dict[depend] = listKeys; //覆盖
  242. }
  243. else
  244. {
  245. dict.Add(depend, listKeys); //新添加
  246. }
  247.  
  248. //存回
  249. MDictionary_SaveDict(dict);
  250. }
  251. #endregion
  252.  
  253. #region ** keys操作 **
  254. /// <summary>
  255. /// 根据depend获取Keys列表
  256. /// </summary>
  257. public static List<string> MDictionary_GetKeys(string depend)
  258. {
  259. depend = depend.ToLower();
  260.  
  261. Dictionary<string, List<string>> dict = MDictionary_GetDict();
  262. if (dict.ContainsKey(depend))
  263. {
  264. return dict[depend];
  265. }
  266. return new List<string>();
  267. }
  268.  
  269. /// <summary>
  270. /// 添加keys到字典
  271. /// </summary>
  272. public static void MDictionary_AddKeys(string depend, string key)
  273. {
  274. depend = depend.ToLower();
  275. key = key.ToLower();
  276.  
  277. //添加keys列表
  278. List<string> listKeys = MDictionary_GetKeys(depend);
  279. if (!listKeys.Contains(key))
  280. {
  281. listKeys.Add(key);
  282. //添加并存回字典
  283. MDictionary_AddToDictAndSave(depend, listKeys);
  284. }
  285.  
  286. }
  287.  
  288. /// <summary>
  289. /// 从字典中删除一个Key
  290. /// </summary>
  291. public static void MDictionary_RemoveKeys(string depend, string key)
  292. {
  293. depend = depend.ToLower();
  294. key = key.ToLower();
  295.  
  296. List<string> listKeys = MDictionary_GetKeys(depend);
  297. if (listKeys.Contains(key))
  298. {
  299. listKeys.Remove(key);
  300. //添加并存回字典
  301. MDictionary_AddToDictAndSave(depend, listKeys);
  302. }
  303. }
  304.  
  305. /// <summary>
  306. /// 删除depend下所有的keys列表
  307. /// </summary>
  308. public static void MDictionary_RemoveDepend(string depend)
  309. {
  310. depend = depend.ToLower();
  311.  
  312. Dictionary<string, List<string>> dict = MDictionary_GetDict();
  313. if (dict.ContainsKey(depend))
  314. {
  315. dict.Remove(depend);
  316. //存回
  317. MDictionary_SaveDict(dict);
  318. }
  319. }
  320. #endregion
  321.  
  322. #endregion
  323. }
  324. }

新建一个类 加载appsetting.json

  1. using Microsoft.Extensions.Configuration;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Web.Content
  9. {
  10. public class UtilConf
  11. {
  12. private static IConfiguration config;
  13. public static IConfiguration Configuration//加载配置文件
  14. {
  15. get
  16. {
  17. if (config != null) return config;
  18. config = new ConfigurationBuilder()
  19. .SetBasePath(Directory.GetCurrentDirectory())
  20. .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
  21. .Build();
  22. return config;
  23. }
  24. set => config = value;
  25. }
  26. }
  27. }

appsetting.json加入配置

  1. "enyimMemcached": {
  2. "Servers": [
  3. {
  4. "Address": "127.0.0.1",
  5. "Port":
  6. }
  7. ]
  8. }

使用

  1. //Memcached
  2. MemcachedHelper.Set("memcached", "memcached-core", "memcachedcore" + DateTime.Now, );
  3. string mh = MemcachedHelper.Get("memcached-core").ToString();

.net core Memcached使用的更多相关文章

  1. 使用PHP连接、操纵Memcached的原理和教程

    http://www.crazyant.net/1014.html Memcahced开源分布式内存对象缓存系统通过减少数据库的负担,从而能够加速你的web应用.在本文中我将解释怎样实现一个基于Mem ...

  2. 一次 .NET Core 中玩锁的经历:ManualResetEventSlim, Semaphore 与 SemaphoreSlim

    最近同事对  .net core memcached 缓存客户端 EnyimMemcachedCore 进行了高并发下的压力测试,发现在 linux 上高并发下使用 async 异步方法读取缓存数据会 ...

  3. 优秀 .NET 开源项目集锦

    Github 地址: https://github.com/jasonhua95/awesome-dotnet-core awesome-dotnet-core .NET Core框架.库和软件的中文 ...

  4. 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore

    1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...

  5. .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存

    注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...

  6. 谈谈在.NET Core中使用Redis和Memcached的序列化问题

    前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许是隐式的,这个取决于使用的package是否有帮我们做这样一件事. 本文 ...

  7. Asp.Net Core 2.0 项目实战(5)Memcached踩坑,基于EnyimMemcachedCore整理MemcachedHelper帮助类。

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  8. NET Core中使用Redis和Memcached

    .NET Core中使用Redis和Memcached的序列化问题   前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许 ...

  9. 使用Django.core.cache操作Memcached导致性能不稳定的分析过程

    使用Django.core.cache操作Memcached导致性能不稳定的分析过程 最近测试一项目,用到了Nginx缓存服务,那可真是快啊!2Gb带宽都轻易耗尽. 不过Api接口无法简单使用Ngin ...

随机推荐

  1. RigidBody组件的Is Kinematic

    RigidBody组件的Is Kinematic属性打上勾(设为true,使其不受物理引擎驱动,Wall是为了防止其移动,Person是为了防止其受到力不断旋转—看的心塞=v=) .is kinema ...

  2. 利用X.509证书对XML进行加密和签名

    综述       XML加密和签名技术应用非常广泛. ASP.NET 使用XML加密对配置信息进行加密:InfoPath使用XML签名对表单进行签名:Web服务使用XML加密和签名对SOAP消息进行加 ...

  3. python2.7中可以使用到的一些模块地址

    1.reportlab:由很多部分组成且允许用户使用多种方法创建输出,地址: 下载ReportLab https://pypi.python.org/simple/reportlab/ http:// ...

  4. 【校招面试 之 C/C++】第27题 C++ 智能指针(三)之 unique_ptr

    auto_ptr<string> p1(new string ("auto") : //#1 auto_ptr<string> p2; //#2 p2 = ...

  5. maven不存在jar包解决

    win7环境 下载:https://maven.apache.org/download.cgi 提取文件,并cmd 转到bin目录 假设要添加的jar包是jbarcode-0.2.8.jar, 可执行 ...

  6. 'WebElement' object is not iterable

    checkbox.html源码: <html> <head> <meta http-equiv="content-type" content=&quo ...

  7. 动态加载JS,并执行回调函数

    有些时候我们需要动态的加载一些JS,并在JS加载完成后执行一些回调函数. var loadscript = { $$: function (id) { return document.getEleme ...

  8. shell 脚本 测试webApp

    vim **.sh文件 开头:#!/bin/bash ////////// copy cURL //因为这样copy的url就是一个命令(进入chrome的开发者工具里面,点network,找到刚刚访 ...

  9. 16进制string转成int

    http://blog.csdn.net/wl1524520/article/details/25706521

  10. 7. Debug on local machine

    Step 1: