• 公号-云原生程序员 置顶
    2019-10-21
    很实用,很赞

    作者回复: 谢谢~

    
     11
  • 小虎 置顶
    2019-10-24
    讲的很好,很透彻,实用。老师,那么这个过滤器在微服务环境下如何部署比较好?部署好了以后是否也可以起到防止洪水攻击带来的缓存穿透问题?

    作者回复: 以单独服务部署比较好,我之前团队曾经改了一下redis源码来实现这个功能,利用redis的存储机制

    
     4
  • 长期规划
    2019-10-26
    老师,为什么会出现大量查询未注册用户的情况呢?是系统被攻击了?

    作者回复: 可能存在扫描你的用户的爬虫请求

    
     8
  • QQ怪
    2019-10-21
    老师如何来监控缓存的命中率。

    作者回复: 一般缓存会有cache miss和cache hit的统计信息,也可以自己打印日志统计

    
     6
  • 小喵喵
    2019-10-21
    1.这两节都有提到分布式锁,请问下分布式锁和一般锁的有什么区别呢?
    2.缓存适合存放什么样子的数据呢?还是数据库里面的所有数据都可以放入缓存呢?
    谢谢

    作者回复: 1. 一般的锁是进程中的锁,可以同步一个进程中的多个线程;分布式锁可以同步多个进程
    2. 缓存适合放经常访问的热数据,不能放全量数据,而且也放不下

     1
     5
  • 方木木
    2019-10-27
    “即使使用 32 位的 Hash 算法,它的值空间长度是 2 的 32 次幂减一,约等于 42 亿,用来映射 20 亿的用户数据,碰撞几率依然有接近 50%。”这是怎么算出来的?
    
     4
  • 约书亚
    2019-10-21
    bloom filter这个用法会在各种文章教程中提出,但我一直有个疑问想求教一下:基于redis这种存储的bloom filter有没有成熟的方案?因为我觉得毕竟redis不是一种完全可靠的存储,一旦crash理论上有可能丢数据,在用户的那个案例中,一旦应该出现在bloom filter中的数据丢失了,就意味着永远也查不出这个用户来了。那是否我们还应该启动一个监控进程,一旦发现redis crash了,要重新构建bloom filter呢?
    回到思考题,我现在觉得文章中的三个方案都只能解决部分场景的问题,有时候需要配合使用。除此之外,合理的数据库连接池大小以及服务限流也能起到最后防线的作用吧?

    作者回复: bloom filter需要自研,可以基于redis持久化存储到硬盘上

    连接池应该解决不了问题,因为链接不是无限的;限流是有损的

     1
     4
  • Fourty Seven
    2019-11-12
    分布式锁的方案中,有问题吧?如果第二个线程发现有这个key说明有别的线程在加载数据,但是还没有加载完,这个时候读缓存是没有的。

    作者回复: 可以返回失败 不从数据库读取,或者重试

     1
     3
  • jc9090kkk
    2019-10-22
    布隆过滤器可以用在一些资讯app的新闻展示中,给用户推送新的资讯用来过滤掉那些用户已经浏览过的记录

    作者回复: 是的

    
     3
  • jun.hai
    2019-12-03
    老师您好,请教个问题,文中讲到的缓存穿透跟缓存雪崩是一个概念么?如果不是那缓存雪崩的解决方案是什么呢?谢谢

    作者回复: 穿透指的是缓存中没有数据,需要到数据库中去取;雪崩指的是一个缓存节点的故障导致全局故障,两者是不同的

    之前提的一致性hash中实现虚拟节点就是一种避免雪崩的方法

     1
     2
  • Luciano李鑫
    2019-11-15
    “即使使用 32 位的 Hash 算法,它的值空间长度是 2 的 32 次幂减一,约等于 42 亿,用来映射 20 亿的用户数据,碰撞几率依然有接近 50%“。这50%的碰撞率是怎么得到的
    
     2
  • 楼下小黑哥
    2019-10-23
    布隆过滤器单独部署服务,服务启动时需要初始化数据,将数据库中数据初始化到过滤器中。后续将布隆过滤器定期写到磁盘中,防止服务重启导致丢失。
    请教下老师,文中说的布隆过滤器是否如上上面说部署?

    作者回复: 是的

    
     2
  • Geek_810a90
    2019-12-10
    老师,还是有个疑惑 先查布隆过滤器存在,去查缓存,缓存中失效了或者是刚更新过数据删除了缓存,透过缓存查询数据库,在高并发的情况下,也还是会出现缓存穿透的吧

    作者回复: 是的,缓存穿透肯定会有,只是要尽量减少

    
     1
  • miracle
    2019-10-27
    如果设置缓存key值不过期,是否可以避免狗桩效应呢?
    想请教下唐老师 什么场景下不适用于设置不过期的情况,一般频繁更新的场景也不适用缓存吧

    作者回复: 一般不建议设置缓存不过期,原因有两方面,一方面是数据可能会有不一致,另一方面缓存的容量也会有限制

    
     1
  • longslee
    2019-10-21
    打卡。老师你好,请问文中介绍布隆过滤器,提到“使用多个 Hash 算法为元素计算出多个 Hash 值”,这句话怎样理解呢?如果同一个key采用多个Hash算法得出得Hash值基本不一样,那数组下标也不一样,这同一个key对应好几个下标,那跟别的key有大量冲突呀,这时该怎么判断呢。

    作者回复: 比如有三个算法算出三个值,那么必须三个值都一致才算是在集合中,只有两个值一致不算

     4
     1
  • 约书亚
    2019-10-21
    另外,之前研究bloom filter时发现了一种Cuckoo Filter,有更好的表现且支持删除比Countered Bloom Filter更优。但其实现代码还未经过时间考验,也许未来能取代bloom filter
     2
     1
  • 良记
    2019-10-21
    最后这个分布式锁并不是十分理解,如果在数据还没有被缓存到Redis的时候,其他请求查询到了“lock.1”,那么重新取数的时候是等待新数据缓存好了还是说直接拿到空值?

    作者回复: 拿到空值

    
     1
  • 飞翔
    2019-10-21
    如果布隆过滤器会将集合中的元素判定为不在集合中,那么我们就不们就不确定,被布隆过滤器判定为不在集合中的元素,是不是在集合中。这句话是不是写反了,应该是判定为在集合中,就不能确定到底在不在集合中,因为有hash碰撞的问题

    作者回复: 是的,是集合中的元素不一定在集合中。

    我的这句应该是一个假设,表示,如果布隆过滤器可以把不是集合中的元素判定为在集合中,也就是false negative,那么就不能减少缓存穿透了。正因为布隆过滤器是false positive,所以才可以减少缓存的穿透

    
     1
  • 张珂
    2020-01-21
    “你想,如果布隆过滤器会将集合中的元素判定为不在集合中,那么我们就不确定被布隆过滤器判定为不在集合中的元素是不是在集合中。假设在刚才的场景中,如果有大量查询未注册的用户信息的请求存在,那么这些请求到达布隆过滤器之后,即使布隆过滤器判断为不是注册用户,那么我们也不确定它是不是真的不是注册用户,那么就还是需要去数据库和缓存中查询,这就使布隆过滤器失去了价值。”

    老师,这里没看懂,是怎么证明布隆过滤器很适合缓存穿透的……

    作者回复: 是的,是可以解决缓存穿透的问题的

    
    
  • 王宝
    2020-01-15
    狗桩效应和缓存击穿是一个意思吧

    作者回复: 不是的,狗桩效应是文中特指的那种情况

    
    
我们在线,来聊聊吧