http://mpvideo.qpic.cn/0bf26yaaiaaajuapxqc5gfpvb5wdat3aabaa.f10002.mp4?dis_k=b41...
我们在学习数据类型前先来看一个问题,为什么常用的数据类型是五种,而不是六种七种。这是因为Redis的开发人员从业务数据的特性和附加功能这两方面来考虑的。...下面我们来看一下为什么这两方面决定了常用类型的种类。...,会出现系统反应缓慢甚至系统无响应的情况; 运营平台监控到的突发高频访问数据,例如流量明星官宣恋情,各大社交平台都会突发对这些新闻的高频访问和搜索; 高频复杂的统计数据,例如直播平台,每个客户端都需要实时显示当前直播观看人数和实时弹幕...附加功能 附加功能也是造成Redis有5种常用数据类型的原因。附加功能往往并不是在业务系统设计之初就决定的,而是在业务系统数据和规模不断扩大的情况下出现的。...一般来说附加功能包含如下三个方面: 单服务器升级集群 Session管理 Token管理 总结 以上两个方面,以及这两个方面的多种因素造就了Redis中只有5种常用的类型。
1.ArrayList类 ArrayList类主要用于对一个数组中的元素进行各种处理。在ArrayList中主要使用Add、Remove、RemoveAt、Insert四个方法对栈进行操作。...Stack(堆栈)类主要实现了一个LIFO(Last In First Out,后进先出)的机制。...class StackTest { static void Main(string[] args) { //实例化Stack类的对象...Queue(队列)类主要实现了一个FIFO(First In First Out,先进先出)的机制。...5.SortedList类 SortedList类也是键/值对的集合,但与哈希表不同的是这些键/值对是按键排序,并可以按照键和索引访问。
我们这篇文章开始讲解list类型。 什么是list list是一个存储空间保存多个数据,底层使用双向链表存储结构实现的一种Redis数据类型,。...list类型一般用在存储多个数据,并需要对数据进入存储空间的顺序进行区分的情况下。list的存储方式是一个存储空间保存多个数据,且可以通过数据可体现出数据进入的顺序。...链表 链表的结构如下图所示 上图中的黄色部分是存储的数据,绿色部分是指向下一个数据存储位置的指针。...这种结构解决了前面我们提到的顺序表所遇到的问题,每次插入新数据时只需要将上一个数据的指针指向新插入数据的位置,并将下一个数据的位置写入到当前写入数据的指针中。...以lopo为例,当我们需要获取car中的第一个数据时,我们可以这么编写指令lpop car。 总结 这篇文章我们讲解了list类型和list的基本操作。
前面我们学习了数据类型中的string类型,一般来说我们在开发中常用的就是string类型,但是它并不是万能的,string类型存在一个问题,下面我们就通过这问题来引出我们的要学习的新类型hash类型。...存在的问题 对象类数据(例如User、Employee)的存储如果使用string类型存储的话,当出现频繁更新操作的情况下会显得笨重,而且多条数据聚合不方便(例如姓名、出生日期、地址如果要入局)。...hash类型 为什么会出现hash类型:因为要对一系列存储的数据进行编组,方便管理,比较典型的应用场景就是存储对象信息。...hash类型的存储结构:一个存储空间保存多个键值对数据,如下图所示: 什么是hash类型:底层使用hash表结构实现存储数据的类型 hash类型所作的存储优化: 当field数据量较少时,存储结构优化为数组结构...类型存储数据的存在的问题,以及hash类型的简介。
答案一: 最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String类为什么要设成...immutable类型?...,而是创建了一个新的String类“abc”,然后将新的实例的指向变量s。 ...事实上,这也是Java面试中的许多 "为什么" 的答案。 答案三:String类不可变性的好处 String是所有语言中最常用的一个类。...4.类加载器要用到字符串,不可变性提供了安全性,以便正确的类被加载。
这篇文章,我们开始学习set类型,学习set类型前我们先来看一下List类型有什么缺点。...List的缺点 当需要存储大量数据并且要提供高效率的查询时,List是无法完全实现的,这是因为list的存储结构是链表的形式,链表读取数据的效率是很低的,因此我们需要的存储结构就必须具备能够保存大量的数据...这时我们一定就想到了hash类型,但是hash类型只是基本符合要求,我们知道hash类型是以key-value的形式存储的,那么我们可以说key也是数据,因此我们可以将key作为value来存储,而原本的...value则设置为nil,这样我们就得到了本篇所讲的set类型,set类型是从hash类型言表而来的,因此set类型和hash类型具有相同的存储结果,但是数据仅存储在key(value)中。...它的存储结构如下图所示: Tip:set类型的值不允许重复 set类型基本操作 添加 假设我们有一个set类型的students集合,需要向里面添加一条或多条数据时,我们可以使用 sadd
本篇文章我们来讲一下string类型数据的扩展操作,我们先来看一下假设场景。...场景 在大型企业级应用中,分表操作是基本操作,也是常见操作,用多张表存储同类型的数据,那么这里就存在一个问题,主键必须唯一不能重复,虽然对于Oracle这种大型/超大型数据库来说都具有相关的机制,但是MySQL...如果应用的数据库是MySQL的话就很棘手,这时我们就可以使用Redis来解决。 Redis如何解决 Redis解决前述问题有两种方法:使用incr指令或使用decr指令。...string作为数值操作 对于string类型的数据作为数值进行操作需要注意以下三点: string在Redis内部存储默类型认就是一个字符串。...当遇到增减类操作时会转换成数值进行计算; Redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发对数据造成的影响; 如果按数值进行操作,那么原始数据在不能转换成数值或者超过了
上篇文章我们讲解了数据类型中的Hash类型的基本操作,那么本篇文章进一步来学习Hash类型。 扩展操作 在开发中我们会遇到需要获取存储在哈希表中的的所有字段名称或所有字段的值。...和string类型一样,hash类型也可以设置指定字段的数值数据增加指定范围的值。使用hincrby和hincrbyfloat就可以实现。...操作注意事项 hash类型下的value只能存储字符串,不允许存储其他类型的数据,不存在嵌套的现象,如果数据未获取到则返回nil; 每个hash可以存储 个键值对; hash类型十分贴近对象的数据存储形式...但hash并不是为存储大量对象而设计的,不可乱用与滥用,不可将hash作为对象列表使用,在Redis中专门的数据类型来存储列表类数据。...总结 本篇文章讲解了Hash类型的数据扩展操作,内容不多但很重要。
.NET/C# 判断某个类是否是泛型类型或泛型接口的子类型 2018-09-01 08:28 .NET 中提供了很多判断某个类型或实例是某个类的子类或某个接口的实现类的方法...本文将提供判断泛型接口实现或泛型类型子类的方法。...x.GetGenericTypeDefinition() : x)); } 而如果需要判断类型,那么就需要遍历此类的基类了: public static bool IsSubClassOfRawGeneric.../// /// 判断指定的类型 是否是指定泛型类型的子类型,或实现了指定泛型接口。...; if (isTheRawGenericType) return true; type = type.BaseType; } // 没有找到任何匹配的接口或类型
目录 存储结构 基本操作 总结 在开发中我们会遇到根据某个数值类型的字段对数据排序的要求,一般来说我们都会使用关系型数据库所提供的排序功能,但是如果数据量比较大的时候,我们就需要考虑使用Redis...对数据进行排序了,但是我们前面所学的数据类型并不支持排序功能,因此就需要一个新的可以支持排序的类型,这就是我们从这篇文章起要讲的 sorted_set类型。...存储结构 sorted_set类型的存储结构是在set类型的存储结构的基础上添加了一个可排序的字段score,它的存储结构如下图所示: 在这里面,score不是用来存储数据的,是用来排序的。...获取数据 获取数据的方式有两种,zrange指令和zrevrange指令,它们唯一的区别就是zrange是按照从小到大排序的,zrevrange是按照从大到小排序的,除此之外他俩的语法是相同的,我们就以...总结 本篇文章讲解了sorted_set类型的用法。
set类型在实际项目中实际场景很多,下面我们来一起看一下。 场景一 某新闻类APP为增加用户活跃度,决定要让对某些分类的信息产生兴趣,在这里我们可以使用Redis随机获取数据,那么我们该怎么做呢?...思路 思路如下: 系统分析各个分类的热点或者最新的信息,并组成set集合; 随机挑选其中的信息; 结合用户已关注的分类的热点信息,组合成全信息推给用户。...有两种解决方法: 使用srundmember 指令,这个指令会随机从set集合中获取指定数量的数据,语法是这样的srundmember key count,其中count指的是要获取的数据数量。...语法是这样的spop key count,例如要随机获取音乐分类中3条数据,指令这么编写spop music 3。 Tip:set类型的随机获取数据的方法,可以应用于推荐类信息的检索。...总结 本片文件简单的讲解了set类型随机获取数据的场景。
到这我们的Redis的数据类型就全部讲完了,那么我们这篇文章就来看两个综合案例吧。 案例一 我们互联网上会遇到很多只提供API接口不提供界面的网站,我们需要自己编写界面并调用API接口。...如果不超过次数的情况下,每次调用计数器加1,如果业务调用失败则计数器减1; 将计数器的生命周期设置为指定周期,比如每分钟10次,当到一分钟value设置为0。...上述方案转化为Redis命令如下: 使用 setex 指令,这时因为它可以指定key的生命周期,例如在第一次调用时,我们将生命周期时间设置为60秒setex uid123 60 1 后续调用的时先获取uid123...的值,get uid123; 如果不超过10次,那么就使用incr命令将value加1,incr uid123 如果超过10次,那么我们的程序代码就向调用方返回相应的提示; 当时间已经超过60秒后,再次调用时我们重新从第一步开始执行...Tip:Redis可应用于限时按次结算的服务控制。 案例二 待续。。。。 解决方案 待续。。。。 总结 本篇文章举例了Redis两个常见的使用场景。
Redis数据存储格式 Redis自身是一个Map,其中所有的数据都是采用key:value的形式存储的,并且 key的数据类型永远是字符串类型,我们所谓的Redis的存储类型指的是value的数据类型...string 数据类型的特点 string 数据类型具有三个独特的特点,存储的数据、存储数据的格式、存储的内容。...下面分别来说一说: 存储的数据:一个key对应一个value,是最简单的数据存储类型,也是最常用的数据存储类型; 存储数据的格式:一个存储空间保存一个数据; 存储的内容:通常使用字符串存储,如果字符串以整数的形式展示...基本操作 string string据类型常用的操作有三种:添加/修改数据、获取数据、删除数据。 添加/修改数据,分为单一的添加/修改和批量的添加/修改。...总结 本篇文章讲解了Redis数据存储格式、string数据类型的特点以及基本操作,这些知识都会用在平时的开发中。
这篇文章是List类型的最后一篇文章,我们来看看list类型的注意事项和常见业务场景。...操作注意事项 list类型的操作注意事项一般有如下四点: list类型中保存的数据都是string类型的,并且数据存储在大容量为232-1个元素; list虽然包含索引的概念,但是操作数据时通常是以队列的形式进行入队和出队操作...常见业务场景 list类型常见的业务场景有两种: 需按照时间顺序依次展示的场景,例如微信朋友圈点赞,微博关注的人列表和粉丝列表,需要按照时间顺序从最近到最远来展示,新闻类网站上的新闻按发生时间顺序由进及远展示...根据这个场景我们可以使用list类型来存储点赞的用户,以朋友圈信息的Id为key,点赞人的id为vuale,每增加一个点赞的人就调用 rpush 指令向value中增加一个数据。...Tip:Redis应用具有对操作先后顺序的数据控制,因此对朋友圈点赞排序适合使用list类型来存储数据。
这篇文章是string数据类型的最后一篇,我们来讲讲string类型数据的注意事项以及应用场景 注意事项 数据操作成功与否返回的信息和数据正常操作返回的信息之间的差异 表示运行结果是否成功:0表示false...即不成功,1表示true即成功 get 获取到的数值是存储在value中的值,0表示存储的值是0,1表示存储的值是1 当数据未获取到时返回 nil,nil等同于null 单个value数据存储最大量为512MB...数值计算最大范围9223372036854775807 应用场景 常用的场景是高频访问的信息,例如商品价格和微博的粉丝数和关注数,使用Redis可以这么解决。...在Redis中我们可以将key的格式设置为表:主键名:主键值:字段名的形式,例如存储商品的价格,我们可以这么处理set goods:goodsid:1234567:price 356.88,再比如存储微博的粉丝数我们可以这么处理...key设置的格式可以是表:主键名:主键值:字段名,其中字段名是value对应的在关系型数据库中的字段名。
DataAnnotations 提供了一组内置的验证特性,您可以以声明的方式,应用于任何类或属性。 更新Movie类,以利用内置的Required、 StringLength和Range验证属性。...Code First 确保您在模型类上所指定的验证规则,会在应用程序修改数据库之前执行。...,您不需要修改MoviesController类或Create.cshtml视图中的任何一行代码。...在本教程之前所生成的控制器和视图中,Movie模型类的属性上所指定的验证规则一样可以自动适用。...如何验证创建视图和创建方法 您可能很想知道验证用户界面在没有更新控制器或视图代码的情况下是如何生成的。下面列出了MovieController类中的Create方法。
,通过DbSet使实体类与数据库关联起来。...public class BookDbContext:DbContext { /// /// 表示用于运行创建、读取、更新和删除操作的类型化实体集...EF会检查当前的数据连接指定的数据库是否被创建,假设没有则有EF负责依据实体模型类创建数据库、数据表;假设存在,EF会将查询条件加入到Sql查询语句,再将Sql语句发送到数据库进行数据读取。...View(); } [HttpPost] public ActionResult Delete(int id, FormCollection c) //事实上这的...事实上也就是保证两个方法构成重载 { //Find()是返回满足条件的第一个元素,假设没有该元素,则返回null。
一、网站配置类(SiteConfig) 1、在Nninesky.Core项目新建文件夹Config 2、在Config文件夹添加类SiteConfig。...在类中声明一个配置元素的子元素 private static ConfigurationProperty _property,子元素的配置实体类型是KeyValueConfigurationCollection...二、设置配置文件的类型和路径 打开Nniesky.web项目的 web.config文件,找到configSections,然后添加SiteConfig配置节 ?...红框部分为添加类型,说明了配置节的名称和类型,注意红线部分,restartOnExternalChanges设为"false",如果不设置,配置文件修改后会重启网站。...在控制器中再添加一个[HttpPost]类型的SiteConfig方法。
我们不仅可以创建相应的模板来根据Model元数据控制种类型的数据在UI界面上的呈现方法,还可以通过一些扩展来控制Model元数据本身。...在一般的Web应用中,尤其是企业应用中,我们会选择将这些列表进行单独地维护,如果我们在构建“列表控件”的时候能够免去手工提供列表的工作,这无疑会为开发带来极大的遍历,而这实际上很容易实现。...在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中,我们定义一个作为Model表示员工的Employee类型。...Index操作对应的View定义,这是一个以Model类型为Employee的强类型View,我们通过调用HtmlHelper的模板方法EditorFor将作为Model的Employee...四、ListAttribute 现在我们来介绍应用在Employee属性上的四个特性的定义。如下面的代码片断所示,基于四种“列表控件”的特性均继承自抽象特性ListAttribute。
领取专属 10元无门槛券
手把手带您无忧上云