基于Redis技术的页面缓存研究

2021-06-29 08:14秦溧艾青
科技风 2021年12期
关键词:数据库

秦溧 艾青

摘要:随着互联网业务的逐渐扩大,用户对相同数据访问的相对集中,从而出现关系型数据库管理系统负担加重,数据库响应效率低下,浏览器上响应延迟等重大问题。基于此,提出采用Redis高性能分布式内存缓存服务器的这一技术,来解决因数据量过大导致页面响应延迟的问题。通过实验以及和传统关系型数据库对比的结果表明,利用缓存技术查找数据,可以在一定程度上减少对数据库的访问,同时加快Web等应用的响应速度,提高用户体验感。

关键词:Redis;Sql;缓存;数据库

中图分类号:TP311.5文献标识码:A

目前我们所设计的系统采用的是关系型数据库,将数据存储到该系统中,再通过服务器从中获取数据,并在浏览器上显示出来。但随着数据量逐渐增大,用户度对相同数据访问的集中,就会出现关系型数据库管理系统负担加重,数据库响应效率低下,浏览器上响应延迟等重大问题。特别是当我们在开发Web应用时,前端界面成为了不可获取的一部分,但是每次用户对我们的网页进行访问时,都要重新加载一次静态资源,从而加重服务器的负担,造成网上显示延迟等问题,在很大程度上影响了用户体验感。基于以上问题,本文结合Redis高性能分布式内存缓存服务器技术,对页面进行分布式管理。并通过实验和对比证实了利用缓存技术查找数据,可以在一定程度上减少对数据库的访问,同时加快Web等应用的响应速度,提高用户体验感。

1 Redis概述

1.1 Redis的特性

Redis是一个基于键值对的存储结构的系统,也是类属于NOSQL的一种,它可以利用多种不同的键值对数据类型来满足于不同的存储需求,Redis优势主要包括:

(1)性能高。由于Redis是NoSql数据库,Redis的所有操作都是直接操作于内存之中,它的运行速度相比较于MySQL这一类传统的关系型数据库,就好比是在内存中进行读写和在硬盘中进行读写的差距;

(2)可使用的数据类型非常丰富,Redis能够支持二进制的Hash,Set,String,List等数据类型的操作;

(3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行;

(4)丰富的特性,Redis还支持publish/subscribe,通知,key过期等等特性。基于上述优势,Redis技术最大的应用场景就是用来做缓存。缓存技术可以大大减轻服务器的压力,减少数据丢失,提高系统中数据的一致性和完整性。[1]

Redis对于不同的常见数据类型来说,指令既有相同的,也有针对不同数据类型的特殊指令。同时Redis具有Java版本客户端Jedis,Jedis拥有Java的主要特性之一多线程处理,通过线程来优化系统资源,通过线程操作Redis的数据,并根据实际情况对线程进行回收,极大的提高的Redis的使用效率。在提高数据获取速度时,我们需要用一些缓存技术,Redis的最大优势在于可将数据缓存到内存并能够分片存储,同时拥有很高的读写效率。[2]

在这个基础之上,Redis还可以使用各种不同方式的排序,以此来满足各种不同业务的需求,为了不影响查询数据的速度,数据一般都是先在内存中缓存下来,区别就是Redis会在经过一段周期后的将更新后的数据重新在磁盘中进行写入和覆盖,又或者会把进行修改的操作写入记录文件中,再将此文件追加到之前的記录文件中。前者为默认的RDB存储模式,所谓RDB,就是将数据写入到一个临时的文件。等到持久化结束之后,用这个临时文件,替换掉上次旧的持久化的文件,从而达到恢复数据的目的。优点,是只需要通过使用单独子进程来进行持久化操作,并不需要主进程进行任何的IO操作,从而保证了redis的高效性;缺点,RDB会间隔一段时间再进行持久化操作,如果在持久化期间,redis发生了故障,会出现数据的丢失情况,所以这种方式更适合对数据要求不严谨的时候。由于只需要对界面的数据进行缓存,所以本文采用RDB存储模式技术便可达到需求。

1.2 Redis存储机制

其存储机制默认设置为如果更改了一个Key,则间隔900秒之后进行一次持久化存储。如果更改了十个Key则300秒之后进行一次持久化存储,如果更改一万个Key则自修改之时起,一分钟之后进行一次持久化存储,持久化完成后,将临时文件替换掉旧的RDB。

使用RDB恢复数据也非常简单,实际上只需重启Redis服务即可完成。启动的时候,redis的sever会从dump.rdb文件中先同步数据,第二种方式是AOF,是将执行过的指令记录下来,数据恢复时,按照从前到后的顺序再将指令执行一遍从而实现数据的恢复。优点,可以保持更高的数据完整性。例如,如果设置追击File的时间是一秒,那么一旦Redis发生了故障,最多只会丢失那一秒的数据。且如果日志写入不够完整,支持通过RedisCheckAof来进行日志修复,Aof文件没备注right之前可以删除其中的某些指令。缺点,aof比rdb文件大,且恢复速度慢,因为它是以记录操作数据为主的。

此外,通信业务的数据大部分都是数字信息,如手机号码、imsi码等,采用az,AZ,09组成的62进制替代10进制可以大大的节约内存,手机号码可以从11位压缩到6位,imsi码可以从15位压缩到9位。由此可以进一步节约内存。[3]

redis的应用目前已经十分广泛,国内的淘宝,新浪,以及国外的GitHub等都在使用Redis的缓存服务。

当然,在使用Redis缓存技术之前,必须搭建分布式数据存储系统。为了进一步提高Redis的分布式数据存储的效率,必须同时要考虑到数据库的负载情况,因此在开发时还需要额外搭建另一个分布式存储系统。传统的关系型数据库采用中央处理器或者是内存的使用来进行代价的评估,但对于这种系统的存储方式和数据类型往往不是很全面。在实际运行的过程中,对多类资源数据进行实时的统计,当完成对执行处理任务的线程后,完成对永不服务的主线程的响应,再以此为基础,确定各个影响数据存储有效性的影响因素,实现对分布式数据的可靠性评测和存储。[4]

2 采用Redis进行页面缓存的设计方案,以及后台配置文件的编写

2.1 Redis解决页面缓存问题的方案设计

Redis作为一个NoSQL数据库,它的简单易用是它最主要的特点。它的本质其实是和布隆过滤器[5]类似,只是作为一个服务器和数据库之间的一个缓冲区,当用户要访问数据库时,先访问Redis,如果Redis中有所需要的数据,便直接取出,返回到服务器;如果没有,便去访问数据库,将数据库中的数据返回给服务器,同时将数据保存一份到Redis中,便于下次的取和用。

根据此特性,我可以解决页面缓存的问题。实际上,我们的前端界面的静态资源,对用户体验感影响最大的,便是我们界面上的图片信息,因为这是用户最容易注意到的,也是经常在改变的,所以我们需要将界面上的图片信息,缓存到我们的Redis数据库中。

由于Redis存储机制是以键值对的形式进行存储的,因此,我们只需要通过后端来实现,将图片的索引作为键,将图片的路径等信息以JSON的形式作为值缓存到Redis中,从而达到无需访问数据库,便可加载图片的目的。当然,如果我们后期需要对图片进行更新,用户也只需要重新加載一次页面便可更新Redis中的缓存信息。

2.2 Redis缓存技术设计流图

该图用于展示服务器在进行数据存取时和Redis以及数据库之间的交互流程,如图1所示,当服务器要获取相应的数据时,先从Redis中获取,如果命中,则直接返回给服务器;如果未命中,则再从数据库中获取,获取到数据后,返回给服务器,并更新Redis中的内容。

2.3 Redis配置文件信息

配置使用Redis所需要的相关信息,如图2所示:

(1)spring.redis.database:数据库索引,在使用Redis时,由于Redis有16个内置库,需要标明使用哪个数据库,默认是用的是下标为0的库,这里设置的是索引为1的库;

(2)spring.redis.host:Redis服务器地址,由于Redis是分布式的缓存数据库,所以需要单独部署到一台计算机上,这里部署到的是Linux虚拟机上,虚拟机的IP地址是:192.168.220.128,所以Redis的服务器地址是:192.168.220.128;

(3)spring.redis.port:Redis服务器连接端口,Redis的配置文件中,端口号默认配置为6379;

(4)spring.redis.password:Redis服务器连接密码,其实Redis默认连接是没有密码的,这里为了保险起见在Redis的配置文件中设置连接Redis的密码为:imooc;

(5)spring.redis.pool.maxactive:连接池最大连接数,这里可以设置同时访问Redis的连接数量,如果设置为负值则表示没有连接的限制;

(6)spring.redis.pool.maxwait:连接池最大阻塞等待时间,是指建立连接的最大等待时间,毫秒为单位,如果是负值,则表示永远等待;

(7)spring.redis.pool.maxidle:连接池最大空闲连接,如果超过最大空闲连接数,会将对象丢弃;

(8)spring.redis.pool.minidle:连接池最小空闲连接,如果小于最小空闲连接数,会创建新的连接对象,以此来保持空闲连接数量大于等于最小空闲连接数;

(9)spring.redis.timeout:连接超时时间。

3 实验结果及分析

本文通过采用RedisDesktopManager图形化Redis管理工具来对实验结果进行分析和研究。

如图3所示,在db0这个数据库中,有8个数据键,这8个数据键分别对应8种不同类别的图片资源信息,如表1所列:

这样,在获取value1所对应的值时,只需要在后端通过键shopcategorylist_allfirstlevel,便可直接在Redis中获取到值,而无需再次通过数据库进行查询操作,极大程度上改善了系统的效率。将不使用Redis的传统关系型数据库和采用Redis的数据库进行对比,会发现采用Redis有以下好处,如表2所列:

4 结语

基于Redis技术的分布式数据存储方法,可以解决因数据量逐渐增大,用户对相同数据访问的集中,而出现关系型数据库管理系统负担加重,数据库响应效率低下,浏览器上响应延迟等重大问题。本文通过实验以及对比证实了可以利用缓存技术查找数据,可以在一定程度上减少对数据库的访问,同时加快Web等应用的响应速度,提高用户体验感。

参考文献:

[1]宁方美,贺雪梅,牟晋娟.SpringBoot集成Redis缓存技术在企业一卡通系统中的应用[J].电子技术与软件工程,2019(24):133134.

[2]叶朋.网站访问性能优化的研究与实现[D].哈尔滨理工大学,2020.

[3]徐茂红,王飞,张明.基于大数据量的Redis技术应用与研究[J].信息技术与信息化,2019(11):228230.

[4]宋云奎,吴文鹏,赵磊,莫剑峰,黄俊涛.基于REDIS的分布式数据存储方法[J].计算机产品与流通,2020(08):106.

[5]王伟晨.基于布隆过滤器算法的数据检索误判率研究[J].计算机产品与流通,2020(03):260261.

基金项目:辽宁科技大学大学生创新创业训练计划资助项目(202010146482)辽宁科技大学优秀人才项目(2018RC05)

作者简介:秦溧(2000—),男,重庆荣昌人,本科在读生,软件工程专业。

*通讯作者:艾青(1980—),男,汉族,辽宁辽阳人,博士,副教授,硕士生导师,从事软件工程、机器学习、人工智能研究。

猜你喜欢
数据库
数据库
数据库
数据库
数据库
数据库
数据库