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 ...
随机推荐
- [luogu5665]划分
暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$(然后可以各种优化到$o(n^2)$,但这不需要)输出f[i][j], ...
- Ubuntu下的磁盘管理
采用fat的磁盘存储,插入后采用相同命令会出现sdb和sdb1 sdb:磁盘 sdb1:磁盘分区标号为1 命令 df:显示磁盘使用情况 du:查询某个文件的大小读 du-h 或du -h --max- ...
- git添加新工程
git init git remote add origin 码云路径 git pull origin master 代码拉本地后 git add . git commit -m '新添加的文件内容描 ...
- html+css第三篇
css reset 原则: 但凡是浏览默认的样式,都不要使用. body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;font-size:12px;} ol,ul{margi ...
- .net core 3.1 WebAPi 使用 AutoMapper 9.0、10.0
AutoMapper 可以很方便完成数据对象之间的转换. Dto -> Entity Entity -> ViewModel Step 1:通过 NuGet 安装 AutoMapper 的 ...
- Codeforces 1383E - Strange Operation(线段树优化 DP or 单调栈+DP)
Codeforces 题目传送门 & 洛谷题目传送门 Yet another 自己搞出来的难度 \(\ge 2800\) 的题 介绍一个奇奇怪怪的 \(n\log n\) 的做法.首先特判掉字 ...
- Codeforces 1491H - Yuezheng Ling and Dynamic Tree(分块)
Codeforces 题目传送门 & 洛谷题目传送门 *3400 的毒瘤 H 题,特意写个题解纪念一下( 首先对于这种数据结构不太好直接维护的东东可以考虑分块.然鹅我除了分块其他啥也没想到 我 ...
- pyquery解析库的介绍和使用
### pyquery的介绍和使用 ## 测试文本 text = ''' <html><head><title>there is money</title&g ...
- 每日自动健康打卡(Python+腾讯云服务器)
每日自动健康打卡(Python+腾讯云服务器) 1.配置需要 python3.7,Chrome或者Edeg浏览器,Chrome驱动或者Edge驱动 #需要配置selenium库,baidu-aip库, ...
- Prometheus_exporter安装与使用
Promethues概述:可以看一下更详细的介绍,以下为转载的博客,原文链接,支持原创,请多多支持!!:闫世成的博客园 Prometheus-node-exporter 1.简介: 内核公开的硬件和操 ...