excel除法公式函数(excel表格常用公式大全)

excel除法公式函数(excel表格常用公式大全)

Redis缓存的工作机制

Redis具有高性能的数据存取特性,广泛的应用于缓存场景,在提升业务应用响应速度的同时,也避免了将数据查询的压力发送到了数据库。

缓存的特征

无论是计算机系统还是具体的应用,其架构都是分层的。系统中的不同层之间访问速度是不一样的,所以将一些经常被访问的数据放到缓存中就可以加快其访问速度。以计算机系统为例,下图展现了计算机系统中的三层存储结构以及其容量和访问性能。CPU、内存、磁盘的访问速度差别很大。如果每次CPU处理数据都要从磁盘中读取,那么磁盘就会拖累CPU的计算,影响整个计算机的运行速度。

计算机中默认有两种缓存:????CPU中的末级缓存,LLC,用于缓存内存中的数据从而避免每次从内存中读取数据;????内存中的缓存,page cache,用来缓存磁盘中的数据,避免每次从磁盘中读取数据。

从上图中可以看出,访问速度上来看:LLC>page cache>磁盘,从存储容量来看:磁盘>page cache>内存。所以可以得出缓存的两个特征:

特征一:在一个层次化系统中,缓存是一个快速的子系统,可以避免每次从慢速子系统中存取数据;

特征二:缓存系统的容量大小是小于后端慢速系统的,不可能将所有的数据都放在缓存中。因为缓存的容量是有限的,所以缓存中的数据需要按一定规则淘汰出去,写回后端系统,而新的数据又要从后端系统中读取进来,写入缓存。我们可以学习下缓存是如何处理请求的,当业务应用在访问Redis缓存中的数据时,数据不一定内存,因此其处理方式也是不同的。

Redis缓存处理请求

Redis用作缓存时,会把Redis部署在数据库的前端,当业务应用在访问数据时。先查询Redis中是否保存了相应的数据,然后在根据数据是否在缓存中分为以下两种情况:????缓存命中:Redis中有相应数据,直接读取Redis,性能非常快;????缓存缺失:Redis中没有相应的数据,一旦缓存缺失,为了让后续请求能够从缓存中读取数据,就需要把缺失的数据写入Redis中,即为缓存更新的过程;通常我们的应用是一个web应用,用户的请求发送到Tomcat,Tomcat负责处理业务逻辑,如果需要访问数据就需要从MySQL中读写数据。Redis在用作缓存时有三个基本操作:??应用读取数据时,需要先读取Redis;??发生缓存缺失时,需要先从数据库读取数据;??发生缓存缺失时,还需要更新缓存;

Redis作为旁路缓存

Redis是一个独立的系统软件,和业务应用程序是两个软件。在Redis部署完之后,如果程序中想要执行Redis缓存就需要增加相应的缓存操作代码,读取缓存、读取数据、更新缓存等操作都需要在应用程序中完成,所以称为旁路缓存。平时在开发程序时,我们是没有专门在代码中显式地创建LLC或page cache的实例的,也没有显式调用过它们的GET接口。这是因为,我们在构建计算机硬件系统时,已经把LLC和page cache放在了应用程序的数据访问路径上,应用程序访问数据时直接就能用上缓存。而使用Redis用作缓存时就需要增加三方面的代码:??应用程序读取数据时,需要调用Redis的GET操作接口进行查询;??缓存缺失,应用程序需要和数据库连接,从数据库中读取数据;??当缓存中的数据需要更新时,需要在应用程序中显式调用SET操作接口将更新的数据写入缓存;

Redis中缓存的类型

Redis缓存的两种类型:只读缓存和读写缓存。只读缓存能加速读请求,而读写缓存可以同时加速读写请求。只读缓存当Redis用作只读缓存时,应用要读取数据的话,会先调用Redis GET接口,查询数据是否存在。而所有的数据写请求,会直接发往后端的数据库,在数据库中增删改。对于删改的数据来说,如果Redis已经缓存了相应的数据,应用需要把这些缓存的数据删除,Redis中就没有这些数据了。

读写缓存对于读写缓存来说,除了读请求会发送到缓存进行处理(直接在缓存中查询数据是否存在),所有的写请求也会发送到缓存,在缓存中直接对数据进行增删改操作。此时,得益于Redis的高性能访问特性,数据的增删改操作可以在缓存中快速完成,处理结果也会快速返回给业务应用,这就可以提升业务应用的响应速度。所以根据业务应用对数据可靠性和缓存性能的不同要求,我们会有同步直写和异步写回两种策略。

Redis数据模型

Redis内部使用一个redisObject对象来标识所有的key和value数据,redisObject最主要的信息:??type代表一个value对象具体是何种数据类型??encoding是不同数据类型在Redis内部的存储方式比如——type=string代表value存储的是一个普通字符串,那么对应的encoding可以是raw或是int,如果是int则代表Redis内部是按数值类型存储和表示这个字符串。raw列为对象的编码方式??字符串可以被编码为raw(一般字符串)或Rint(为了节约内存,Redis会将字符串表示的64位有符号整数编码为整数来进行储存)??列表可以被编码为ziplist或linkedlist,ziplist是为节约大小较小的列表空间而作的特殊表示??集合可以被编码为intset或者hashtable,intset是只储存数字的小集合的特殊表示??hash表可以编码为zipmap或者hashtable,zipmap是小hash表的特殊表示??有序集合可以被编码为ziplist或者skiplist格式

应用场景

??计数器可以对 String 进行自增自减运算,从而实现计数器功能。Redis 这种内存型数据库的读写性能非常高,很适合存储频繁读写的计数量。??分布式ID生成利用自增特性,一次请求一个大一点的步长如 incr 2000 ,缓存在本地使用,用完再请求。??海量数据统计位图(bitmap):存储是否参过某次活动,是否已读谋篇文章,用户是否为会员, 日活统计。??会话缓存可以使用 Redis 来统一存储多台应用服务器的会话信息。当应用服务器不再存储用户的会话信息,也就不再具有状态,一个用户可以请求任意一个应用服务器,从而更容易实现高可用性以及可伸缩性。??排行榜sorted_set可以实现有序性操作,从而实现排行榜等功能。??延迟队列使用sorted_set,使用 【当前时间戳 需要延迟的时长】做score, 消息内容作为元素,调用zadd来生产消息,消费者使用zrangbyscore获取当前时间之前的数据做轮询处理。消费完再删除任务 rem key

B站上新

本周B站上新-Redis缓存实战讲解NoSql和Redis内存数据库的概念Redis的安装和应用场景使用介绍了Redis的五种数据类型并基于实际业务场景,在SSM和Springboot环境下应用Redis缓存课程内容实战性强,易于理解

直通B站

发表评论

登录后才能评论