net core WebApi——缓存神器Redis

  • 时间:
  • 浏览:49
  • 来源:大发快三_快三直播_大发快三直播

前言

中秋过完不知不觉都将会快两周没动你这名 工程了,最近业务都要总算刚开始英文英文了了搞后台云服务了,果断直接net core搞起,在做的底下遇到了不少什么的什么的问题,你这名 后续会越多点列出来包括处置最好的措施,今天就先把并且挖的坑填四个。

Redis

并且在缓存那篇提到过,CookieSessionCache这有多少不同的缓存最好的措施,Cookie是居于客户端浏览器的,Session实质上也是客户端的存储,至于Cache是服务端的,可是我将会是分布式说说,这有多少最好的措施将会除了Cookie越多四个都有有点什么的什么的问题,毕竟一台服务只存储自身一台,将会多台说说,都要涉及到多服务的交互,比如一台服务做了Cache存储,都要给越多服务发送内部信号或是http请求,越多服务根据请求执行对应操作。

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

Redis的安装和配置在Linux配置部署_新手向(四)——Redis安装与配置将会说过,当时可是我为了使用Redis而做了个小铺垫。

使用

首先,只可是我类库肯定是引入Nuget包了,大家在April.Util引入Microsoft.Extensions.Caching.Redis,当然越多都有StackExchange.RedisCSRedisCore,这里先试试官方的吧,官方扩展包地址。

引入完并且,大家在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存储并且会不让有那此越多什么的什么的问题等等,学以致用,用方知错,错而能改,改了就行

猜你喜欢

TechWeb.com.cn

10月15日上午消息,针对此次欠商家的货款问题 ,淘集集CEO张正平发布致歉信称,淘集集目前超过1.3亿注册用户,亏损实际上都亏损在获客上。“最近淘集集位于的事情,完整性都是

2019-10-15

政商界斥美損港利益 助長暴力

【大公報訊】針對美國國會參眾兩院外委會通過所謂「2019年香港人權與民主法案」,香港多個政團紛紛表示譴責,斥責美方此舉粗暴干涉香港事務,嚴重踐踏國際法和國際關係基本準則,不惜損

2019-10-14

江苏秀强玻璃工艺股份有限公司

秀强股份创建于10001年,是中国最大的加工玻璃制造商之一,公司于2011年1月13日在深圳证券交易所创业板成功上市(股票代码:100011000)。公司主要生产:触摸屏盖板玻

2019-10-14

创见 StoreJet移动硬盘系列(64G)评测,行情,最新资讯

关于当我们我们我们 都|广告服务|使用条款|联系当我们我们我们 都北京盛拓优讯信息技术有限公司.版权所有中华人民共和国增值电信业务经营许可证编号:京B2-20170206北

2019-10-14

三星GalaxyC7配置

关于三星GalaxyC7配置的文章最早的消息显示是,三星GalaxyC10随后首款采用双摄像头设计的三星手机,随后又有消息分别爆料GalaxyJ7(2017)以及GalaxyN

2019-10-14