对Redis和Memcached的少数通晓,下载安装

2019-05-07 01:26 来源:未知

上一篇Redis的一系列已经讲了Redis的下载、安装,接下去那壹篇,重要讲使用Redis提供的 ServiceStack.Redis 那些开辟库在C#类型中作为缓存服务使用的2个轻松易行示例,废话不多话,直接上代码。

本文只讲有关于在Windows C#中使用Redis所须求选拔的能源,不涉及在C#中运用Redis的编制程序示例,全部进度本人把它分为四个步骤,并按题指标依次依次达成。

什么是Redis和Memcached###

一旦想做一名合格的技师缓存是离不开的,小编在经常的劳作中也运用过Redis和Memcached二种缓存,与其说缓存,Redis定位是NoSql的DB,而Memcached则是2个KV的DB。可是双方都能出任缓存的角色,大家实在应用也以那2者居多。

        private void TestRedis()
        {
            var Redis = new RedisClient("localhost"); //创建Redis实例(主机名根据项目的实际情况设置,可以使用配置文件的形式配置)

            var records = new List<TestInfo>();

            /*****操作泛型数据*******/
            if (Redis.Exists("TestInfos") <= 0) //判断某个缓存是否存在
            {
                //添加泛型集合数据
                Redis.Set("TestInfos", new List<TestInfo>()
                {
                    new TestInfo() { id = 1, name = "11" },
                    new TestInfo() { id = 2, name = "22" },
                    new TestInfo() { id = 3, name = "33" },
                    new TestInfo() { id = 4, name = "44" }
                });
                Redis.Expire("TestInfos", 60); //设置为一分钟过期
            }
            records = Redis.Get<List<TestInfo>>("TestInfos"); //获取Redis的缓存数据
            //Redis.Remove("TestInfos"); //删除一个缓存
            //records = Redis.Get<List<TestInfo>>("TestInfos"); //删除后尝试重新获取,结果为null(Redis中获取不存在的引用类型时返回null)
            /*****操作泛型数据*******/

            /*****链表操作*******/
            var testRedisList = Redis.As<TestInfo>();
            IRedisList<TestInfo> testData = testRedisList.Lists["testData"]; //指定一个链表
            Redis.Expire("testData", 60);  //设置为一分钟过期
            testData.AddRange(records); //添加数据
            testRedisList.Save(); //保存链表数据
            var testDataList = Redis.As<TestInfo>().Lists["testData"].ToList(); //获取链表数据
            /*****链表操作*******/

            /*****操作int类型数据*******/
            if (Redis.Exists("TestInt") <= 0) 
            {
                Redis.Set("TestInt", 11); //保存一个int类型的缓步数据
            }
            var recordStr = Redis.Get<int>("TestInt"); //获取数据
            Redis.Remove("TestInt"); //删除一个缓存
            var redisIntVal = Redis.Get<int>("TestInt"); //删除后尝试重新获取,结果为0(Redis中获取不存在的值类型时返回默认值)
            /*****操作int类型数据*******/
        }

1、下载并设置Redis服务

需求先下载Redis服务,并安装于操作系统中,安装步骤和设置任何的Windows程序同样,这里就不花多余的花篇幅讲了。依照本身操作系统下载适用的Redis服务版本(即Windows的3二或陆拾一位安装包)。下载并安装达成后,注意需要在Windows的劳动中运营Redis服务。

Redis服务下载地址: 跳转 到下载页面。

www.weide1946.com,哪些意况会用到###

用到缓存的场景方方面面,因为她俩的定点也不只是缓存,也能够用来狠抓在的多寡存款和储蓄。在骨子里的花费中,因为作业上的供给,贰者也都用过,上边是本人使用的处境。
1.行使Memcached存储邮件连接的加密串,用于举办邮箱验证
贰.应用Memcached存款和储蓄手提式有线电话机验证码,一些网页上加密用的key等
三.施用Redis做业务层的多少缓存,那样可以挡掉一部分伸手,制止请求打到DB,对DB变成影响。
肆.使用Redis做Session的贮存,对有个别用户的身价和气象进行校验。
5.施用Redis做一些企图数据,举例数据从Storm/斯Parker举行测算,对计量结果开始展览仓库储存,在呼吁时校验请求,屏蔽掉恶意的拜会,如:爬虫
由于作业的内需和API的便捷性,前面将Memcached换来了Redis,不是因为Memcached倒霉,是因为是在拒绝不了Redis方便的Api接口。

  

2、下载Redis的C#开发库

当真须求在C#项目中采纳Redis,实际上是选用一定的费用库来编制程序。Redis官方网址提供了多数有关C#客户端的开荒库。个中ServiceStack.Redis是比较盛行、相比较通用的,也正是说,实际上是行使ServiceStack.Redis那几个类库在档期的顺序中支出有关Redis的相干职能。这里只讲关于瑟维斯Stack.Redis的使用。

先是必要下载ServiceStack.Redis, 瑟维斯Stack.Redis在github的下载地址为: ,只怕间接从此处 跳转 到下载页面。

下载达成后,将以下几个类库引用到品种中

www.weide1946.com 1

以上是一种达成格局,但在类型支付中,有不小恐怕会并发集体成员下载引用的本子不同,导致别的的开拓人士运维项目出现非凡的情形,由此,不提出选用那种办法。在组织项目中,宇宙最强的IEDvisual studio已经有针对那种难题的化解方案了,小编想许三人一度猜到了,是的,没有错,使用NuGet安装ServiceStack.Redis。

先是,在vs打开项目。工具-NuGet 包管理器-程序包管理器调节台,在开荒的调整台北输入:Install-Package ServiceStack.Redis选取须要用到Redis的门类,然后按下回车键,那时候,vs就能活动下载并在档期的顺序中援引相关的开拓库,消除!

www.weide1946.com 2

www.weide1946.com 3

API的风骨和数据类型###

说道API,真心想嗤笑Memcached的API是在太屎了,大大下跌开拓成效。先前时代支付的时候是利用Memcached的,可是,中期小编决然换掉了选用Memcached的事务,因为代码可读性实在太低,反观Redis,提供了增进的接口和数据类型,基本能满意全数的采纳景况,同时帮忙SuB/Pub,扩充性很好。具体API和数据类型的分歧有上边几点:
一.Memcached的为主数据类型是String,而Redis除了String之外还支持List、Set、ZSet和Hash等数据类型。
2.API上Memcached只接济大旨的add del等,可是Redis针对分歧的数据结构提供了充分的API,也置于达成了有的行列、公布/订阅的API。

 

3、开发

能够参见下一篇的简要代码示例.

架构上的异议###

上边都以行使上的两样,上边看下架构上的两样,也多亏因为架构的不及,使得双方有同时设有的画龙点睛。
第三,Redis架构上运用单线程的方式,而Memcached选择的是多线程的。那是调节二者使用景况的关键因素。
一.从财富上讲,由于Redis是单线程方式,也便是说Redis只使用单核管理(for子进程这种操作例外),因为日前的CPU基本都是多核CPU,那么Redis不会和其它进度展开总计能源的抢掠,只怕说争抢的可能率相当低。对于一台机器上多少个Redis实例那如实是一件好事,我们同心同德,互不影响。不过Memcached差异,三四线程管理的情势,使得Memcached和其它的历程有恢宏的CPU争抢。那对品质是大大不利的。
二.从拍卖模型上讲,Redis因为是单线程处理形式,也就意味着须求确定保障管理速度丰硕快,技巧担保效能。那也和Redis的安排思想异途同归,Redis利用单线程的缘由正是,它感觉拍卖十三分的敏捷,单线程不用举办各个锁操作,纯内部存款和储蓄器的操作也能担保拍卖的速度能够保证。不过这么存在难题,那正是倘若操作的文本块比较大,那么前边的乞请可能会排队,那样就能够产生请求多量的超时。所以Redis比较符合管理速度相当慢,数据操作花费非常小的光景,而出于Memcached是三十二线程情势,所以,对于计算花费,和数目存取开销比不小的场地能够思虑选用Memcached。

总结###

对于API风格实在不友善的Memcached,笔者真是不可能忍受,以致于笔者把具有必要缓存的场合全都换到了Redis。那说不定也是自己个人的习于旧贯的挑选。综上可得,上面是本人对Redis和Memcached的一丝丝视角,招待争论指正。

版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:对Redis和Memcached的少数通晓,下载安装