【愚公系列】2022年12月 Redis数据库-Cache和Redis缓存的无缝切换使用

news2025/1/6 18:55:03

文章目录

  • 前言
  • 一、Cache和Redis缓存的无缝切换使用
    • 1.安装包
    • 2.服务配置
    • 3.创建控制器
    • 4.启动程序


前言

Redis是分布式缓存,是将数据随机分配到不同服务器的,catch属于单机缓存,只能本机访问。

Redis和Cache的区别吧

  • Redis和cache都是将数据存放在内存中,都是内存数据库。不过cache还可用于缓存其他东西,例如图片、视频等等。
  • Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
  • 虚拟内存-Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
  • 过期策略–cache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如业务配置进行设定
  • 分布式–设定cache集群,利用magent做一主多从;redis可以做一主多从。都可以一主一从
  • 存储数据安全–cache挂掉后,数据没了;redis可以定期保存到磁盘(持久化)
  • 灾难恢复–cache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复
  • Redis支持数据的备份,即master-slave模式的数据备份。

本文先介绍两个.Net Core 7自带的AddMemoryCache和AddDistributedMemoryCache方法:

  • AddMemoryCache:对应的使用的是 IMemoryCache , 它永远代表内存缓存,这里直接默认注入,不需要做其它判断了。
  • AddDistributedMemoryCache:对应的是 IDistributedCache,他可以基于内存缓存来使用,也可以基于Redis缓存来使用。

一、Cache和Redis缓存的无缝切换使用

1.安装包

关于Redis缓存,这里统一使用Caching.CSRedis程序集(Caching.CSRedis和CSRedisCore是一个东西)
在这里插入图片描述

2.服务配置

Program.cs

/*
 说明: 
 (1). AddMemoryCache 对应的使用的是 IMemoryCache , 它永远代表内存缓存,这里直接默认注入,不需要做其它判断了。
 (2). AddDistributedMemoryCache 对应的是 IDistributedCache,他可以基于内存缓存来使用,也可以基于Redis缓存来使用,二者可以无缝切换,详见下面参数配置
 */
builder.Services.AddMemoryCache();   //默认注入了内存
switch (builder.Configuration["CacheType"])
{
    //内存
    case "DistributedCache":
        {
            builder.Services.AddDistributedMemoryCache();
        }; break;
    //redis分布式缓存
    case "RedisCache":
        {
            var csredis = new CSRedisClient(builder.Configuration["RedisStr"]);
            builder.Services.AddSingleton<IDistributedCache>(new CSRedisCache(csredis));
        }; break;
    default: throw new Exception("缓存类型无效");
}

在这里插入图片描述

3.创建控制器

CacheOrRedisController

[Route("api/[controller]/[action]")]
[ApiController]
public class CacheOrRedisController : ControllerBase
{
    public IMemoryCache memoryCache { get; set; }
    public IDistributedCache distributedCache { get; set; }
    public CacheOrRedisController(IMemoryCache MemoryCache, IDistributedCache DistributedCache)
    {
        memoryCache = MemoryCache;
        distributedCache = DistributedCache;
    }

    /// <summary>
    /// 内存缓存
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public string TestMemoryCache()
    {
        //获取缓存没有则创建
        string myTime = memoryCache.GetOrCreate("Cache", (cacheEnty) =>
        {
            //模拟数据库中查询的结果写入缓存
            return DateTime.Now.ToString();
        })!;

        return myTime;
    }

    /// <summary>
    /// 内存缓存和Redis缓存无缝切换
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public string TestDistributedCache()
    {
        var myTime = distributedCache.GetString("Redis")!;
        if (string.IsNullOrEmpty(myTime))
        {
            //从数据库中查询 写入缓存
            distributedCache.SetString("Redis", DateTime.Now.ToString());
        }
        return myTime;
    }
}

4.启动程序

Cache缓存执行情况
在这里插入图片描述
Redis缓存执行情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Nginx rewrite 详解

Nginx rewrite 详解 本篇主要介绍 nginx 的 rewrite 重定向这个功能进行 详解介绍, 以及介绍它的使用场景 1. rewrite 基本介绍 rewrite是实现URL重写的关键指令&#xff0c;根据regex (正则表达式)部分内容,重定向到replacement&#xff0c;结尾是flag标记。 基本语法: re…

JAVA SCRIPT设计模式--结构型--设计模式之Decorator装饰模式(9)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能&#xff0c;所以不可能像C&#xff0c;JAVA等面向对象语言一样严谨&#xff0c;大部分程序都附上了JAVA SCRIPT代码&#xff0c;代码只是实现了设计模式的主体功能&#xff0c;不代…

JSP ssh房地产项目管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh房地产项目管理系统是一套完善的web设计系统&#xff08;系统采用ssh框架进行设计开发&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用 B/S模式开发。开发环境为TOMCAT7…

吉林省教育学院学报杂志社吉林省教育学院学报编辑部2022年第11期目录

特稿 高职院校思政课“一体两翼四融合”教学模式的构建探索——以吉林工业职业技术学院为例 杨宝忠;解静; 1-5 高校业财融合体系研究 朱延辉; 6-9 教育理论与管理《吉林教育学院学报》投稿&#xff1a;cn7kantougao163.com 新教育评价改革背景下幼儿园教师评价能力…

pikachu-xss部分速通

pikachu-xss部分速通 &#x1f349; &#x1f349;目录pikachu-xss部分速通反射型xss(get)反射性xss(post)存储型xssDOM型xss、DOM型xss-xxss盲打xss之过滤xss之htmlspecialcharsxss之href输出xss之js输出反射型xss(get) payload: </p><script>alert(1)</scr…

AI绘画绘图流量主小程序开发

AI绘画绘图流量主小程序开发 响应式设计——响应式布局&#xff0c;手机、平板、PC自适应匹配。 自定义模型——自定义内容模型、自定义字段、自定义表单。 付费阅读——支持企业支付宝、企业微信支付、余额支付无缝整合。 微信小程序端——微信小程序CMS客户端和服务端全部源…

【Linux】Docker 搭建 Jenkins

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 目录一、Jenkins到底是什么&#xff1f;二、持…

微服务框架 SpringCloud微服务架构 26 数据聚合 26.3 DSL 实现Metrics 聚合

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构26 数据聚合26.3 DSL 实现Metrics 聚合26.3.1 DSL 实现Metrics 聚合26 数据…

ADI DSP的JTAG设计规范(提供JTAG标准设计原理图)

早就想写点这方面内容了&#xff0c;14PIN的JTAG设计&#xff0c;是ADI从2000年至今一直延续下来的一个JTAG标准设计&#xff0c;很多兄弟在做硬件设计的时候&#xff0c;最常问的一个问题就是&#xff1a;JTAG接口定义是什么&#xff1f;更多的只知道抄原厂评估板的参考设计&a…

Nginx 反向代理与负载均衡

什么是Nginx Nginx 是一款高性能的 http 服务器和反向代理服务器&#xff0c;官方测试 nginx 能够支支撑 5 万并发链接&#xff0c;并且 cpu、内存等资源消耗却非常低&#xff0c;运行非常稳定。 Nginx 应用场景 http 服务器&#xff1a;Nginx 是一个 http 服务可以独立提供…

web前端期末大作业:HTML+CSS+JavaScript绿色的盆栽花店网站响应式模板 大学生鲜花网页设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

嵌入式面试问题汇总

文章目录c/c1、malloc与new的区别2、C语言内存分配的方式3、struct 与 class的区别4、const常量和#define的区别5、vector与list6、各个stl的底层实现7、动态绑定与静态绑定8、多态实现的三个条件、实现的原理9、析构函数一般写成虚函数的原因10、构造函数不能是虚函数的原因11…

把握数字化时代发展机遇,供应链协同系统驱动生物医药企业提速数字化转型升级

生物医药行业是指将基因工程、细胞工程、酶工程等现代生物技术与各种形式的新药研发、生产相结合&#xff0c;制造市场可流通药品并规模化生产的经济实体的总和。近年来&#xff0c;随着国内生物医药行业的不断扩张及竞争日益激烈&#xff0c;如何借助数字化打造生物医药企业核…

(15)点云数据处理学习——单目深度估计获得RGBD图再重建点云

1、主要参考 &#xff08;1&#xff09;大佬视频 Create Your Own Point Clouds from Depth Maps - Point Cloud Processing in Open3D_哔哩哔哩_bilibili &#xff08;2&#xff09;重要&#xff01;&#xff01;&#xff01;我前面的教程 &#xff08;7&#xff09;点云数…

配置gradle :将properties文件转换为扩展属性

配置gradle 为了便于管理项目配置信息&#xff0c;和自动复制应用图标到资源文件夹&#xff0c;为后面的一键生成app做准备。我写了一个gradle文件。 作用 项目启动的时候自动执行以下操作 在setting.gradle中引入一次后&#xff0c;全局可用。根目录的build.gradle和各个mo…

如何理解Spring?

Spring 是包含了众多⼯具⽅法的 IoC 容器。 那何为容器呢&#xff1f;容器是用来容纳某种东西的装置。比如&#xff1a;List/Map 是数据存储容器&#xff0c;Tomcat 是Web 容器等等。Spring 也是⼀个容器&#xff0c;是⼀个 IoC 容器。 那何为IoC 呢&#xff1f;IoC Inversi…

Buildroot系列开发(四)Linux工具链剖析

内容参考&#xff1a;百问网 文章目录1.什么是工具链2.什么是交叉编译工具链3.ABI4. Multilib工具链5.工具链与SDK的区别6.获得适合的交叉编译工具链7.sysroot8.Toolchain内部剖析9.根文件系统与sysroot10. 工具链组成11.整体构建过程12.自定义工具链1.什么是工具链 2.什么是交…

毕业设计-基于大数据动画电影推荐系统-python

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 &#x1f4c5;大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

面试题:三个线程按顺序打印 ABCABC

小伙伴们好呀&#xff0c;最近在重新复习&#xff0c;整理自己的知识库&#xff0c;偶然看到这道面试题&#xff1a;三个线程按顺序打印 ABCABC&#xff0c;尝试着做一下&#xff0c;才发现自己对线程还有好多地方不懂&#xff0c;蓝瘦…… &#x1f437; 思路 很明显&#xf…

Docker可视化工具Portainer安装

一、官网介绍 官方地址&#xff1a;https://www.portainer.io/ 致力于为开发者做最强大的docker管理平台二、在 Linux 上使用 Docker 安装 Portainer 官方文档地址&#xff1a;https://docs.portainer.io/start/install/server/docker/linux 1、部署前需知 &#xff08;1&a…