前言:

最近一段时间,开始了《IT连》创业,所以精力和写的文章多数是在分享创业的过程。

而关于本人三大框架CYQ.Data、Aries、Taurus.MVC的相关文章,基本都很少写了。

但框架的维护升级,还是时不时的在进行中的,这点从开源的Github上的代码提交时间上就可以看出来了。

毕竟《IT连》的后台WebAPI,用的是Taurus.MVC,后台系统管理用的是Aries。

不过今天,就不写创业相关的文章了,先分享篇技术类的文章。

CYQ.Data 分布式自动缓存

之前写过一篇:CYQ.Data V5 分布式自动化缓存设计介绍。

在上一篇里,基本情况和思路,已经介绍的很清楚,这里就简单补充2点:

1:自动缓存默认是开启状态的,相关控制和配置如下:

需要全局关闭时:

可以在应用程序启动时的入口用代码:

AppConfig.Cache.IsAutoCache=false;

或者app.config、web.config配置:

<appSettings><add key="IsAutoCache" value="false"/>
</appSettings>

需要代码局部关闭时:

using (MAction action = new MAction("表名"))
{action.SetAopState(CYQ.Data.Aop.AopOp.OnlyOuter);//关闭自动缓存并保留Aop
}

用代码控制清除表缓存时:

string key= CacheManage.GetKey(CacheKeyType.AutoCache, "表名");
CacheManage.Instance.Remove(key);

其它控制的配置项:

            /// <summary>/// AutoCache开启时,可以设置不缓存的Table,多个用逗号分隔/// </summary>public static string NoCacheTables{get{return GetApp("NoCacheTables", "");}set{SetApp("NoCacheTables", value);CYQ.Data.Cache.AutoCache.NoCacheTables = null;}}/// <summary>/// AutoCache开启时,可以设置不受更新影响的列名,用Json格式。/// {talbeName1:'column1,column2',talbeName2:'column1,column2'}/// </summary>public static string IngoreCacheColumns{get{return GetApp("IngoreCacheColumns", "");}set{SetApp("IngoreCacheColumns", value);CYQ.Data.Cache.AutoCache.IngoreCacheColumns = null;}}

2:分布式应用时的缓存控制

对于单一应用程序,框架已经处理的很好。

而对于多个应用程序,框架提供的方案是通过配置启用分布式缓存MemCache或Redis。

相关的配置如下(AppConfig下的都可以对应web.config下的AppSettings项):

            /// <summary>/// MemCache分布式缓存的服务器配置,多个用逗号(,)分隔/// </summary>public static string MemCacheServers{get{return GetApp("MemCacheServers", string.Empty);}set{SetApp("MemCacheServers", value);}}/// <summary>/// MemCache 备份服务器(当主服务器挂了后,请求会转向备用机)/// </summary>public static string MemCacheServersBak{get{return GetApp("MemCacheServersBak", string.Empty);}set{SetApp("MemCacheServersBak", value);}}/// <summary>/// Redis分布式缓存的服务器配置,多个用逗号(,)分隔/// </summary>public static string RedisServers{get{return GetApp("RedisServers", string.Empty);}set{SetApp("RedisServers", value);}}/// <summary>/// Redis 使用的DB数(默认1,使用db0)/// </summary>public static int RedisUseDBCount{get{return GetAppInt("RedisUseDBCount", 1);}set{SetApp("RedisUseDBCount", value.ToString());}}/// <summary>/// Redis 使用的DB 索引(默认0,若配置,则会忽略RedisUseDBCount)/// </summary>public static int RedisUseDBIndex{get{return GetAppInt("RedisUseDBIndex", 0);}set{SetApp("RedisUseDBIndex", value.ToString());}}/// <summary>/// Redis  备份服务器(当主服务器挂了后,请求会转向备用机)/// </summary>public static string RedisServersBak{get{return GetApp("RedisServersBak", string.Empty);}set{SetApp("RedisServersBak", value);}}

分布式下缓存的失效策略升级

在多个应用程序时,分布式缓存可以集中控制,固然是一种方案。

但对于单一的服务器来说,开始思考有没有更简单的方案,可以不装MemCache或Redis。

比如《IT连》创业项目的webapi和aries后台是两套程序,同一个服务器下共同操作一个数据库,各自有自动缓存的情况下。

经过思考,最后选择了通过定时扫描表来处理。

方案原理:

每个应用程序,只要配置好数据库链接(配置的数据库可以是任意的):

            /// <summary>/// CYQ.Data.Cache 自动缓存 - 数据库链接配置/// 在多个不同的应用项目里操作同一个数据库时(又不想使用分布式缓存MemCache或Redis),可以开启此项,达到缓存智能清除的效果。/// </summary>public static string AutoCacheConn{get{if (_AutoCacheConn == null){_AutoCacheConn = AppConfig.GetConn("AutoCacheConn");}return _AutoCacheConn;}set{_AutoCacheConn = value;}}        

接着框架会自动创建一个SysAutoCache表,包含CacheKey和CacheTime两列:

接着框架会有定时扫描,来处理:

 public static void AutoCacheKeyTask(object threadID){while (true)//定时扫描数据库
            {int time = AppConfig.Cache.AutoCacheTaskTime;if (time <= 0){time = 1000;}Thread.Sleep(time);if (removeListForKeyTask.Count > 0){string baseKey = removeListForKeyTask.Dequeue();if (!string.IsNullOrEmpty(baseKey)){KeyTable.SetKey(baseKey);}}if (KeyTable.HasAutoCacheTable) //读取看有没有需要移除的键。
                {KeyTable.ReadAndRemoveKey();}}}

默认是1秒扫一次,你也可以自己配置扫描的间隔时间:

            /// <summary>/// 当AutoCacheConn开启后,定时扫描数据库的任务时间(毫秒),默认1000/// </summary>public static int AutoCacheTaskTime{get{return GetAppInt("AutoCacheTaskTime", 1000);}set{SetApp("AutoCacheTaskTime", value.ToString());}}

总结:

对于本次升级来了两个好处:

1:多应用下更简单了,多了一种可选方案。

2:对于喜欢手动修改数据库数据的,或对于框架无法监控的存储过程代码,也可以手工或存储过程中更新SysAutoCache表的时间,以便于通知框架更新缓存。

整体而言:

1:自动缓存能将你的应用程序提升一个质量的飞跃。

2:自动在一些大型的项目里,应该用的更精致一些,配置好哪些表不需要缓存,哪些列的更新不影响缓存。

3:请保存系统有足够的缓存。

CYQ.Data V5 分布式自动化缓存设计介绍(二)相关推荐

  1. CYQ.Data V5 MDataTable 专属篇介绍

    前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分离和分布式 ...

  2. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  3. cyq.data mysql_终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  4. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  5. cyq.data mysql_终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了...

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  6. CYQ.Data V5 批量插入与批量更新示例

    转载地址:https://blog.csdn.net/cyq1162/article/details/53303611 最近有网友问了我 CYQ.Data 要怎么实现批量修改,于是我就花了点时间给写了 ...

  7. 系统架构设计师考试题库重点案例:分布式数据库缓存设计

    某企业是为城市高端用户提供高品质蔬菜生鲜服务的初创企业,创业初期为快速开展业务,该企业采用轻量型的开发架构(脚本语言+关系型数据库)研制了一套业务系统.业务开展后受到用户普遍欢迎,用户数和业务数量迅速 ...

  8. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  9. cyq.data 连接mysql_CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)

    CYQ.Data V5版本的文本数据库,以前有过相关的介绍: 周末一起用文本数据库玩玩Code First 数据的存储,是基于json格式或xml格式的,而实现的原理,也有一篇介绍: CYQ.Data ...

最新文章

  1. MySQL数据类型以及元数据的使用
  2. Python处理多行文本问题--一个简单方法读取多行fasta文件
  3. LInux找不到动态链接库,./cyusb_linux: error while loading shared libraries: libcyusb.so: cannot open shared
  4. 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
  5. SCU 4438 Censor
  6. 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建
  7. Juventas, the Roman Goddess of Youth [ Juventas, 罗马青春女神]
  8. oracle em 删除 重建,Oracle 11g 重建EM需要删除的对象
  9. mysql中为表创建副本_如何为数据库建立一个副本?
  10. 你看,公司状告员工不加班,居然还告赢了
  11. [Unity] Animator 播放 Mixamo 动画卡在第一帧的解决办法:勾选 Loop Time
  12. Dubbo学习总结(3)——Dubbo-Admin管理平台和Zookeeper注册中心的搭建
  13. java获取map遍历,Map获取键值,Map的几种遍历方法总结(推荐)
  14. 1044. 火星数字(20)-PAT乙级真题
  15. 2.抽象工厂(Abstract Factory)
  16. 433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
  17. 2019最新楚琳web打印控件破解版|楚琳web打印控件下载
  18. AutoCAD 2019 mac中文
  19. Ubuntu 字符终端
  20. SLT2021: CONVERSATIONAL END-TO-END TTS FOR VOICE AGENTS

热门文章

  1. 清华大学微纳脑机接口与机器人实验室:微纳系统机械设计研发工程师招聘
  2. 你不会编程,不是你不行,很有可能是老师教的方法不好。科学家发现:对大脑而言,代码编程与语言学习不同...
  3. DIY混合BCI刺激系统:SSVEP-P300 LED刺激
  4. 在虚幻UE4中不同VR头盔的FOV和分屏处理
  5. 小时候糖吃多了,长大后记性会变差| Nature子刊最新研究
  6. 因为修苹果电脑太贵,美国人自学当上百万粉博主,网友:坐标深圳,不存在这问题...
  7. 谷歌系自动驾驶公司再获4千万美元融资,核心产品是仿真软件
  8. mysql+PHP源码编译安装
  9. Kudu command tools
  10. Visual Studio跨平台开发Xamarin