Redis应用(1)缓存(1.2)------Redis三种缓存问题

发布时间:2024年01月23日

一、 缓存穿透:
1、定义:

缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。所谓穿透,就是直接透过了redis,直接透到数据库

2、原因:

比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。

3、解决方法:
(1)缓存空对象:

对空值缓存:如果一个查询返回的数据为空(不管是数据是否不存在),我们仍然把这个空结果(null)进行缓存,设置空结果的过期时间会很短,最长不超过五分钟。之后再访问这个数据将会从缓存中获取,保护了后端数据源。

优点:实现简单,维护方便;

缺点:

  • 缓存需要更多的空间存储更多的键,因为这当中可能会有很多的空值的键;
  • 可能造成短期的不一致;即使对空值设置了过期时间,还是会存在缓存层和存储层的数据会有一段时间窗口的不一致,这对于需要保持一致性的业务会有影响。
(2)布隆过滤:

(布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的?二进制向量(位图)?和一系列随机映射函数(哈希函数)。将所有可能存在的数据哈希到一个足够大的bitmaps中,一定不存在的数据会被这个bitmaps拦截掉,从而避免了对底层存储系统的查询压力。布隆过滤器可以用于检索一个元素是否在一个集合中:

如果布隆过滤器判断存在,则放行【可能会误判】,后续过程跟普通查询redis过程是一样的;

不存在,则直接返回,不走redis

优点:内存占用较少,没有多余key;空间效率和查询时间都远远超过一般的算法;

缺点:实现复杂;一定的误识别率和删除困难。

还有一些其他解决方法,如:

(3)增强id的复杂度,避免被猜测id规律
(4)做好数据的基础格式校验
(5)加强用户权限校验
(6)做好热点参数的限流
文章来源:https://blog.csdn.net/w_t_y_y/article/details/135765948
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。