一、概述
由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看看如何修改
总体设计思路如下:
image项目结构如下:
image二、服务端(提供Key配置文件管理及将Key配置存到缓存中)
KeyConfigList.xml缓存Key配置文件【与前一版一致】
imageKeyConfigList.xml
KeyEntity.cs是对应xml文件的数据实体类(与客户端通用)
imageKeyEntity.cs
RedisManager.cs是Redis的管理类使用的StackExchange.Redis.dll(与客户端通用)
imageRedisManager.cs
KeyServer.cs是提供缓存配置文件管理、监听、存储等功能的核心类
imageKeyServer.cs
服务端会读取消息来监控缓存是否含有配置信息所以服务端需要挂在成一个WindowsService服务
image测试调用代码
三、客户端(根据KeyNames获取缓存中的配置,然后根据配置读取缓存数据或创建缓存数据,如果没有配置则会返回NULL并发送消息申请创建缓存配置,主业务不会中断会直接穿透到数据库取值)
**KeyEntity.cs **和 RedisManager.cs的代码和服务端的一致,有需要拷贝即可!
CacheProvider.cs是对外提供缓存功能的类【与前一版一致】
imageCacheProvider.cs
MQProvider.cs是对外提供队列功能的类【与前一版一致】
imageMQProvider.cs
KeyNames.cs配置缓存Key的名称,用于寻找Key配置【与前一版一致】
imageKeyNames.cs
KeyClient.cs是对于使用缓存时寻找Key对应配置信息的核心类
imageKeyClient.cs
客户端使用只会接触到CacheProvider.cs和MQProvider.cs两个对外开放的操作类
使用步骤:
1、向KeyNames.cs中添加一个唯一的KeyName用于找到指定的Key配置;
2、向服务端的KeyConfigList.xml中添加此KeyName的缓存配置(此功能的提供方式可以自己定义,如直接修改文件或提供管理程序等);
3、使用Cache或者MQ的操作类传递KeyNames的枚举值,再传递缓存值即可;
image测试调用代码
如有什么可以改进的地方还请不吝指点,谢谢
网友评论