有个问题,以前系统采用的是System.Web.Caching.Cache
但是redis缓存的流行
分布式的流行,缓存就被切换了.
但是在redis缓存的环境需要配置,有时候要切换回来.
这时候就弄个缓存工厂切换.
改动小小的地方就ok.

namespace Yestar.Cache.Factory
{/// <summary> /// Zhruanjian/// 创建人:TD /// 描 述:缓存工厂类/// </summary>public class CacheFactory{/// <summary>/// 定义通用的Repository/// </summary>/// <returns></returns>public static ICache Cache(){return new Cache();}}
}

定义缓存抽象类

using System;namespace Yestar.Cache
{/// <summary> /// Zhruanjian/// 创建人:TD /// 描 述:定义缓存接口/// </summary>public interface ICache{/// <summary>/// 读取缓存/// </summary>/// <param name="cacheKey">键</param>/// <returns></returns>T GetCache<T>(string cacheKey) where T : class;/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>void WriteCache<T>(T value, string cacheKey) where T : class;/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>/// <param name="expireTime">到期时间</param>void WriteCache<T>(T value, string cacheKey, DateTime expireTime) where T : class;/// <summary>/// 移除指定数据缓存/// </summary>/// <param name="cacheKey">键</param>void RemoveCache(string cacheKey);/// <summary>/// 移除全部缓存/// </summary>void RemoveCache();}
}

System.Web.Caching.Cache 缓存继承抽象类

using System;
using System.Collections;
using System.Web;namespace Yestar.Cache
{/// <summary>/// 版 本 6.1/// Zhruanjian  /// 描 述:缓存操作/// </summary>public class Cache : ICache{private static System.Web.Caching.Cache cache = HttpRuntime.Cache;/// <summary>/// 读取缓存/// </summary>/// <param name="cacheKey">键</param>/// <returns></returns>public T GetCache<T>(string cacheKey) where T : class{if (cache[cacheKey] != null){return (T)cache[cacheKey];}return default(T);}/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>public void WriteCache<T>(T value, string cacheKey) where T : class{cache.Insert(cacheKey, value, null, DateTime.Now.AddMinutes(10), System.Web.Caching.Cache.NoSlidingExpiration);}/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>/// <param name="expireTime">到期时间</param>public void WriteCache<T>(T value, string cacheKey, DateTime expireTime) where T : class{cache.Insert(cacheKey, value, null, expireTime, System.Web.Caching.Cache.NoSlidingExpiration);}/// <summary>/// 移除指定数据缓存/// </summary>/// <param name="cacheKey">键</param>public void RemoveCache(string cacheKey){cache.Remove(cacheKey);}/// <summary>/// 移除全部缓存/// </summary>public void RemoveCache(){IDictionaryEnumerator CacheEnum = cache.GetEnumerator();while (CacheEnum.MoveNext()){cache.Remove(CacheEnum.Key.ToString());}}}
}

RedisCache 缓存类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;namespace Yestar.Cache.Redis
{/// <summary>/// 版 本 6.1/// Zhruanjian /// 描 述:定义缓存接口/// </summary>public class Cache : ICache{/// <summary>/// 读取缓存/// </summary>/// <param name="cacheKey">键</param>/// <returns></returns>public T GetCache<T>(string cacheKey) where T : class{return RedisCache.Get<T>(cacheKey);}/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>public void WriteCache<T>(T value, string cacheKey) where T : class{RedisCache.Set(cacheKey, value);}/// <summary>/// 写入缓存/// </summary>/// <param name="value">对象数据</param>/// <param name="cacheKey">键</param>/// <param name="expireTime">到期时间</param>public void WriteCache<T>(T value, string cacheKey, DateTime expireTime) where T : class{RedisCache.Set(cacheKey, value, expireTime);}/// <summary>/// 移除指定数据缓存/// </summary>/// <param name="cacheKey">键</param>public void RemoveCache(string cacheKey){RedisCache.Remove(cacheKey);}/// <summary>/// 移除全部缓存/// </summary>public void RemoveCache(){RedisCache.RemoveAll();}}
}

RedisCache 缓存操作类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ServiceStack.Redis;namespace Yestar.Cache.Redis
{/// <summary>/// 版 本 6.1/// Zhruanjian /// 描 述:定义缓存接口/// </summary>public class RedisCache{#region -- 连接信息 --/// <summary>/// redis配置文件信息/// </summary>private static RedisConfigInfo redisConfigInfo = RedisConfigInfo.GetConfig();private static PooledRedisClientManager prcm;/// <summary>/// 静态构造方法,初始化链接池管理对象/// </summary>static RedisCache(){CreateManager();}/// <summary>/// 创建链接池管理对象/// </summary>private static void CreateManager(){string[] writeServerList = SplitString(redisConfigInfo.WriteServerList, ",");string[] readServerList = SplitString(redisConfigInfo.ReadServerList, ",");prcm = new PooledRedisClientManager(readServerList, writeServerList,new RedisClientManagerConfig{MaxWritePoolSize = redisConfigInfo.MaxWritePoolSize,MaxReadPoolSize = redisConfigInfo.MaxReadPoolSize,AutoStart = redisConfigInfo.AutoStart,});}private static string[] SplitString(string strSource, string split){return strSource.Split(split.ToArray());}#endregion#region -- Item --/// <summary>/// 设置单体/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="t"></param>/// <param name="timeSpan"></param>/// <returns></returns>public static bool Set<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){return redis.Set<T>(key, t);}}/// <summary>/// 设置单体/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="t"></param>/// <param name="timeSpan"></param>/// <returns></returns>public static bool Set<T>(string key, T t, TimeSpan timeSpan){using (IRedisClient redis = prcm.GetClient()){return redis.Set<T>(key, t, timeSpan);}}/// <summary>/// 设置单体/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="t"></param>/// <param name="dateTime"></param>/// <returns></returns>public static bool Set<T>(string key, T t, DateTime dateTime){using (IRedisClient redis = prcm.GetClient()){return redis.Set<T>(key, t, dateTime);}}/// <summary>/// 获取单体/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public static T Get<T>(string key) where T : class{using (IRedisClient redis = prcm.GetClient()){return redis.Get<T>(key);}}/// <summary>/// 移除单体/// </summary>/// <param name="key"></param>public static bool Remove(string key){using (IRedisClient redis = prcm.GetClient()){return redis.Remove(key);}}/// <summary>/// 清空所有缓存/// </summary>public static void RemoveAll(){using (IRedisClient redis = prcm.GetClient()){redis.FlushAll();}}#endregion#region -- List --public static void List_Add<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();redisTypedClient.AddItemToList(redisTypedClient.Lists[key], t);}}public static bool List_Remove<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();return redisTypedClient.RemoveItemFromList(redisTypedClient.Lists[key], t) > 0;}}public static void List_RemoveAll<T>(string key){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();redisTypedClient.Lists[key].RemoveAll();}}public static long List_Count(string key){using (IRedisClient redis = prcm.GetClient()){return redis.GetListCount(key);}}public static List<T> List_GetRange<T>(string key, int start, int count){using (IRedisClient redis = prcm.GetClient()){var c = redis.As<T>();return c.Lists[key].GetRange(start, start + count - 1);}}public static List<T> List_GetList<T>(string key){using (IRedisClient redis = prcm.GetClient()){var c = redis.As<T>();return c.Lists[key].GetRange(0, c.Lists[key].Count);}}public static List<T> List_GetList<T>(string key, int pageIndex, int pageSize){int start = pageSize * (pageIndex - 1);return List_GetRange<T>(key, start, pageSize);}/// <summary>/// 设置缓存过期/// </summary>/// <param name="key"></param>/// <param name="datetime"></param>public static void List_SetExpire(string key, DateTime datetime){using (IRedisClient redis = prcm.GetClient()){redis.ExpireEntryAt(key, datetime);}}#endregion#region -- Set --public static void Set_Add<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();redisTypedClient.Sets[key].Add(t);}}public static bool Set_Contains<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();return redisTypedClient.Sets[key].Contains(t);}}public static bool Set_Remove<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){var redisTypedClient = redis.As<T>();return redisTypedClient.Sets[key].Remove(t);}}#endregion#region -- Hash --/// <summary>/// 判断某个数据是否已经被缓存/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="dataKey"></param>/// <returns></returns>public static bool Hash_Exist<T>(string key, string dataKey){using (IRedisClient redis = prcm.GetClient()){return redis.HashContainsEntry(key, dataKey);}}/// <summary>/// 存储数据到hash表/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="dataKey"></param>/// <returns></returns>public static bool Hash_Set<T>(string key, string dataKey, T t){using (IRedisClient redis = prcm.GetClient()){string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);return redis.SetEntryInHash(key, dataKey, value);}}/// <summary>/// 移除hash中的某值/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="dataKey"></param>/// <returns></returns>public static bool Hash_Remove(string key, string dataKey){using (IRedisClient redis = prcm.GetClient()){return redis.RemoveEntryFromHash(key, dataKey);}}/// <summary>/// 移除整个hash/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="dataKey"></param>/// <returns></returns>public static bool Hash_Remove(string key){using (IRedisClient redis = prcm.GetClient()){return redis.Remove(key);}}/// <summary>/// 从hash表获取数据/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="dataKey"></param>/// <returns></returns>public static T Hash_Get<T>(string key, string dataKey){using (IRedisClient redis = prcm.GetClient()){string value = redis.GetValueFromHash(key, dataKey);return ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(value);}}/// <summary>/// 获取整个hash的数据/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <returns></returns>public static List<T> Hash_GetAll<T>(string key){using (IRedisClient redis = prcm.GetClient()){var list = redis.GetHashValues(key);if (list != null && list.Count > 0){List<T> result = new List<T>();foreach (var item in list){var value = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);result.Add(value);}return result;}return null;}}/// <summary>/// 设置缓存过期/// </summary>/// <param name="key"></param>/// <param name="datetime"></param>public static void Hash_SetExpire(string key, DateTime datetime){using (IRedisClient redis = prcm.GetClient()){redis.ExpireEntryAt(key, datetime);}}#endregion#region -- SortedSet --/// <summary>///  添加数据到 SortedSet/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="t"></param>/// <param name="score"></param>public static bool SortedSet_Add<T>(string key, T t, double score){using (IRedisClient redis = prcm.GetClient()){string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);return redis.AddItemToSortedSet(key, value, score);}}/// <summary>/// 移除数据从SortedSet/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="t"></param>/// <returns></returns>public static bool SortedSet_Remove<T>(string key, T t){using (IRedisClient redis = prcm.GetClient()){string value = ServiceStack.Text.JsonSerializer.SerializeToString<T>(t);return redis.RemoveItemFromSortedSet(key, value);}}/// <summary>/// 修剪SortedSet/// </summary>/// <param name="key"></param>/// <param name="size">保留的条数</param>/// <returns></returns>public static long SortedSet_Trim(string key, int size){using (IRedisClient redis = prcm.GetClient()){return redis.RemoveRangeFromSortedSet(key, size, 9999999);}}/// <summary>/// 获取SortedSet的长度/// </summary>/// <param name="key"></param>/// <returns></returns>public static long SortedSet_Count(string key){using (IRedisClient redis = prcm.GetClient()){return redis.GetSortedSetCount(key);}}/// <summary>/// 获取SortedSet的分页数据/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="pageIndex"></param>/// <param name="pageSize"></param>/// <returns></returns>public static List<T> SortedSet_GetList<T>(string key, int pageIndex, int pageSize){using (IRedisClient redis = prcm.GetClient()){var list = redis.GetRangeFromSortedSet(key, (pageIndex - 1) * pageSize, pageIndex * pageSize - 1);if (list != null && list.Count > 0){List<T> result = new List<T>();foreach (var item in list){var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);result.Add(data);}return result;}}return null;}/// <summary>/// 获取SortedSet的全部数据/// </summary>/// <typeparam name="T"></typeparam>/// <param name="key"></param>/// <param name="pageIndex"></param>/// <param name="pageSize"></param>/// <returns></returns>public static List<T> SortedSet_GetListALL<T>(string key){using (IRedisClient redis = prcm.GetClient()){var list = redis.GetRangeFromSortedSet(key, 0, 9999999);if (list != null && list.Count > 0){List<T> result = new List<T>();foreach (var item in list){var data = ServiceStack.Text.JsonSerializer.DeserializeFromString<T>(item);result.Add(data);}return result;}}return null;}/// <summary>/// 设置缓存过期/// </summary>/// <param name="key"></param>/// <param name="datetime"></param>public static void SortedSet_SetExpire(string key, DateTime datetime){using (IRedisClient redis = prcm.GetClient()){redis.ExpireEntryAt(key, datetime);}}#endregion}
}

看起来是不是差不多了,然后redis缓存配置,配置不是大功告成.

.net程序末法时代,人人贡献一点开源产品
源代码下载: http://www.zhruanjian.com/
技术交流群:345265775

.Net内部缓存System.Web.Caching.Cache 和Redis缓存缓存工厂切换相关推荐

  1. System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...

  2. .net System.Web.Caching.Cache缓存类使用详解(转载)

    转自:http://www.cnblogs.com/virusswb/articles/1681561.html net System.Web.Caching.Cache缓存类使用详解 System. ...

  3. Himall商城缓存缓存到本地System.Web.Caching.Cache

    #region 缓存到本地System.Web.Caching.Cache /// <summary>         /// 缓存到本地System.Web.Caching.Cache ...

  4. System.Web.Caching.Cache

            System.Web.Caching 命名空间提供用于缓存服务器上常用数据的类.这包括 Cache 类,该类是一个使您可以存储任意数据对象(如哈希表和数据集)的词典.它还为这些对象提供 ...

  5. System.Web.Caching

    缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. 本章从缓存 ...

  6. 关于System.Web.Caching的“未将对象引用设置到对象的实例”错误

    初接触Asp.Net不久,想在后端做个缓存机制,于是使用了System.Web.Caching的Cache类. 使用部分的逻辑很简单,但是取值时总报错 private static Cache cac ...

  7. Spring Cache使用Redis自定义缓存key

    一.什么是Spring Cache 从spring 3.1版本开始,提供了一种透明的方式来为现有的spring 应用添加cache.在应用层面与后端存储之间,提供了一层抽象,这层抽象目的在于封装各种可 ...

  8. 22-08-06 西安 尚医通(03)EasyExcel; Spring Cache 、Redis做缓存

    EasyExcel EasyExcel:一行一行读取到内存 EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单.节省内存著称 POI:java里操作excel,读取.创建excel ...

  9. h5 html被缓存,【Web前端问题】html5离线缓存,不能被缓存问题

    回调函数 删除 删除 var a = ['1','20','2','30']; console.log(a.slice('1')); var ps = document.querySelectorAl ...

最新文章

  1. html复选框位置,html – 对齐复选框和标签
  2. PHP把下划线分隔命名的字符串 转换成驼峰式命名方式
  3. 给我十分钟带你过完java多线程所有基础知识
  4. UI binding render - how to check
  5. java二嗨租车项目_Java入门第二季6-1租车项目代码
  6. java 悬浮提示框_表格(悬浮框提示)
  7. 你怎么理解程序设计和c语言,【答题】C语言程序设计问题与解释实验
  8. 逻辑盘下的所有目录完全共享_Python File I/O之读取路径下所有目录和文件
  9. xml转java代码_java 中xml转换为Bean实例解析(纯代码)
  10. 路由器连接久点就慢下来了,怎么回事?
  11. [体验编译原理]编写简易计算器
  12. 计算机电缆静电,ZR-DJFPVP计算机电缆
  13. 世上哪有那么多的怀才不遇
  14. 《隐秘的角落》:发生在IDC机房的隐秘事件
  15. PCA实现高维数据可视化
  16. C#通过WebBrowser对网页截图
  17. 【豆知识】C语言中转义字符“\a”是什么意思?
  18. 全新资源网/教程网/下载站网站Emlog模板源码
  19. TLS初探(4)多域名证书
  20. TL-WR941N路由器刷DD-WRT和OPENWRT教程及使用花生壳

热门文章

  1. Simple: SQLite3 结巴分词插件
  2. “阿里外传”之一:阿里巴巴有只宠物,叫雅虎
  3. 自考那些事儿(五):软件开发工具(实践篇)
  4. 【解决方案】AI+无人洗车能有多智能?EasyNVR赋能AI无人洗车视频结构化图像智能分析能力
  5. Hi,你想要的在线创建架构图都在这儿!(二)
  6. 手机连接不上IIS网站(站点)
  7. 月薪80k阿里架构师:给迷茫的JAVA一些中肯建议(附学习路线图)
  8. [渝粤教育] 天津师范大学 基础心理学 参考 资料
  9. 广东迅视资管 长沙青年创客推荐“励”字为2020湖南年度字
  10. mysql top100_MySQL简要分析猫眼电影TOP100榜