Redis缓存项目应用架构设计一
2017-09-01 17:18
483 查看
一些项目整理出的项目中引入缓存的架构设计方案,希望能帮助你更好地管理项目缓存,作者水平有限,如有不足还望指点。
一、基础结构介绍
View Code
三、项目调用代码
Redis如果遇到同样Key且同类型(String、Hash、List)时是直接覆盖值,如果不同类型的话就会报错了,我偷懒使用了同一个KeyNames就使用加前缀的方式来区分同类型不重复
附录:配置参数解析
一、基础结构介绍
/// <summary> /// 队列提供类 /// Author:taiyonghai /// CreateTime:2017-08-31 /// </summary> public class MQProvider { #region MQ 添加 /// <summary> /// 添加一条消息到队列 /// </summary> /// <param name="name">Key名称</param> /// <param name="msg">内容</param> /// <returns></returns> public long SetMsg<T>(KeyNames name, T msg) where T : class, new() { return SetMsg<T>(name, msg, null); } /// <summary> /// 添加一条消息到队列 /// </summary> /// <param name="name">Key名称</param> /// <param name="msg">内容</param> /// <param name="identities">Key标识(用于替换Key中的{0}占位符)</param> /// <returns></returns> public long SetMsg<T>(KeyNames name, T msg, params string[] identities) where T : class, new() { //如果value为null直接缓存无需序列化 string tmpMsg = null == msg ? null : JsonSerializer.SerializeToString<T>(msg); return SetMsg(name, tmpMsg, identities); } /// <summary> /// 添加一条消息到队列 /// </summary> /// <param name="name">Key名称</param> /// <param name="msg">内容</param> /// <returns></returns> public long SetMsg(KeyNames name, string msg) { return SetMsg(name, msg, null); } /// <summary> /// 添加一条消息到队列[核心] /// </summary> /// <param name="name">Key名称</param> /// <param name="msg">内容</param> /// <param name="identities">Key标识(用于替换Key中的{0}占位符)</param> /// <returns>添加消息后的队列长度</returns> public long SetMsg(KeyNames name, string msg, params string[] identities) { var entity = KeyManager.Get(name, identities); //向队列右侧插入新的消息 return RedisManager.GetClient().ListRightPush(entity.Key, msg); } #endregion #region MQ 获取 /// <summary> /// 从队列中获取一条消息,并将其在队列中移除 /// </summary> /// <param name="name">Key名称</param> /// <returns>没有消息返回NULL</returns> public T GetMsg<T>(KeyNames name) where T : class, new() { return GetMsg<T>(name, null); } /// <summary> /// 从队列中获取一条消息,并将其在队列中移除 /// </summary> /// <param name="name">Key名称</param> /// <param name="identities">Key标识(用于替换Key中的{0}占位符)</param> /// <returns>没有消息返回NULL</returns> public T GetMsg<T>(KeyNames name, params string[] identities) where T : class, new() { string tmpStr = GetMsg(name, identities); return null == tmpStr ? default(T) : JsonSerializer.DeserializeFromString<T>(tmpStr); } /// <summary> /// 从队列中获取一条消息,并将其在队列中移除 /// </summary> /// <param name="name">Key名称</param> /// <returns>没有消息返回NULL</returns> public string GetMsg(KeyNames name) { return GetMsg(name, null); } /// <summary> /// 从队列中获取一条消息,并将其在队列中移除[核心] /// </summary> /// <param name="name">Key名称</param> /// <param name="identities">Key标识(用于替换Key中的{0}占位符)</param> /// <returns>没有消息返回NULL</returns> public string GetMsg(KeyNames name, params string[] identities) { var entity = KeyManager.Get(name, identities); //从队列左侧队列头部取出消息 return RedisManager.GetClient().ListLeftPop(entity.Key); } #endregion }
View Code
三、项目调用代码
Redis如果遇到同样Key且同类型(String、Hash、List)时是直接覆盖值,如果不同类型的话就会报错了,我偷懒使用了同一个KeyNames就使用加前缀的方式来区分同类型不重复
CacheProvider cache = new CacheProvider(); MQProvider mq = new MQProvider(); //基础类型 cache.SetString(KeyNames.Cache_Admin_User_Session, "taiyonghai", "100"); var str = cache.GetString(KeyNames.Cache_Admin_User_Session); //Hash类型 var dict = new Dictionary<string, string>(); dict.Add("1", "待处理"); dict.Add("2", "处理中"); dict.Add("3", "处理完成"); cache.SetHash(KeyNames.Cache_Hash_Admin_User_List, dict); var tmpDict = cache.GetHash(KeyNames.Cache_Hash_Admin_User_List); //List队列 mq.SetMsg(KeyNames.Msg_Admin_User_Search, "Hello"); mq.GetMsg(KeyNames.Msg_Admin_User_Search);
附录:配置参数解析
相关文章推荐
- 应用 Rational 工具简化基于 J2EE 的项目第 5 部分 :架构与设计
- 高性能网站架构设计之缓存篇(6)- Redis 集群(中)
- 高性能网站架构设计之缓存篇(4)- Redis 主从复制
- 高性能网站架构设计之缓存篇(5)- Redis 集群(中)
- 网络应用系统---系统设计架构个人项目实战示例(各种页面代码A)
- 应用 Rational 工具简化基于 J2EE 的项目第 5 部分 :架构与设计
- 高性能网站架构设计之缓存篇(6)- Redis 集群命令
- 高性能网站架构设计之缓存篇(8)- Redis哨兵Sentinel的搭建和原理说明
- 高性能网站架构设计之缓存篇(1)- Redis的安装与使用
- (架构设计)观察者模式+redis队列实现不同项目之间数据的交互
- 高性能网站架构设计之缓存篇(7)- Redis哨兵sentinel机制用法与说明
- 应用Rational工具简化基于J2EE项目(五)架构与设计
- 高性能网站架构设计之缓存篇(5)- Redis 集群(上)
- 电商项目架构,缓存,性能调优,设计模式,项目实战
- 高性能网站架构设计之缓存篇(4)- Redis 主从复制
- 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类
- .Net 应用业务系统架构设计-项目结构图
- 百亿级日访问量的应用如何做缓存架构设计?
- 应用 Rational 工具简化基于 J2EE 的项目第 5 部分 :架构与设计
- 高性能网站架构设计之缓存篇(6)- Redis 集群(中)