net core WebApi——缓存神器Redis
前言
中秋过完不知不觉都已经快两周没动这个工程了,最近业务需要总算开始搞后台云服务了,果断直接net core搞起,在做的中间遇到了不少问题,这个后续会一点点列出来包括解决方法,今天就先把之前挖的坑填一个。
Redis
之前在缓存那篇提到过,Cookie,Session,Cache这几个不同的缓存方式,Cookie是存在客户端浏览器的,Session实质上也是客户端的存储,至于Cache是服务端的,但是如果是分布式的话,这几个方式可能除了Cookie其他两个都要有点儿问题,毕竟一台服务只存储自身一台,如果多台的话,需要涉及到多服务的交互,比如一台服务做了Cache存储,需要给其他服务发送内部信号或是http请求,其他服务根据请求执行对应操作。
当然这是在没有用到Redis的前提下,Redis是解决分布式缓存的神器,相当于是自身一台服务器专门处理数据的读写,可以理解为数据服务器(个人感觉。。。),至于自己业务的分布式只是为了业务需要去执行,需要用到数据缓存即可直接调用Redis的读写操作(当然,各个服务的Redis配置要保持一致)。
Redis的安装和配置在Linux配置部署_新手向(四)——Redis安装与配置已经说过,当时就是为了使用Redis而做了个小铺垫。
使用
首先,只要是类库肯定是引入Nuget包了,我们在April.Util引入Microsoft.Extensions.Caching.Redis,当然其他也有StackExchange.Redis,CSRedisCore,这里先试试官方的吧,官方扩展包地址。
引入完之后,我们在appsettings.json来配置下地址目录。

之后我们看下Redis的方法,毕竟调用第三方都是看看然后根据自己需要裹一下。

也是先要初始化配置信息,然后创建实体对象,调用方法,这里说明下,默认的value值是byte[],当然官方也有扩展方法。

好了,看完了方法,我们来开始Util吧。
RedisUtil
首先,我们还是要先做配置信息,前面已经在appsettings写过配置信息,这里直接在AprilConfig中添加上。
private static string _IsOpenCache = string.Empty;
/// <summary>
/// 是否使用Redis
/// </summary>
public static bool IsOpenCache
{
get
{
if (string.IsNullOrEmpty(_IsOpenCache))
{
_IsOpenCache = Configuration["Redis:IsOpenRedis"];
}
if (_IsOpenCache.ToLower() == "true")
{
return true;
}
return false;
}
}
private static string _RedisConnectionString = string.Empty;
/// <summary>
/// Redis默认连接串
/// </summary>
public static string RedisConnectionString
{
get
{
if (string.IsNullOrEmpty(_RedisConnectionString))
{
_RedisConnectionString = Configuration["Redis:ConnectionString"];
}
return _RedisConnectionString;
}
}
配置信息设置完成之后,开始初始化Redis的方法。
private static RedisCache _redisCache = null;
private static RedisCacheOptions options = null;
/// <summary>
/// 初始化Redis
/// </summary>
public static void InitRedis()
{
if (AprilConfig.IsOpenCache)
{
_redisCache = new RedisCache(GetOptions());
}
}
/// <summary>
/// 获取配置项信息
/// </summary>
/// <returns></returns>
protected static RedisCacheOptions GetOptions()
{
options = new RedisCacheOptions();
options.Configuration = AprilConfig.RedisConnectionString;
options.InstanceName = "April.Redis";
return options;
}
/// <summary>
/// 添加数据
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="ExprireTime">过期时间</param>
public static void Add(string key, object value, int ExprireTime = 10)
{
if (string.IsNullOrEmpty(key))
{
return;
}
string strValue = string.Empty;
try
{
strValue = JsonConvert.SerializeObject(value);
}
catch (Exception ex)
{
LogUtil.Error($"Redis.Add转换失败:{ex.Message}");
}
if (!string.IsNullOrEmpty(strValue))
{
_redisCache.SetString(key, strValue, new Microsoft.Extensions.Caching.Distributed.DistributedCacheEntryOptions()
{
AbsoluteExpiration = DateTime.Now.AddMinutes(ExprireTime)
});
}
}
/// <summary>
/// 获取数据(对象)
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
public static T Get<T>(string key)
{
string value = Get(key);
if (string.IsNullOrEmpty(value))
{
return default(T);
}
T obj = default(T);
try
{
obj = JsonConvert.DeserializeObject<T>(value);
}
catch (Exception ex)
{
LogUtil.Error($"Redis.Get转换失败:{ex.Message},数据:{value}");
}
return obj;
}
/// <summary>
/// 移除数据
/// </summary>
/// <param name="key">键</param>
public static void Remove(string key)
{
if (!string.IsNullOrEmpty(key))
{
_redisCache.Remove(key);
}
}
/// <summary>
/// 重置数据
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expireTime">过期时间</param>
public static void Replace(string key, object value, int expireTime = 10)
{
if (!string.IsNullOrEmpty(key))
{
Remove(key);
Add(key, value, expireTime);
}
}
具体使用的方法,这里不多写了,代码地址见net core Webapi 总目录,感觉代码贴的多了,自己也习惯了复制粘贴,看一个封装好的方法,就要去看他的源码(如果只是用的话就算了),这样对方法的使用以及自身的业务需要封装会有很好的帮助,毕竟会用是第一步,会改是第二步,封装是第三步,自己写那就是最终级了(这句纯属自勉)。
测试
好了,写完之后,习惯来一遍测试,不想自己整理的东西最终还是不能用,千篇一律不可怕,可怕的是不知道最终的效果。
新增


获取


覆盖
ps:说是覆盖,其实就是删除然后新增-,-|||


删除


小结
写到这里基本上都结束了,简单的说明了Redis的使用,后续还是会不断更新,比如那么多database,如果随意切换,redis存储之后会不会有什么其他问题等等,学以致用,用方知错,错而能改,改了就行。
net core WebApi——缓存神器Redis的更多相关文章
- 记一次使用Asp.Net Core WebApi 5.0+Dapper+Mysql+Redis+Docker的开发过程
#前言 我可能有三年没怎么碰C#了,目前的工作是在全职搞前端,最近有时间抽空看了一下Asp.net Core,Core版本号都到了5.0了,也越来越好用了,下面将记录一下这几天以来使用Asp.Net ...
- .NET WebAPI 采用 IDistributedCache 实现分布式缓存过滤器 Redis 模式
分布式缓存是由多个应用服务器共享的缓存,通常作为访问它的应用服务器的外部服务进行维护. 分布式缓存可以提高 ASP.NET Core 应用的性能和可伸缩性,尤其是当应用由云服务或服务器场托管时. 与其 ...
- ASP.NET Core WebApi基于Redis实现Token接口安全认证
一.课程介绍 明人不说暗话,跟着阿笨一起玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NET WebSer ...
- net core WebApi——April.Util更新之权限
目录 前言 权限 中间层 小结 前言 在之前已经提到过,公用类库Util已经开源,目的一是为了简化开发的工作量,毕竟有些常规的功能类库重复率还是挺高的,二是为了一起探讨学习软件开发,用的人越多问题也就 ...
- Asp.Net Core 2.0 项目实战(8)Core下缓存操作、序列化操作、JSON操作等Helper集合类
本文目录 1. 前沿 2.CacheHelper基于Microsoft.Extensions.Caching.Memory封装 3.XmlHelper快速操作xml文档 4.Serializatio ...
- Net core 关于缓存的实现
在很多项目中, 需要用到缓存,借鉴网上前辈们的一些经验,自己再进行总结简化了一些, 做出如下的缓存操作,其中包含内存缓存(IMemoryCache) 和 Redis 缓存; 一.前提内容, 导入两个包 ...
- spring(三、spring中的eheche缓存、redis使用)
spring(三.spring中的eheche缓存.redis使用) 本文主要介绍为什么要构建ehcache+redis两级缓存?以及在实战中如何实现?思考如何配置缓存策略更合适?这样的方案可能遗留什 ...
- net core Webapi 总目录
目录 博客目录 代码地址 博客目录 net core Webapi基础工程搭建(一)--开发工具及环境 net core Webapi基础工程搭建(二)--创建工程 net core Webapi基础 ...
- net core Webapi基础工程搭建(六)——数据库操作_Part 1
目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...
随机推荐
- js-获取屏幕的中各种宽高
网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...
- 如何使用python records 库优雅的操作数据库
今天要介绍的这个python第三方库非常厉害,完美操作各种数据库.名字叫 records, 在网上很少有这个库的相关资料,但是在开源社区可是很火热的哦.如果这还不能打消你的顾虑,再告诉你一件事:如果你 ...
- c11标准
在编译器vs13及其以上可以使用 编译器对语言的一种优化 1.变量初始化 int a=0,a(10),a{10};定义a的值的三种方式 2.nullptr 相当于c的null 有类型 更加的安全 3. ...
- React 现代化测试
测试的动机 测试用例的书写是一个风险驱动的行为, 每当收到 Bug 报告时, 先写一个单元测试来暴露这个 Bug, 在日后的代码提交中, 若该测试用例是通过的, 开发者就能更为自信地确保程序不会再次出 ...
- 【Windows Of CCPC HDU - 6708】【打表,找规律】
题意分析 HDU - 6708 题意:给出一个整数k,要求你输出一个长和宽均为2^k^ 的符合要求的矩阵.比如k等于1时输出 \[ \begin{matrix} C & C \\ P & ...
- Flink的JobManager启动(源码分析)
都知道Flink中的角色分为Jobmanager,TaskManger 在启动脚本里面已经找到了jobmanager的启动类org.apache.flink.runtime.entrypoint.St ...
- Nacos(九):Nacos集群部署和遇到的问题
前言 前面的系列文章已经介绍了Nacos的如何接入SpringCloud,以及Nacos的基本使用方式 之前的文章中都是基于单机模式部署进行讲解的,本文对Nacos的集群部署方式进行说明 环境准备 J ...
- 【IDEA】在IDEA中使用@Slf4j报错,找不到log
题:在IDEA中使用@Slf4j报错,找不到log 解决方法:需要在IDEA中安装插件lombok 详细步骤: 1.File->Settings 2.Plugins->Browse rep ...
- 用故事解析setTimeout和setInterval(内含js单线程和任务队列)
区别: setTimeout(fn,t): 延迟调用,超过了时间就调用回调函数,返回一个id,使用clearTimeout(id)取消执行. 注意:取消了里面的回调函数就不执行了哦,而不是取消的时候就 ...
- Mysql高手系列 - 第4天:DDL常见操作汇总
这是Mysql系列第4篇. 环境:mysql5.7.25,cmd命令中进行演示. DDL:Data Define Language数据定义语言,主要用来对数据库.表进行一些管理操作. 如:建库.删库. ...