第26章 分布式缓存数据库配置的定义实现

news2024/11/25 21:47:02

1 Core.Configuration.CacheConfig

namespace Core.Configuration

{

    /// <summary>

    /// 【缓存配置--类】

    /// <remarks>

    /// 摘要:

    ///     通过该类中的属性成员实例对“appsettings.json”文件中的1个指定缓存项(/值对)在内存或指定分布式软件中保存的保留时间等数据进行设定性读写操作,为1个指定缓存项(/值对)在内存或指定分布式软件中保存的保留时间提供数据支撑。

    ///  说明:

    ///     属性成员的名称必须与JSON/值对中的键相同,且属性成员的个数与键的个数也必须相等,

    /// 否则ConfigurationBinder.Bind方法将不支持通过“appsettings.json”文件中数据库连接相关数据与当前类中的属性成员实例的设定性读写操作。

    /// </remarks>

    /// </summary>

    public partial class CacheConfig : IConfig

    {

        /// <summary>

        /// 【默认缓存时间】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个指定缓存项(/值对)在内存或指定分布式软件中保存的默认保留时间(默认值:60分钟=1小时)

        /// </remarks>

        /// </summary>

        public int DefaultCacheTime { get; private set; } = 60;

        /// <summary>

        /// 【短期缓存时间】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个指定缓存项(/值对)在内存或指定分布式软件中保存的最短保留时间(默认值:3分钟)

        /// </remarks>

        /// </summary>

        public int ShortTermCacheTime { get; private set; } = 3;

        /// <summary>

        /// 【打包文件缓存时间】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个指定缓存项(/值对)在内存或指定分布式软件中保存的(JS/CSS)绑定文件中所有数据的保留时间(默认值:120分钟=2小时)

        /// </remarks>

        /// </summary>

        public int BundledFilesCacheTime { get; private set; } = 120;

    }

}

2 Core.Configuration.DistributedCacheType

using System.Runtime.Serialization;

namespace Core.Configuration

{

    /// <summary>

    /// 【分布式缓存类型--枚举】

    /// <remarks>

    /// 摘要:

    ///     该枚举实例定义了3种缓存项(/值对)进行集中管理的方式,通过枚举实例选定其中的1种方式,实现当前程序对所有缓存项(/值对)进行集中管理。

    /// </remarks>

    /// </summary>

    public enum DistributedCacheType

    {

        /// <summary>

        /// 【内存】

        /// <remarks>

        /// 摘要:

        ///     指定通过“Microsoft.Extensions.Caching.Memory”程序集,对当前程序中所有缓存项(/值对)进行集中管理。

        /// EnumMember特性:

        ///     JSON序列化操作时把该枚举成员实例的值序列化为“memory”字符串,赋值给键/值对中的值。

        /// </remarks>

        /// </summary>

        [EnumMember(Value = "memory")]

        Memory,

        /// <summary>

        /// SqlServer

        /// <remarks>

        /// 摘要:

        ///     指定通过“Microsoft.Extensions.Caching.SqlServer”中间件使用“Microsoft SQL Server”数据库软件中的指定数据库中的指定表,对当前程序中所有缓存项(/值对)进行集中管理。

        /// EnumMember特性:

        ///     JSON序列化操作时把该枚举成员实例的值序列化为“sqlserver”字符串,赋值给键/值对中的值。

        /// </remarks>

        /// </summary>

        [EnumMember(Value = "sqlserver")]

        SqlServer,

        /// <summary>

        /// Redis

        /// <remarks>

        /// 摘要:

        ///     指定通过“Microsoft.Extensions.Caching.StackExchangeRedis”中间件使用“Redis”分页式数据库软件,对当前程序中所有缓存项(/值对)进行集中管理。

        /// EnumMember特性:

        ///     JSON序列化操作时把该枚举成员实例的值序列化为“redis”字符串,赋值给键/值对中的值。

        /// </remarks>

        /// </summary>

        [EnumMember(Value = "redis")]

        Redis

    }

}

3 Core.Configuration.DistributedCacheConfig

using Newtonsoft.Json;

using Newtonsoft.Json.Converters;

namespace Core.Configuration

{

    /// <summary>

    /// 【分页式缓存配置--类】

    /// <remarks>

    /// 摘要:

    ///     通过该类中的属性成员实例对“appsettings.json”文件中的1个指定分布式软件所需数据进行设定性读写操作,为当前程序与1个指定分布式数据库软件建立连接关系提供数据支撑。

    ///  说明:

    ///     属性成员的名称必须与JSON/值对中的键相同,且属性成员的个数与键的个数也必须相等,

    /// 否则ConfigurationBinder.Bind方法将不支持通过“appsettings.json”文件中的1个指定分布式软件所需数据进行设定性读写操作。

    /// </remarks>

    /// </summary>

    public partial class DistributedCacheConfig : IConfig

    {

        /// <summary>

        /// 【分布式缓存类型】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个指定分布式数据库软件与当前程序建立连接关系,默认指定通过“Redis”分布式数据库软件与当前程序进行数据交互操作。

        /// JsonConverter特性:

        ///     当前“DataConfig”类的实例通过JSON中的方法进行序列化/反序化时,需要根据字符字符串枚举方式来实例当前属性成员实例值与JSON/值对中值的相对转换操作。

        /// </remarks>

        /// </summary>

        [JsonConverter(typeof(StringEnumConverter))]

        public DistributedCacheType DistributedCacheType { get; private set; } = DistributedCacheType.Redis;

        /// <summary>

        /// 【启用?】

        /// <remarks>

        /// 摘要:

        ///     获取/设置1个值false(默认值:禁用)/true(启用),该值指示当前程序是否已经启用了1个指定分布式数据库软件与当前程序进行数据交互操作。

        /// </remarks>

        /// </summary>

        public bool Enabled { get; private set; } = false;

        /// <summary>

        /// 【连接字符串】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个连接字符串,该连接字符串只为实例化“Redis”分布式数据库软件与当前程序的连接提供数据支撑。

        /// </remarks>

        /// </summary>

        public string ConnectionString { get; private set; } = "127.0.0.1:6379,ssl=False";

        /// <summary>

        /// 【方案名】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个方案名,该连接字符串只用于实例化“Microsoft SQL Server”数据库软件中的指定表的方案名,为建立“Microsoft SQL Server”数据库软件中的指定数据库中的指定表与当前程序的连接提供数据支撑。

        /// </remarks>

        /// </summary>

        public string SchemaName { get; private set; } = "dbo";

        /// <summary>

        /// 【表名】

        /// <remarks>

        /// 摘要:

        ///    获取/设置1个表名,该连接字符串只用于实例化“Microsoft SQL Server”数据库软件中的指定表,为建立“Microsoft SQL Server”数据库软件中的指定数据库中的指定表与当前程序的连接提供数据支撑。

        /// </remarks>

        /// </summary>

        public string TableName { get; private set; } = "DistributedCache";

    }

}

4 分布式缓存运行原理

    由于在开始的程序开发中由于内存资源的昂贵和稀缺,程序中的所有实例都是有生命周期的,在1个指定功能执行完成后,系统会自动销毁这些实例所占据的内存资源,从而为新的实例的产生预先腾出的所需要的内存空间。当前虽然内存资源的昂贵和稀缺得以缓解,但程序的这种产生->释放机制却根深蒂固的存在着。

    基于网络数据传输的程序,需要减少把持久化数据加载的内存中的频率,从而提供程序的性能最终达到提升用户体验的目标。但这种目标的实现又与程序内存的产生->释放机制相矛盾,所以最终给出的解决方案是:通过“Redis”等特定分页式软件开辟内存空间,并以键/值对程序中所产生的实例进行集中(读/写/销毁)管理。

4.1“Microsoft.Extensions.Caching.Memory”程序集

    “Microsoft.Extensions.Caching.Memory”程序集,是微软最早所提供对述问题的解决方案,但是由于功能态过于单薄,当前在程序开发中已经不太多被使用。

    当程序中集成了通过“Microsoft.Extensions.Caching.Memory”程序集对缓存数据的管理,这只是为了为当前程序增加1种缓存管理的可选择性,如果简化程序定义实现可以删除该定义:“MemoryCacheManager”。

4.2 “Redis”分布式数据库软件

    当前程序开发中最多被使用的对缓存数据进行管理的软件,网上有很多案例,这里不再赘述,如果简化程序定义实现,且程序需要缓存数据进行支撑,最好的解决方案是在程序中实现该定义:“DistributedCacheManager”。

4.3 “Microsoft SQL Server”数据库软件中的指定数据库中的指定表

    这种解决方案的操作定义实现比较傻瓜,只要引用指定的中间件,并根据配置中的数据在“Microsoft SQL Server”数据库软件中的指定数据库中新建1个指定的表,其它的不需要任何的定义即可使用,但这种方案,也找不找几个应用案例,且只支持“Microsoft SQL Server”数据库软件,如果如果简化程序定义也可以删除配置定义中的相关属性成员:

    1、public string SchemaName { get; private set; } = "dbo";

    2、public string TableName { get; private set; } = "DistributedCache";

对以上功能更为具体实现和注释见230127_020shopDemo(分布式缓存数据库配置的定义实现)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/181247.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mysql-installer-community-8.0.22.0安装教程

1. 下载 mysql-installer-community-8.0.22.0安装包 首先去官网&#xff1a;https://dev.mysql.com/downloads/installer/ 下载MySQL。 2. 默认Next 3. 点击Execute 4. 同意安装 5. 点击Next后点Yes 6. 点击Execute 这里出现10个选项是正确的&#xff0c;如果不是&#xff0c;…

C++ vector 容器介绍

C vector 容器介绍 C的vector是标准库中常见的一种容器&#xff0c;使用起来非常方便&#xff0c;可以用来代替c原本的数组。vector是种容器&#xff0c;类似数组一样&#xff0c;但它的size可以动态改变。vector的元素在内存中连续排列&#xff0c;这一点跟数组一样。由于vect…

队列同步器AQS的实现与分析——独占锁模式

AQS独占锁模式源码分析1、tryAcquire()、acquire()方法2、addWaiter()方法3、acquireQueued()方法4、shouldParkAfterFailedAcquire()方法5、tryRelease()、release()方法1、tryAcquire()、acquire()方法 protected boolean tryAcquire(int arg) {throw new UnsupportedOperat…

glassfish任意文件读取漏洞

glassfish任意文件读取漏洞1.简介1.1.漏洞类型1.2.漏洞成因1.3.语法搜索1.4.影响版本2.漏洞复现2.1.POC2.2.访问地址2.3.GlassFish的敏感目录2.3.1.获取数据库密码2.3.2.获取GlassFish的后台密码2.4.POC脚本1.简介 GlassFish是一款强健的商业兼容应用服务器&#xff0c;达到产品…

MyEclipse提示过期,MyEclipse Subscription Expired激活方案

一、错误描述 紧接上文&#xff0c;虽然解决了MyEclipse提示过期问题&#xff0c;但是你会发现出现一行红色提示如下&#xff1a; 1.错误日志 Product activation must be completed within 5 days. 2.错误说明 产品激活必须在5天内完成。 二、解决方案 从错误日志很明显的可…

C++语法复习笔记-2. c++基础句法

文章目录1. 图灵机与三种基本结构1. 顺序结构2. 分支结构自定义结构-枚举结构体与联合体结构体数据对齐问题3. 循环结构三种循环结构反汇编查看三种结构效率实例&#xff1a;输出所有形如aabb的四位数的完全平方数方案1: 构造aabb数&#xff0c;再判断方案2&#xff1a;反向操作…

《网络编程实战》学习笔记 Day10

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1《Go 并发数据结构和算法实践》学习笔记 Day 2《说透芯片》学习笔记 Day 3《深入浅出计算机组成原理》学习笔记 Day 4《编程高手必学的内存知识》学习笔记 Day 5NUMA内存知…

自制DAPLink 基于ARM官方源码以及STM32F103C8T6

【本文发布于https://blog.csdn.net/Stack_/article/details/128771308&#xff0c;未经许可禁止转载&#xff0c;转载须注明出处】 一、安装工具并配置环境变量 1、python3 【官网】 【网盘】 链接&#xff1a;https://pan.baidu.com/s/1zW_H_eQlkzX3FkXuClFnTA 提取码&#…

python 操作 json 文件的种种知识点

本篇博客将带你全方位了解 Python 操作 json 文件的技术点 让你碰到 json 格式文件不在发愁 文章目录json 模块读取 JSON写入 JSON读取与写入基本用法如下json 模块进阶用法控制输出格式在 JSON 中存储 Python 特殊类型对数据进行验证和清洗第三方模块json 模块 Python 提供了…

CE自动汇编之AOB注入

目录 一、什么是AOB注入&#xff1f; 二、什么时候使用AOB注入&#xff1f; 三、代码注入 四、全部注入 五、“全部注入”和“AOB注入”的分别 六、代码注入与AOB注入的区别 CE自动汇编的模板中&#xff0c;有三种注入代码的方式&#xff1a; 第一种是代码注入&#xff…

Qt使用数据库模型中的删除详解

以下使用 QSqlTableModel 模型&#xff0c;使用tableView显示内容 以下为界面&#xff1a; 这里主要介绍删除操作&#xff1a; 删除一行为&#xff1a; int rowui->tableView->currentIndex().row();//获取行号model->revertRow(row);//删除该行model->submitAll(…

git 关于分支和仓库的理解

何时需要initgit init//初始化本地仓库.git目录如果初始化就会在当前文件夹中出现.git的目录&#xff0c;该目录默认是隐藏的&#xff0c;需要关闭显示隐藏文件才能看到。执行完git init命令后&#xff0c;当前目录就成为了工作区&#xff08;工作区可以理解为操作本地仓库的车…

MyBatis-Plus知识快速入门

文章目录1.MyBatis-Plus简介2.入门案例2.1开发环境2.2创建测试数据库和表2.3创建SpringBoot工程2.4创建实体类以及lombok的使用2.5添加mapper2.6加入日志功能3.基本的CRUD3.1BaseMapper3.2插入3.3删除3.4修改3.5查询4.通用Service4.1创建Service接口和实现类5.常用注解5.1Table…

“华为杯”研究生数学建模竞赛2005年-【华为杯】A题:城市出租车交通规划综合模型(附获奖论文和matlab代码)

赛题描述 A: Highway Traveling time Estimate and Optimal Routing Ⅰ Highway traveling time estimate is crucial to travelers. Hence, detectors are mounted on some of the US highways. For instance, detectors are mounted on every two-way six-lane highways o…

springboot 分布式全局唯一id的生成-雪花算法snowflake

一 背景描述 1.1 问题产生 在分布式系统中&#xff0c;怎么使用全局唯一id&#xff1f; 在分布式是&#xff0c;微服务的架构中&#xff0c;或者大数据分库分表中&#xff0c;多个不同节点怎么保持每台机器生成的主键id不重复&#xff0c;具有唯一性&#xff1f; 方案1&…

【算法基础】归并排序(原理、过程、例题、代码)

一、归并排序原理 1. 算法介绍 归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有…

力扣 2309. 兼具大小写的最好英文字母

题目 给你一个由英文字母组成的字符串 s &#xff0c;请你找出并返回 s 中的 最好 英文字母。返回的字母必须为大写形式。如果不存在满足条件的字母&#xff0c;则返回一个空字符串。 最好 英文字母的大写和小写形式必须 都 在 s 中出现。 英文字母 b 比另一个英文字母 a 更…

前端食堂技术周刊第 68 期:Astro 2.0、Nuxt v3.1.0、Bun v0.5、TS 实现 Stage 3 Decorators 提案

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;萝卜牛腩煲 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 本期摘要 Astro 2.0Nuxt v3.1.0Bun v0.5TS 实现 Stage 3 Decorators 提案Turbore…

【算法突击】排序算法系列(一) | 程序员面试 | 冒泡排序 | 快速排序 | 归并排序

【排序算法】 冒泡排序 | 快速排序 | 归并排序 文章目录【排序算法】 冒泡排序 | 快速排序 | 归并排序1. 冒泡排序1.1 核心思想1.2 代码实现2. 快速排序2.1 核心思想2.2 时间复杂度2.2 代码实现3. 归并排序3.1 核心思想3.2 时间复杂度3.3 代码实现1. 冒泡排序 1.1 核心思想 将…

【接口自动化】接口间参数传递的一种解决方案

本文转载自&#xff1a;接口间参数传递的一种解决方案 做过接口自动化测试的同学肯定都熟悉在全链路测试过程中&#xff0c;很多业务场景的完成并非由单一接口实现&#xff0c;而是由很多接口组成的一条链路实现。例如你在淘宝上购物场景。 不同于单接口测试&#xff0c;这种链…