redis message获取value_.NET Core WebAPI 缓存神器Redis

(给DotNet加星标,提升.Net技能)

转自: AprilBlank cnblogs.com/AprilBlank/p/11571365.html

前言

最近业务需要总算开始搞后台云服务了,果断直接.NET Core搞起,在做的中间遇到了不少问题,这个后续会一点点列出来包括解决方法,今天就先把之前挖的坑填一个。

Redis

之前在缓存那篇提到过,Cookie,Session,Cache这几个不同的缓存方式,Cookie是存在客户端浏览器的,Session实质上也是客户端的存储,至于Cache是服务端的,但是如果是分布式的话,这几个方式可能除了Cookie其他两个都要有点儿问题,毕竟一台服务只存储自身一台,如果多台的话,需要涉及到多服务的交互,比如一台服务做了Cache存储,需要给其他服务发送内部信号或是http请求,其他服务根据请求执行对应操作。

当然这是在没有用到Redis的前提下,Redis是解决分布式缓存的神器,相当于是自身一台服务器专门处理数据的读写,可以理解为数据服务器(个人感觉。。。),至于自己业务的分布式只是为了业务需要去执行,需要用到数据缓存即可直接调用Redis的读写操作(当然,各个服务的Redis配置要保持一致)。

使用

首先,只要是类库肯定是引入Nuget包了,我们在April.Util引入Microsoft.Extensions.Caching.Redis,当然其他也有StackExchange.Redis,CSRedisCore,这里先试试官方的吧,官方扩展包地址https://github.com/aspnet/Extensions/tree/9bc79b2f25a3724376d7af19617c33749a30ea3a。

引入完之后,我们在appsettings.json来配置下地址目录。

a2359e751d884bdff2b726e3bf1062c8.png

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

b231223abcc096bd66467f7729a97ff9.png

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

01e42ce238c861e4b51532ab2fd7d08f.png

好了,看完了方法,我们来开始Util吧。

RedisUtil

首先,我们还是要先做配置信息,前面已经在appsettings写过配置信息,这里直接在AprilConfig中添加上。

private static string _IsOpenCache = string.Empty;
///
/// 是否使用Redis
///
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;
///
/// Redis默认连接串
///
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;
///
/// 初始化Redis
///
public static void InitRedis(){
if (AprilConfig.IsOpenCache)
{
_redisCache = new RedisCache(GetOptions());
}
}
///
/// 获取配置项信息
///
///
protected static RedisCacheOptions GetOptions(){
options = new RedisCacheOptions();
options.Configuration = AprilConfig.RedisConnectionString;
options.InstanceName = "April.Redis";
return options;
}
///
/// 添加数据
///
/// 键
/// 值
/// 过期时间
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)
});
}
}
///
/// 获取数据(对象)
///
/// 对象类型
/// 键
///
public static T Get(string key)
{string value = Get(key);if (string.IsNullOrEmpty(value))
{return default(T);
}
T obj = default(T);try
{
obj = JsonConvert.DeserializeObject(value);
}catch (Exception ex)
{
LogUtil.Error($"Redis.Get转换失败:{ex.Message},数据:{value}");
}return obj;
}/// /// 移除数据////// 键public static void Remove(string key){if (!string.IsNullOrEmpty(key))
{
_redisCache.Remove(key);
}
}/// /// 重置数据/// /// 键/// 值/// 过期时间public static void Replace(string key, object value, int expireTime = 10){if (!string.IsNullOrEmpty(key))
{
Remove(key);
Add(key, value, expireTime);
}
}

具体使用的方法,这里不多写了代码地址:

https://github.com/AprilBlank/April.WebApi,感觉代码贴的多了,自己也习惯了复制粘贴,看一个封装好的方法,就要去看他的源码(如果只是用的话就算了),这样对方法的使用以及自身的业务需要封装会有很好的帮助,毕竟会用是第一步,会改是第二步,封装是第三步,自己写那就是最终级了(这句纯属自勉)。

测试

好了,写完之后,习惯来一遍测试,不想自己整理的东西最终还是不能用,千篇一律不可怕,可怕的是不知道最终的效果。

新增

a76286d8ad3511c339fa5fd8b6c0836d.png

d843f33df842bca539bd91760902e88a.png

获取

3ef368b2f335e5926b6df3ec3145ca24.png

0b18491eabc7b7497eca0427774eca36.png

覆盖

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

60680049d44b01e26329c96925c0dd1b.png

455aecaf2331c62cadd7ead2dc9f153e.png

删除

061888d19d1617f0e9b96ab7155fb05d.png

3fe3799fcee822c01103da1f33c2eeb5.png

小结

写到这里基本上都结束了,简单的说明了Redis的使用,后续还是会不断更新,比如那么多database,如果随意切换,redis存储之后会不会有什么其他问题等等,学以致用,用方知错,错而能改,改了就行。

推荐阅读

(点击标题可跳转阅读)

.NET高级特性-Emit类的定义

.NET Core迁移前的准备工作

ASP.NET Core gRPC使用Consul服务注册发现

看完本文有收获?请转发分享给更多人

关注「DotNet」加星标,提升.Net技能 

7c13986a19db1b9b96c6f987015e90ca.png

好文章,我在看❤️

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值