公开课--redis秒杀和公开锁----1

        本节课我看了2遍, 为什么看两遍呢? 将思想层面的比较多. 而不仅仅是技术. 其实, 技术是死的. 技术点就那么多. 思想是活的, 怎么想问题, 才是关键. 

现在不缺少会写代码的人,也就是执行层面的人. 缺少的是回想的人, 能解决办法的人. 只有突破了思想层面, 才有可能上升. 

        以前, 一门技术, 拿来就学, 学完就用, 可是, 很少思考为什么要用? 凭什么用这个不用那个? 这个技术是怎么好的, 好在哪里? 

以后, 要知道根源. 我用你, 那我要给出理由, 为什么用你. 如果不用, 也要给出原因, 为什么不用. 而不是盲目跟风. 大家都在用, 我也用.

学习技术, 要向上升华, 就要有思想. 

现在要思考的问题不是怎么用......而是, 为什么用?   


1. 存储的选型

2. 为什么会有redis?

3. redis秒杀可以做什么?

4. 分布式辩证锁


 

1. 存储的选型. 

  第一个问题: 解释了, 存储数据为什么会用List, 为什么会用hashtable. 而不是怎么用.

  假设, 有100个数据, 我要想存这100个数据, 怎么存呢? 最开始, 我们会把他存在数组里, 或者链表里. 

  公开课--redis秒杀和公开锁----1

 

  那么这个时候, 存上了, 不是目的, 肯定要用, 比如取数据, 假如我要从数组或者链表中取数据, 最大的复杂度是多少? 

  没错是o(n), 也就是说, 10个数据, 我要找的那个数据, 就要循环遍历, 最大的遍历次数就是在最后一个找到, 遍历10次, 那要是有100个数据呢, o(n)就是100,  10000个数据呢?o(n) 是10000

  数字越大, 那么取数据的速度, 就越慢. 性能就越低. 这样肯定不行. 

  于是, 我们就要想办法, 怎么才能更快速的取数据呢? 比如, 现在最大的遍历次数是o(10), 我能不能让他变成o(4)? 或者更小呢? 

  这就引入了分治的思想. 将这些数据分成4个片. 然后让数据的hashcode对4取模. 将数据让道对应的片里

  公开课--redis秒杀和公开锁----1

 

   假如,现在有4片, 那么随便一个数字2678/4取模后的结果, 隶属于哪一片, 那就放到那一片里. 存的时候这样存, 那么取的时候怎么取呢? 去的数据的hashcode值对4取模看看属于那一片,然后去那一片取出数据就ok了. 

  接下来, 那么如果数据量越来越大, 4片速度也很慢, 怎么办呢? 我们可以纵向扩展, 继续增加更多的片.

  其实, 这就是hashtable的思想. 也就是hashtable怎么来的? 他肯定是在链表或者数组处理数据的时候遇到了问题, 才引入的hashtable.

  下面来分析hashtable思想. 

 

  

  

  

 

上一篇:**HashMap与HashTable与ConcurrentHashMap**比较


下一篇:LeetCode.1 两数之和