PowerDotNet平台化软件架构设计与实现系列(08):缓存平台
几乎所有后端应用都会或多或少用到缓存,尤其是分布式缓存服务,以及和本地缓存构造的二级缓存。根据我们一贯的节约代码的风格,为了复用的目标,抽象出缓存平台,进行缓存管理。
考虑到很多公司都会自己造或者直接拿来主义使用各种各样的开源缓存轮子,本文介绍的就简单一点,介绍下主要思路和实现思想就行,灭哈哈。
环境准备
1、(必须).Net Framework4.5+
2、(必须)关系型数据库MySQL或SqlServer或PostgreSQL或MariaDB四选一
3、(必须)PowerDotNet数据库管理平台,主要使用DBKey功能
4、(必须)PowerDotNet配置中心Power.ConfigCenter
5、(必须)PowerDotNet注册中心Power.RegistryCenter
6、(必须)PowerDotNet基础数据平台Power.BaseData
7、(必须)PowerDotNet人员管理平台Power.HCRM,后续文章详细介绍
8、(必须)Redis
一、分布式缓存
PowerDotNet默认支持的分布式缓存是Redis(参考了CacheCloud,但是和它管理缓存的思路不完全一样,PowerDotNet的缓存设计主要是基于“分区”的分组复用),并可以继续抽象,预留扩展接口,后续可以支持更多分布式缓存选型,比如Memcached等。
1、Redis集群

2、Redis服务器
针对集群中的每台缓存服务器,可以精准定位,处理缓存。
管理系统支持一些场景的缓存设置场景,如查询、删除、添加、统计。
比如常见的查看键值对:

查看详细(含TTL):

再比如说添加,支持Redis的5大基本类型string、list、set、zset和hash:

管理后台很大程度上完全可以替代一些分布式缓存管理客户端软件。
注意,如果使用了cachecloud,集群可从cachecloud数据表machine_room表同步过来,服务器可从cachecloud数据表machine_info和server同步过来,如何同步,在PowerDotNet中数据同步平台是最好的选择。
3、缓存分组
对于大中型企业来说,分布式缓存经常需要按照业务团队进行分组管理。
PowerDotNet完美支持按照系统和应用进行缓存Route绑定,做到按组管理。
先定义CacheRoute,一个CacheRoute等同于一个缓存分组:

将CacheRoute绑定到具体应用,这样业务系统只要调用封装好的公共SDK(分布式缓存客户端SDK命名为Power.Cache)就能自动获取分布式缓存能力,甚至不用写任何配置,直接在配置中心,点点按钮搞定一切,实在是太省心了。

二、二级缓存
在配置中心进行配置,就可以顺利实现如下五种组合:
1、仅本地缓存
2、本地缓存加分布式缓存构成二级缓存,本地缓存优先
3、仅分布式缓存
4、本地缓存加分布式缓存构成二级缓存,分布式缓存优先
5、不开启任何缓存

不过第5种建议不要用,引入公共缓存组件做无用功也太没意思,咩哈哈,想的太周到了,这都是多年业务开发经验总结啊。
有了缓存平台,缓存管理更加人性化,排查和定位问题更加方便。
当然,Redis的部署、运维和迁移更是重中之重,哪怕用了cachecloud,还是会有团队遇到Redis各种使用问题。
根据个人所在公司的经验,排查下来,基本都是大规模集群下配置或者参数设置使用不当,虽然运维背锅,开发人员也要认清使用好Redis非常不容易,Redis作为基础设施,一出问题几乎都是大问题,这都是真实经验教训。
参考:
https://github.com/sohutv/cachecloud
http://www.redis.cn/commands.html
https://github.com/sripathikrishnan/redis-rdb-tools
https://stackexchange.github.io/StackExchange.Redis
https://github.com/ctstone/csredis
https://github.com/uglide/RedisDesktopManager
PowerDotNet平台化软件架构设计与实现系列(08):缓存平台的更多相关文章
- PowerDotNet平台化软件架构设计与实现系列(03):系统应用平台
为了复用和解耦,快速开发更多的系统和应用,我们对自己经常说的"系统"和"应用"进行更高级的提取和抽象. 十多年前入行,辗转至今,写过很多很多应用,个人喜欢分门别 ...
- PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台
本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...
- PowerDotNet平台化软件架构设计与实现系列(02):数据库管理平台
为了DB复用和简化管理,我们对常见应用依赖的DB模块进行更高级的提取和抽象. 虽然一些ORM可以简化DB开发,但是我们还是需要进行改进和优化,否则应用越多,后期管理运维越混乱. 根据常见开发需要,数据 ...
- PowerDotNet平台化软件架构设计与实现系列(05):ETCD分布式键值存储平台
ETCD目前在PowerDotNet已经被用于注册中心和配置管理(常见的配置中心在PowerDotNet中仅仅是一个小小的模块而已)中,作为基础设施的重要组成部分,ETCD的重要性不言而喻. 本文简单 ...
- PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台
本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...
- PowerDotNet平台化软件架构设计与实现系列(11):日志平台
所有后端应用几乎都会记录日志,日志系统可以统一抽象出来提供服务. 最近被Log4j2的安全漏洞刷屏了,作为开发人员的我只能咩哈哈几次表示日志处理太难了,只有折腾过的人才知道这里面的艰辛啊. 在实现Po ...
- PowerDotNet平台化软件架构设计与实现系列(12):HCRM人员管理平台
技术服务于业务,良好的技术设计和实现能够大幅提升业务质量和效率. PowerDotNet已经形成了自己的开发风格,很多项目已被应用于生产环境,可行性可用性可靠性都得到了生产环境验证. 编程是非常讲究动 ...
- PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台
定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...
- PowerDotNet平台化软件架构设计与实现系列(07):数据同步平台
上文介绍定时任务调度平台的时候提到,定时任务调度平台的类模式一般用于处理耗时较长的任务.但是根据经验,有些耗时较长的任务,可以通过简化业务逻辑.分页.批量多次处理,改造为耗时较小的适合使用RESTfu ...
随机推荐
- MySQL数据库从入门到放弃(目录)
目录 MySQL数据库从入门到放弃 推荐阅读 MySQL数据库从入门到放弃 193 数据库基础 194 初识MySQL 195 Windows安装MySQL 196 Linux安装MySQL 197 ...
- HTML四种定位-绝对定位
绝对定位 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset=&q ...
- 【豆科基因组】绿豆Mungbean, Vigna radiata基因组2014NC
目录 来源 一.简介 二.结果 基因组组装 重复序列和转座子 基因组特征和基因注释 绿豆的驯化 豆科基因组复制历史 基于转录组分析的豇豆属形成 绿豆育种基因组资源 三.讨论 四.方法 材料 组装 SN ...
- 【R方差分析】蛋白质表达量多组比较
初始数据类似: 蛋白质组数据虽不是严格的正态分布,但目前最常用的检验方法还是T检验(两组比较)和方差分析(多组比较).这个话题值得深究,这里不展开. 主要是求多个蛋白的Pvalue值或FDR,用于差异 ...
- Linux-设置终端界面的字体颜色和自定义常用快捷功能
.bashrc是一个隐藏的文件,要打开并修改该文件需要: (0)命令:cd ~ (1)命令:ls -a 找到文件 .bashrc: (2) 命令 vim ~/.bashrc 进入到文件: (3) 直接 ...
- kubernetes部署 docker 容器
docker 容器相对比较简单,不涉及认证授权,只需要本地启动起来即可,唯一需要注意就是添加flannel网络. # yum remove docker-latest-logrotate docker ...
- vim使用配置(转)
在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有行号的.语法高亮度显示.智能缩进等功能的. 为了更好的在vim下进行工作,需要手动配置一个配置文件: .vimrc 在启动vim时,当前用户 ...
- oracle 预安装命令
yum install oracle-rdbms-server-11gR2-preinstall-1.0-6.el6
- Java Maven项目搭建
创建空项目 New Project --> Empty Project --> ... 配置JDK Project Settings --> Project 选择JDK Module ...
- HashMap 和 HashSet
对于HashSet而言,系统采用Hash算法决定集合元素的存储位置,这样可以保证快速存取集合元素: 对于HashMap,系统将value当成key的附属,系统根据Hash算法来决定key的存储位置,这 ...