缓存技术在酒店门户网站中应用

2021-09-10 20:24张丹阳万安
科学与生活 2021年10期

张丹 阳万安

摘要: 在全球经济化的大形势下,酒店門户网站趋于国际化,网站实现了多语言,多汇率,各个国家的税率也存在差异,此时将缓存技术应用到酒店门户网站的订房系统中,可以极大的提高房型价格的查询效率.

关键词:缓存结束、Redis、酒店门户网站、多语言

1引言

应用中使用缓存技术,往往可以大大减少计算量,有效提升响应速度,让有限的资源服务更多的用户。但是,似乎还没有一种缓存方案可以满足所有的业务场景,我们需要根据自身的特殊场景和背景,选择最适合的缓存方案,尽量以最小的成本最快的效率达到最优的目的。本文根据酒店实际应用场景将从多个方面对缓存进行分析,以便选择出最优的缓存方案。

2缓存的理解

2.1 缓存的优点

总结来说,缓存在如下三个方面做了提升:

性能——将相应数据存储起来以避免数据的重复创建、处理和传输,可有效提高性能;稳定性——同一个应用中,缓存数据也能降低对数据库的访问次数,降低数据库的负担和提高数据库的服务能力;

可用性——有时,提供数据信息的服务可能会意外停止,缓存技术可以在一定时间内仍正常提供对最终用户的支持,提高了系统的可用性。

2.2 Redis简介

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件[1]。 它支持多种类型的数据结构,是一个高性能的 key-value 数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:

·Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

·Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。

·Redis支持数据的备份,即master-slave模式的数据备份。

3 Redis与MemoeryCache实际应用

3.1应用场景

对于全球化的大型酒店,由于地域不同,不同酒店之间的价格存在差异,同时不同地域之间的人访问同一酒店同一房型,同一房型按照配套存在不同的价格,如上图所示,由于地域不一致则展示的价格应按照当地汇率转换展示,这就需要进行大量地根据汇率计算不同的价格,如同一个位于北京的酒店,在某一时间段,世界各地的人通过访问酒店官网预订北京这家酒店的房间,那就需要进行几十次按照汇率进行价格的计算,与此同时,还需要根据访问网站的人是会员还是非会员展示不同的价格,以及原始价格等。如果大量的人访问这一酒店就会产生大量的数据访问及计算,而且中间还会涉及调用算税相关api,如果进入酒店的查看价格页面需要展示所有房型的价格,那页面将需要很长时间去计算各个房型不同的价格,势必导致页面加载缓慢。

3.2解决策略

1.首先对于酒店价格这些数据,价格在一天时间内变化频率不高,则不需要平凡更新缓存。

2.由于不同酒店在不同语言不同汇率下以及不同房型以及入住人数存在各种价格,非关系型数据库Redis的存储可以采用Key-value的方式存储,则我们可以按照价格体系的需求,将数据组合成方便查询的结构转换成json存储在redis中。

3.所以读写性能很好,可以达到10w/s的频率,有效减少了页面加载数据的时间。

同时采用MemeoryCache来缓存酒店的一些固定数据,如酒店code、折扣率等。

3.3具体实现思路

当一个用户在世界某地访问网站一个酒店查询价格,则需要根据用户选择语言及汇率展示价格,首先网站会默认从Redis缓存查询是否存在对应的价格,所存在则直接展示给用户,若对应语言下价格不存在,则需要按以下流程处理价格。

首先,从价格平台获取改酒店所有房型及各个价格组合的原始价格。

其次,循环各个价格组合,将原始价格根据汇率计算出会员价格,非会员价格,这两种价格中又包含总价、税、税前价,税后价。将计算出的价格存入对应的实体模型列表中。

最后,根据当前用户访问的酒店id,语言,优惠码,以及入住时间和人数组合成为key,上述步骤中的价格实体列表转换为json,存入对应的价格数据库。

那么如果其他用户选择同一语言下同一酒店访问价格查询页面的时候,就会直接从Redis缓存中获取计算后的价格,及时响应给页面,极大的提高了网页加载速度。

缓存过期策略方面,由于酒店价格变化并不是很频繁,所以网站价格缓存采用一个小时自动清空价格组合下对应语言的缓存,那当用户再次访问时,又重新计算后存入对应key中。

结束语

利用Redis来缓存价格,极大的提高了价格展示页面的加载速度,即使税率Api不响应,我们也可以获取缓存中的价格进行展示,所以通过这次实践,意识到为了解决很多实际应用,需要多种技术的组合,才能找出最优解。

参考文献:

[1]Josial L.Carison. Redis实战.北京:人民邮电出版社,2015:10.

[2]ROBERT C. MARTIN.敏捷软件开发[M].北京:机械工业出版社,2008:388.

[3] 李航 . 敏捷型软件开发方法与极限编程概述 [J]. 计算机工程与设计, 2003 ,24(10):116-118.

宜宾学院人工智能与大数据学部 644000