本公开涉及计算机,尤其涉及缓存防穿透方法、装置、电子设备及存储介质。
背景技术:
1、随着物联网的快速发展,各种用于实现设备之间、设备与上位机远程交互控制的云平台现已广泛应用。而为了提升性能,一般会在存储层和客户端之间添加一个缓存层。当客户端向后端发送请求的时候,可以先在缓存层查询,如果缓存层中存储有相应的数据,会直接返回,否则再去存储层查询,这样可以减轻存储层的压力。
2、相关技术中,为了防止恶意频繁的攻击,将缓存层中和存储层中均查询不到的数据对应的键值设置为空值,并保存相应的空键值对,这样可以防止带有恶意的用户频繁地用一个值来攻击数据库。但在面对大量攻击时,需要缓存大量不存在的空值键对,会浪费存储空间,使得相关技术中的缓存层防穿透效率较低。
技术实现思路
1、本公开提供了一种缓存防穿透方法、装置、电子设备及存储介质。
2、根据本公开的第一方面,提供了一种缓存防穿透方法,所述方法包括:
3、获取数据查询请求,所述查询请求用于查询目标设备;
4、检测缓存中是否存在与所述查询请求对应的查询结果;
5、在所述缓存中不存在与所述查询请求对应的查询结果时,在布隆过滤器中查询是否存储有所述目标设备的设备标识;
6、在所述布隆过滤器未存储有所述目标设备的设备标识时,生成查询异常的查询结果。
7、可选地,所述方法还包括:
8、在检测到针对所述目标设备的设备添加信息时,将所述目标设备的对应信息写入目标数据库;
9、并将所述目标设备的设备标识添加到布隆过滤器。
10、可选地,所述方法还包括:
11、监测所述目标数据库的日志变更状态;
12、基于所述日志变更状态,在所述目标数据库的日志发生变更时,确定检测到针对所述目标设备的设备添加信息。
13、可选地,所述方法还包括:
14、向目标中间件推送变更消息,所述变更消息携带所述目标设备的设备标识;
15、通过所述目标中间件获取所述设备标识,并将所述设备标识添加到所述布隆过滤器。
16、可选地,所述方法还包括:
17、在所述缓存中存在与所述查询请求对应的查询结果时,获取所述查询结果,并将所述查询结果返回。
18、可选地,所述方法还包括:
19、在所述布隆过滤器存储有所述目标设备的设备信息时,获取所述设备信息对应的目标数据库;
20、基于所述目标数据库获得所述设备标识对应的查询结果。
21、可选地,所述方法还包括:
22、在所述布隆过滤器未存储有所述目标设备的设备信息时,停止通过所述目标数据库查询所述设备标识对应的查询结果,并执行所述生成查询异常的查询结果的步骤。
23、根据本公开的第二方面,提供了一种缓存防穿透装置,所述装置包括:
24、查询请求获取模块,用于获取数据查询请求,所述查询请求用于查询目标设备;
25、检测模块,用于检测缓存中是否存在与所述查询请求对应的查询结果;
26、设备标识查询模块,用于在所述缓存中不存在与所述查询请求对应的查询结果时,在布隆过滤器中查询是否存储有所述目标设备的设备标识;
27、查询结果生成模块,用于在所述布隆过滤器未存储有所述目标设备的设备标识时,生成查询异常的查询结果。
28、可选地,所述装置还包括:
29、信息写入模块,用于在检测到针对所述目标设备的设备添加信息时,将所述目标设备的对应信息写入目标数据库;
30、设备表示添加模块,用于并将所述目标设备的设备标识添加到布隆过滤器。
31、可选地,所述装置还包括:
32、监测模块,用于监测所述目标数据库的日志变更状态;
33、信息确定模块,用于基于所述日志变更状态,在所述目标数据库的日志发生变更时,确定检测到针对所述目标设备的设备添加信息。
34、可选地,所述装置还包括:
35、消息推送模块,用于向目标中间件推送变更消息,所述变更消息携带所述目标设备的设备标识;
36、设备标识获取模块,用于通过所述目标中间件获取所述设备标识,并将所述设备标识添加到所述布隆过滤器。
37、可选地,所述装置还包括:
38、查询结果获取模块,用于在所述缓存中存在与所述查询请求对应的查询结果时,获取所述查询结果,并将所述查询结果返回。
39、可选地,所述装置还包括:
40、数据库获取模块,用于在所述布隆过滤器存储有所述目标设备的设备信息时,获取所述设备信息对应的目标数据库;
41、查询结果获得模块,用于基于所述目标数据库获得所述设备标识对应的查询结果。
42、可选地,所述装置还包括:
43、查询处理模块,用于在所述布隆过滤器未存储有所述目标设备的设备信息时,停止通过所述目标数据库查询所述设备标识对应的查询结果。
44、根据本公开的第三方面,提供了一种缓存防穿透系统,所述系统包括:redis客户端、目标组件、中间件、布隆过滤器和数据库;
45、所述redis客户端,用于将创建的目标设备对应的设备信息写入所述数据库;
46、所述数据库,用于存储所述目标设备的设备信息,并更新日志;
47、所述目标组件,用于监听所述目标数据库的日志变更状态,并在所述日志变更状态发生变更时,获取变更后的日志,以及向所述中间件发送所述变更后的日志;
48、所述中间件,用于接收所述变更后的日志,并获取所述变更后的日志中的设备标识,以及向所述布隆过滤器发送包含所述设备标识的消息;
49、所述redis客户端,还用于在接收到设备查询请求时,检测缓存中是否存在与所述查询请求对应的查询结果,并所述缓存中不存在与所述查询请求对应的查询结果时,在布隆过滤器中查询是否存储有对应设备的设备标识,在所述布隆过滤器未存储有对应设备的设备标识时,生成查询异常的查询结果。
50、根据本公开的第四方面,提供了一种电子设备。该电子设备包括:存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现如以上所述的方法。
51、根据本公开的第五方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现本公开的上述方法。
52、本公开实施例提供的缓存防穿透方法、装置、电子设备及存储介质,通过获取数据查询请求,检测缓存中是否存在与该查询请求对应的查询结果,并且在该缓存中不存在与查询请求对应的查询结果时,可以在布隆过滤器中查询是否存储有目标设备的设备标识。在布隆过滤器未存储有目标设备的设备标识时,生成查询异常的查询结果。这样在接收数据查询请求时,可以先在缓存中查询,如果存储中未查询到,可以在布隆过滤器中查询设备对应的设备标识是否存在,进而判断是否需要进一步到数据库中进行查询,可以有效防止数据防透传,提高数据查询效率的同时,还可以避免被恶意攻击的风险。