.net core Memcached使用
首先,你要在你电脑上安装配置好Memcached环境哦
Startup类的ConfigureServices中加入
- //memcachedcore1
- services.AddEnyimMemcached(options => Configuration.GetSection("enyimMemcached").Bind(options));
Configure中加入 启用中间件
- app.UseEnyimMemcached();//memcachedcore2
建一个Helper
- using Enyim.Caching;
- using Enyim.Caching.Configuration;
- using Microsoft.Extensions.Configuration;
- using Microsoft.Extensions.Logging;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Threading.Tasks;
- namespace Web.Content
- {
- public class MemcachedHelper
- {
- private static string _DEPEND_ = "mcache_default_depend";
- private static string _DICT_CACHE_ = "default_core_depend_dictiaonry";
- private static int _EXP_ = * ; //默认缓存10分钟
- private static int HH = ; //1小时=3600秒
- static readonly object mlock = new object();
- private static readonly ILoggerFactory _loggerFacotry = new LoggerFactory();
- /// <summary>
- /// 定义一个静态MemcachedClient客户端,它随类一起加载,所有对象共用
- /// </summary>
- private static MemcachedClient mclient;
- /// <summary>
- /// 构造函数,连接memcachedcore并为KEYS字典开辟储存空间
- /// </summary>
- static MemcachedHelper()
- {
- //mclient = MemCached.getInstance();
- if (mclient == null)
- {
- lock (mlock)
- {
- if (mclient == null)
- {
- var options = new MemcachedClientOptions();
- UtilConf.Configuration.GetSection("enyimMemcached").Bind(options);
- mclient = new MemcachedClient(_loggerFacotry, new MemcachedClientConfiguration(_loggerFacotry, options));
- }
- }
- }
- //在缓存中开辟一个专门用来存储Kyes的字典对象
- MDictionary_SaveDict(new Dictionary<string, List<string>>());
- }
- #region ** 获取缓存 **
- /// <summary>
- /// 获取缓存
- /// </summary>
- public static object Get(string key)
- {
- key = key.ToLower();
- return mclient.Get(key);
- }
- #endregion
- #region ** 添加缓存 **
- /// <summary>
- /// 添加单个依赖项的缓存 (最小时间单位为秒)
- /// </summary>
- public static void Set(string depend, string key, object obj, int exp)
- {
- depend = depend.ToLower();
- key = key.ToLower();
- try
- {
- //HttpContext.Current.Application.Lock();
- //将数据加入缓存
- mclient.Add(key, obj, exp);
- //HttpContext.Current.Application.UnLock();
- ////将Keys加入字典
- //MDictionary_AddKeys(depend, key);
- }
- catch (System.Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- #region ++ Set的多种实现方式
- /// <summary>
- /// 默认时间
- /// </summary>
- public static void Set(string depend, string key, object obj)
- {
- MemcachedHelper.Set(depend, key, obj, _EXP_);
- }
- /// <summary>
- /// 默认Depend和时间
- /// </summary>
- public static void Set(string key, object obj)
- {
- MemcachedHelper.Set(_DEPEND_, key, obj, _EXP_);
- }
- /// <summary>
- /// 默认Depend
- /// </summary>
- public static void Set(string key, object obj, int exp)
- {
- MemcachedHelper.Set(_DEPEND_, key, obj, exp);
- }
- /// <summary>
- /// 长时间缓存
- /// </summary>
- public static void SetLong(string depend, string key, object obj)
- {
- int t = ; //1年 = 10 * 365 * 24 * 60 * 60;
- MemcachedHelper.Set(depend, key, obj, t);
- }
- /// <summary>
- /// 长时间默认depend
- /// </summary>
- public static void SetLong(string key, object obj)
- {
- int t = ; //365 * 24 * 60 * 60; //1年
- MemcachedHelper.Set(_DEPEND_, key, obj, t);
- }
- public static void SetAllLong(string key, object obj)
- {
- int t = ; //365 * 24 * 60; //10年
- MemcachedHelper.Set(_DEPEND_, key, obj, t);
- }
- #endregion
- #endregion
- #region ** 删除缓存 **
- /// <summary>
- /// 删除有依赖项的Keys的缓存
- /// </summary>
- public static void RemoveKeys(string depend, string key)
- {
- depend = depend.ToLower();
- key = key.ToLower();
- try
- {
- //HttpContext.Current.Application.Lock();
- //删除缓存
- mclient.Remove(key);
- //删除key
- MDictionary_RemoveKeys(depend, key);
- //HttpContext.Current.Application.UnLock();
- }
- catch (System.Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- /// <summary>
- /// 删除默认depend的缓存
- /// </summary>
- public static void RemoveKeys(string key)
- {
- RemoveKeys(_DEPEND_, key);
- }
- /// <summary>
- /// 删除整个依赖项
- /// </summary>
- public static void RemoveDepend(string depend)
- {
- depend = depend.ToLower();
- try
- {
- //获取keys列表
- List<string> keysList = MDictionary_GetKeys(depend);
- //循环删除数据
- for (int i = ; i < keysList.Count; i++)
- {
- string k = keysList[i];
- //清空缓存Key
- mclient.Remove(k);
- ////清空字典下的Key
- //MDictionary.RemoveKeys(depend, k);
- }
- ////清空字典
- //MDictionary_RemoveDepend(depend);
- }
- catch (System.Exception ex)
- {
- throw new Exception(ex.Message);
- }
- }
- #endregion
- #region --字典管理--
- #region ** 字典存取 **
- /// <summary>
- /// 取出字典
- /// </summary>
- public static Dictionary<string, List<string>> MDictionary_GetDict()
- {
- Dictionary<string, List<string>> dict = mclient.Get(_DICT_CACHE_) as Dictionary<string, List<string>>;
- if (dict == null)
- {
- Dictionary<string, List<string>> newDict = new Dictionary<string, List<string>>();
- MDictionary_SaveDict(newDict);
- return newDict;
- }
- else
- {
- return dict;
- }
- }
- /// <summary>
- /// 存入字典
- /// </summary>
- public static void MDictionary_SaveDict(Dictionary<string, List<string>> dict)
- {
- //默认保存360天
- mclient.Add(_DICT_CACHE_, dict, HH * * );
- }
- /// <summary>
- /// 添加并存入
- /// </summary>
- public static void MDictionary_AddToDictAndSave(string depend, List<string> listKeys)
- {
- //取出字典
- Dictionary<string, List<string>> dict = MDictionary_GetDict();
- //修改或新增字典
- if (dict.ContainsKey(depend))
- {
- dict[depend] = listKeys; //覆盖
- }
- else
- {
- dict.Add(depend, listKeys); //新添加
- }
- //存回
- MDictionary_SaveDict(dict);
- }
- #endregion
- #region ** keys操作 **
- /// <summary>
- /// 根据depend获取Keys列表
- /// </summary>
- public static List<string> MDictionary_GetKeys(string depend)
- {
- depend = depend.ToLower();
- Dictionary<string, List<string>> dict = MDictionary_GetDict();
- if (dict.ContainsKey(depend))
- {
- return dict[depend];
- }
- return new List<string>();
- }
- /// <summary>
- /// 添加keys到字典
- /// </summary>
- public static void MDictionary_AddKeys(string depend, string key)
- {
- depend = depend.ToLower();
- key = key.ToLower();
- //添加keys列表
- List<string> listKeys = MDictionary_GetKeys(depend);
- if (!listKeys.Contains(key))
- {
- listKeys.Add(key);
- //添加并存回字典
- MDictionary_AddToDictAndSave(depend, listKeys);
- }
- }
- /// <summary>
- /// 从字典中删除一个Key
- /// </summary>
- public static void MDictionary_RemoveKeys(string depend, string key)
- {
- depend = depend.ToLower();
- key = key.ToLower();
- List<string> listKeys = MDictionary_GetKeys(depend);
- if (listKeys.Contains(key))
- {
- listKeys.Remove(key);
- //添加并存回字典
- MDictionary_AddToDictAndSave(depend, listKeys);
- }
- }
- /// <summary>
- /// 删除depend下所有的keys列表
- /// </summary>
- public static void MDictionary_RemoveDepend(string depend)
- {
- depend = depend.ToLower();
- Dictionary<string, List<string>> dict = MDictionary_GetDict();
- if (dict.ContainsKey(depend))
- {
- dict.Remove(depend);
- //存回
- MDictionary_SaveDict(dict);
- }
- }
- #endregion
- #endregion
- }
- }
新建一个类 加载appsetting.json
- using Microsoft.Extensions.Configuration;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- namespace Web.Content
- {
- public class UtilConf
- {
- private static IConfiguration config;
- public static IConfiguration Configuration//加载配置文件
- {
- get
- {
- if (config != null) return config;
- config = new ConfigurationBuilder()
- .SetBasePath(Directory.GetCurrentDirectory())
- .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
- .Build();
- return config;
- }
- set => config = value;
- }
- }
- }
appsetting.json加入配置
- "enyimMemcached": {
- "Servers": [
- {
- "Address": "127.0.0.1",
- "Port":
- }
- ]
- }
使用
- //Memcached
- MemcachedHelper.Set("memcached", "memcached-core", "memcachedcore" + DateTime.Now, );
- string mh = MemcachedHelper.Get("memcached-core").ToString();
.net core Memcached使用的更多相关文章
- 使用PHP连接、操纵Memcached的原理和教程
http://www.crazyant.net/1014.html Memcahced开源分布式内存对象缓存系统通过减少数据库的负担,从而能够加速你的web应用.在本文中我将解释怎样实现一个基于Mem ...
- 一次 .NET Core 中玩锁的经历:ManualResetEventSlim, Semaphore 与 SemaphoreSlim
最近同事对 .net core memcached 缓存客户端 EnyimMemcachedCore 进行了高并发下的压力测试,发现在 linux 上高并发下使用 async 异步方法读取缓存数据会 ...
- 优秀 .NET 开源项目集锦
Github 地址: https://github.com/jasonhua95/awesome-dotnet-core awesome-dotnet-core .NET Core框架.库和软件的中文 ...
- 支持 .NET Core 的 Memcached 客户端 EnyimMemcachedCore
1. 介绍 EnyimMemcachedCore 是一个支持 .NET Core 的 Memcached 客户端,是从 EnyimMemcached 迁移至 .NET Core的,源代码托管在 Git ...
- .NET跨平台之旅:基于.NET Core改写EnyimMemcached,实现Linux上访问memcached缓存
注:支持 .NET Core 的 memcached 客户端 EnyimMemcachedCore 的 NuGet 包下载地址:https://www.nuget.org/packages/Enyim ...
- 谈谈在.NET Core中使用Redis和Memcached的序列化问题
前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许是隐式的,这个取决于使用的package是否有帮我们做这样一件事. 本文 ...
- 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 ...
- NET Core中使用Redis和Memcached
.NET Core中使用Redis和Memcached的序列化问题 前言 在使用分布式缓存的时候,都不可避免的要做这样一步操作,将数据序列化后再存储到缓存中去. 序列化这一操作,或许是显式的,或许 ...
- 使用Django.core.cache操作Memcached导致性能不稳定的分析过程
使用Django.core.cache操作Memcached导致性能不稳定的分析过程 最近测试一项目,用到了Nginx缓存服务,那可真是快啊!2Gb带宽都轻易耗尽. 不过Api接口无法简单使用Ngin ...
随机推荐
- RigidBody组件的Is Kinematic
RigidBody组件的Is Kinematic属性打上勾(设为true,使其不受物理引擎驱动,Wall是为了防止其移动,Person是为了防止其受到力不断旋转—看的心塞=v=) .is kinema ...
- 利用X.509证书对XML进行加密和签名
综述 XML加密和签名技术应用非常广泛. ASP.NET 使用XML加密对配置信息进行加密:InfoPath使用XML签名对表单进行签名:Web服务使用XML加密和签名对SOAP消息进行加 ...
- python2.7中可以使用到的一些模块地址
1.reportlab:由很多部分组成且允许用户使用多种方法创建输出,地址: 下载ReportLab https://pypi.python.org/simple/reportlab/ http:// ...
- 【校招面试 之 C/C++】第27题 C++ 智能指针(三)之 unique_ptr
auto_ptr<string> p1(new string ("auto") : //#1 auto_ptr<string> p2; //#2 p2 = ...
- maven不存在jar包解决
win7环境 下载:https://maven.apache.org/download.cgi 提取文件,并cmd 转到bin目录 假设要添加的jar包是jbarcode-0.2.8.jar, 可执行 ...
- 'WebElement' object is not iterable
checkbox.html源码: <html> <head> <meta http-equiv="content-type" content=&quo ...
- 动态加载JS,并执行回调函数
有些时候我们需要动态的加载一些JS,并在JS加载完成后执行一些回调函数. var loadscript = { $$: function (id) { return document.getEleme ...
- shell 脚本 测试webApp
vim **.sh文件 开头:#!/bin/bash ////////// copy cURL //因为这样copy的url就是一个命令(进入chrome的开发者工具里面,点network,找到刚刚访 ...
- 16进制string转成int
http://blog.csdn.net/wl1524520/article/details/25706521
- 7. Debug on local machine
Step 1: