Browse Source

Site updated: 2020-04-19 17:30:01

master
nicksxs 5 years ago
parent
commit
71f816215a
41 changed files with 763 additions and 721 deletions
  1. +3
    -3
      2014/12/24/MFC 模态对话框/index.html
  2. +7
    -7
      2014/12/30/Clone-Graph-Part-I/index.html
  3. +3
    -3
      2015/01/04/Path-Sum/index.html
  4. +2
    -2
      2015/01/14/Two-Sum/index.html
  5. +4
    -4
      2015/01/16/pcre-intro-and-a-simple-package/index.html
  6. +3
    -3
      2015/03/11/Number-Of-1-Bits/index.html
  7. +3
    -3
      2015/03/11/Reverse-Bits/index.html
  8. +3
    -3
      2015/03/13/Reverse-Integer/index.html
  9. +2
    -2
      2015/04/14/Add-Two-Number/index.html
  10. +2
    -2
      2015/04/15/Leetcode-No-3/index.html
  11. +3
    -3
      2015/06/22/invert-binary-tree/index.html
  12. +4
    -4
      2016/08/14/34-Search-for-a-Range/index.html
  13. +2
    -2
      2016/09/29/binary-watch/index.html
  14. +3
    -3
      2016/10/11/minimum-size-subarray-sum-209/index.html
  15. +3
    -3
      2016/10/12/summary-ranges-228/index.html
  16. +2
    -2
      2019/12/07/JVM-G1-Part-1/index.html
  17. +2
    -2
      2019/12/18/1Q84读后感/index.html
  18. +7
    -7
      2019/12/26/redis数据结构介绍/index.html
  19. +8
    -8
      2020/01/04/redis数据结构介绍二/index.html
  20. +8
    -8
      2020/01/10/redis数据结构介绍三/index.html
  21. +7
    -7
      2020/01/19/redis数据结构介绍四/index.html
  22. +5
    -5
      2020/01/20/redis数据结构介绍五/index.html
  23. +7
    -7
      2020/01/22/redis数据结构介绍六/index.html
  24. +2
    -2
      2020/02/09/G1收集器概述/index.html
  25. +2
    -2
      2020/04/05/Comparator使用小记/index.html
  26. +7
    -7
      2020/04/12/redis系列介绍七/index.html
  27. +22
    -15
      2020/04/18/redis系列介绍八/index.html
  28. +30
    -30
      atom.xml
  29. +15
    -15
      baidusitemap.xml
  30. +92
    -109
      categories/Java/index.html
  31. +102
    -70
      categories/docker/index.html
  32. +1
    -1
      css/main.css
  33. +21
    -14
      index.html
  34. +1
    -0
      leancloud.memo
  35. +1
    -1
      leancloud_counter_security_urls.json
  36. +28
    -28
      page/2/index.html
  37. +2
    -2
      page/3/index.html
  38. +5
    -5
      sitemap.xml
  39. +165
    -164
      tags/c/index.html
  40. +102
    -70
      tags/docker/index.html
  41. +72
    -93
      tags/java/index.html

+ 3
- 3
2014/12/24/MFC 模态对话框/index.html View File

@ -294,16 +294,16 @@
<div class="popular-posts-title"><a href="/2015/01/16/pcre-intro-and-a-simple-package/" rel="bookmark">pcre-intro-and-a-simple-package</a></div> <div class="popular-posts-title"><a href="/2015/01/16/pcre-intro-and-a-simple-package/" rel="bookmark">pcre-intro-and-a-simple-package</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
<div class="popular-posts-title"><a href="/2015/03/13/Reverse-Integer/" rel="bookmark">Reverse Integer</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div> <div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
</li> </li>
</ul> </ul>


+ 7
- 7
2014/12/30/Clone-Graph-Part-I/index.html View File

@ -35,8 +35,8 @@
<meta property="article:published_time" content="2014-12-30T08:50:01.000Z"> <meta property="article:published_time" content="2014-12-30T08:50:01.000Z">
<meta property="article:modified_time" content="2020-01-12T13:08:26.997Z"> <meta property="article:modified_time" content="2020-01-12T13:08:26.997Z">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
<meta property="article:tag" content="C++">
<meta property="article:tag" content="leetcode"> <meta property="article:tag" content="leetcode">
<meta property="article:tag" content="C++">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/2014/12/30/Clone-Graph-Part-I/"> <link rel="canonical" href="https://nicksxs.me/2014/12/30/Clone-Graph-Part-I/">
@ -293,19 +293,19 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/13/Reverse-Integer/" rel="bookmark">Reverse Integer</a></div>
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/02/09/G1收集器概述/" rel="bookmark">G1收集器概述</a></div>
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
</li> </li>
</ul> </ul>
@ -349,8 +349,8 @@
<footer class="post-footer"> <footer class="post-footer">
<div class="post-tags"> <div class="post-tags">
<a href="/tags/C/" rel="tag"># C++</a>
<a href="/tags/leetcode/" rel="tag"># leetcode</a> <a href="/tags/leetcode/" rel="tag"># leetcode</a>
<a href="/tags/C/" rel="tag"># C++</a>
</div> </div>


+ 3
- 3
2015/01/04/Path-Sum/index.html View File

@ -300,15 +300,15 @@
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
</li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div> <div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
</li> </li>
<li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>
</li>
</ul> </ul>
<div class="reward-container"> <div class="reward-container">


+ 2
- 2
2015/01/14/Two-Sum/index.html View File

@ -302,10 +302,10 @@
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 4
- 4
2015/01/16/pcre-intro-and-a-simple-package/index.html View File

@ -311,16 +311,16 @@
<div class="popular-posts-title"><a href="/2014/12/24/MFC 模态对话框/" rel="bookmark">MFC 模态对话框</a></div> <div class="popular-posts-title"><a href="/2014/12/24/MFC 模态对话框/" rel="bookmark">MFC 模态对话框</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/13/Reverse-Integer/" rel="bookmark">Reverse Integer</a></div>
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
</ul> </ul>


+ 3
- 3
2015/03/11/Number-Of-1-Bits/index.html View File

@ -292,16 +292,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>


+ 3
- 3
2015/03/11/Reverse-Bits/index.html View File

@ -293,16 +293,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 3
- 3
2015/03/13/Reverse-Integer/index.html View File

@ -296,16 +296,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 2
- 2
2015/04/14/Add-Two-Number/index.html View File

@ -296,13 +296,13 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 2
- 2
2015/04/15/Leetcode-No-3/index.html View File

@ -293,13 +293,13 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 3
- 3
2015/06/22/invert-binary-tree/index.html View File

@ -302,16 +302,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 4
- 4
2016/08/14/34-Search-for-a-Range/index.html View File

@ -297,16 +297,16 @@
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div> <div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/13/Reverse-Integer/" rel="bookmark">Reverse Integer</a></div>
<div class="popular-posts-title"><a href="/2015/03/11/Reverse-Bits/" rel="bookmark">Reverse Bits</a></div>
</li> </li>
</ul> </ul>


+ 2
- 2
2016/09/29/binary-watch/index.html View File

@ -308,10 +308,10 @@
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 3
- 3
2016/10/11/minimum-size-subarray-sum-209/index.html View File

@ -292,16 +292,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 3
- 3
2016/10/12/summary-ranges-228/index.html View File

@ -291,16 +291,16 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/09/29/binary-watch/" rel="bookmark">binary-watch</a></div>
<div class="popular-posts-title"><a href="/2015/01/14/Two-Sum/" rel="bookmark">two sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div> <div class="popular-posts-title"><a href="/2016/08/14/34-Search-for-a-Range/" rel="bookmark">34_Search_for_a_Range</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/14/Add-Two-Number/" rel="bookmark">add-two-number</a></div>
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/04/15/Leetcode-No-3/" rel="bookmark">leetcode no.3</a></div>
<div class="popular-posts-title"><a href="/2015/01/04/Path-Sum/" rel="bookmark">Path Sum</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div> <div class="popular-posts-title"><a href="/2015/03/11/Number-Of-1-Bits/" rel="bookmark">Number of 1 Bits</a></div>


+ 2
- 2
2019/12/07/JVM-G1-Part-1/index.html View File

@ -247,11 +247,11 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">


+ 2
- 2
2019/12/18/1Q84读后感/index.html View File

@ -241,11 +241,11 @@
</span> </span>
<span class="post-meta-item-text">In</span> <span class="post-meta-item-text">In</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/" itemprop="url" rel="index"><span itemprop="name">读后感</span></a>
<a href="/categories/%E7%94%9F%E6%B4%BB/" itemprop="url" rel="index"><span itemprop="name">生活</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/%E7%94%9F%E6%B4%BB/" itemprop="url" rel="index"><span itemprop="name">生活</span></a>
<a href="/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/" itemprop="url" rel="index"><span itemprop="name">读后感</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">


+ 7
- 7
2019/12/26/redis数据结构介绍/index.html View File

@ -256,19 +256,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -330,13 +330,13 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/04/12/redis系列介绍七/" rel="bookmark">redis系列介绍七-过期策略</a></div>
<div class="popular-posts-title"><a href="/2020/01/22/redis数据结构介绍六/" rel="bookmark">redis数据结构介绍六 快表</a></div>
</li> </li>
</ul> </ul>


+ 8
- 8
2020/01/04/redis数据结构介绍二/index.html View File

@ -255,19 +255,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -321,16 +321,16 @@
<div class="popular-posts-title"><a href="/2020/01/10/redis数据结构介绍三/" rel="bookmark">redis数据结构介绍三-第三部分 整数集合</a></div> <div class="popular-posts-title"><a href="/2020/01/10/redis数据结构介绍三/" rel="bookmark">redis数据结构介绍三-第三部分 整数集合</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/04/12/redis系列介绍七/" rel="bookmark">redis系列介绍七-过期策略</a></div>
<div class="popular-posts-title"><a href="/2020/01/22/redis数据结构介绍六/" rel="bookmark">redis数据结构介绍六 快表</a></div>
</li> </li>
</ul> </ul>


+ 8
- 8
2020/01/10/redis数据结构介绍三/index.html View File

@ -253,19 +253,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -322,16 +322,16 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/04/12/redis系列介绍七/" rel="bookmark">redis系列介绍七-过期策略</a></div>
<div class="popular-posts-title"><a href="/2020/01/22/redis数据结构介绍六/" rel="bookmark">redis数据结构介绍六 快表</a></div>
</li> </li>
</ul> </ul>


+ 7
- 7
2020/01/19/redis数据结构介绍四/index.html View File

@ -244,19 +244,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -320,13 +320,13 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/04/12/redis系列介绍七/" rel="bookmark">redis系列介绍七-过期策略</a></div>
<div class="popular-posts-title"><a href="/2020/01/22/redis数据结构介绍六/" rel="bookmark">redis数据结构介绍六 快表</a></div>
</li> </li>
</ul> </ul>


+ 5
- 5
2020/01/20/redis数据结构介绍五/index.html View File

@ -244,19 +244,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -324,7 +324,7 @@
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div> <div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/04/12/redis系列介绍七/" rel="bookmark">redis系列介绍七-过期策略</a></div>
<div class="popular-posts-title"><a href="/2020/01/22/redis数据结构介绍六/" rel="bookmark">redis数据结构介绍六 快表</a></div>
</li> </li>
</ul> </ul>


+ 7
- 7
2020/01/22/redis数据结构介绍六/index.html View File

@ -251,19 +251,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -339,13 +339,13 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
</ul> </ul>


+ 2
- 2
2020/02/09/G1收集器概述/index.html View File

@ -245,11 +245,11 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">


+ 2
- 2
2020/04/05/Comparator使用小记/index.html View File

@ -311,10 +311,10 @@
<div class="popular-posts-header">Related Posts</div> <div class="popular-posts-header">Related Posts</div>
<ul class="popular-posts"> <ul class="popular-posts">
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/02/09/G1收集器概述/" rel="bookmark">G1收集器概述</a></div>
<div class="popular-posts-title"><a href="/2020/02/16/Maven实用小技巧/" rel="bookmark">Maven实用小技巧</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/02/16/Maven实用小技巧/" rel="bookmark">Maven实用小技巧</a></div>
<div class="popular-posts-title"><a href="/2020/02/09/G1收集器概述/" rel="bookmark">G1收集器概述</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/07/JVM-G1-Part-1/" rel="bookmark">JVM源码分析之G1垃圾收集器分析一</a></div> <div class="popular-posts-title"><a href="/2019/12/07/JVM-G1-Part-1/" rel="bookmark">JVM源码分析之G1垃圾收集器分析一</a></div>


+ 7
- 7
2020/04/12/redis系列介绍七/index.html View File

@ -245,19 +245,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -319,13 +319,13 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
</ul> </ul>


+ 22
- 15
2020/04/18/redis系列介绍八/index.html View File

@ -35,7 +35,7 @@
<meta property="og:image" content="https://i.loli.net/2020/04/14/wWyhc2dQfb4BYsK.png"> <meta property="og:image" content="https://i.loli.net/2020/04/14/wWyhc2dQfb4BYsK.png">
<meta property="og:image" content="https://i.loli.net/2020/04/18/QwcROpB345ezEkX.png"> <meta property="og:image" content="https://i.loli.net/2020/04/18/QwcROpB345ezEkX.png">
<meta property="article:published_time" content="2020-04-18T15:23:41.000Z"> <meta property="article:published_time" content="2020-04-18T15:23:41.000Z">
<meta property="article:modified_time" content="2020-04-18T15:25:04.854Z">
<meta property="article:modified_time" content="2020-04-19T09:28:42.555Z">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
<meta property="article:tag" content="Redis"> <meta property="article:tag" content="Redis">
<meta property="article:tag" content="C语言"> <meta property="article:tag" content="C语言">
@ -236,10 +236,16 @@
<i class="far fa-calendar"></i> <i class="far fa-calendar"></i>
</span> </span>
<span class="post-meta-item-text">Posted on</span> <span class="post-meta-item-text">Posted on</span>
<time title="Created: 2020-04-18 23:23:41 / Modified: 23:25:04" itemprop="dateCreated datePublished" datetime="2020-04-18T23:23:41+08:00">2020-04-18</time>
<time title="Created: 2020-04-18 23:23:41" itemprop="dateCreated datePublished" datetime="2020-04-18T23:23:41+08:00">2020-04-18</time>
</span> </span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">Edited on</span>
<time title="Modified: 2020-04-19 17:28:42" itemprop="dateModified" datetime="2020-04-19T17:28:42+08:00">2020-04-19</time>
</span>
<span class="post-meta-item"> <span class="post-meta-item">
<span class="post-meta-item-icon"> <span class="post-meta-item-icon">
<i class="far fa-folder"></i> <i class="far fa-folder"></i>
@ -250,19 +256,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -319,15 +325,16 @@
<p>前16位字段是最后一次递减时间,因此Redis知道 上一次计数器递减,后8位是 计数器 counter。<br>LFU 的主体策略就是当这个 key 被访问的次数越多频率越高他就越容易被保留下来,并且是最近被访问的频率越高。这其实有两个事情要做,一个是在访问的时候增加计数值,在一定长时间不访问时进行衰减,所以这里用了两个值,前 16 位记录上一次衰减的时间,后 8 位记录具体的计数值。<br>Redis4.0之后为maxmemory_policy淘汰策略添加了两个LFU模式:</p> <p>前16位字段是最后一次递减时间,因此Redis知道 上一次计数器递减,后8位是 计数器 counter。<br>LFU 的主体策略就是当这个 key 被访问的次数越多频率越高他就越容易被保留下来,并且是最近被访问的频率越高。这其实有两个事情要做,一个是在访问的时候增加计数值,在一定长时间不访问时进行衰减,所以这里用了两个值,前 16 位记录上一次衰减的时间,后 8 位记录具体的计数值。<br>Redis4.0之后为maxmemory_policy淘汰策略添加了两个LFU模式:</p>
<p><code>volatile-lfu</code>:对有过期时间的key采用LFU淘汰策略<br><code>allkeys-lfu</code>:对全部key采用LFU淘汰策略<br>还有2个配置可以调整LFU算法: </p> <p><code>volatile-lfu</code>:对有过期时间的key采用LFU淘汰策略<br><code>allkeys-lfu</code>:对全部key采用LFU淘汰策略<br>还有2个配置可以调整LFU算法: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">lfu-log-factor 10</span><br><span class="line">lfu-decay-time 1</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line">&#96;lfu-log-factor&#96; 可以调整计数器counter的增长速度,lfu-log-factor越大,counter增长的越慢。</span><br><span class="line"></span><br><span class="line">&#96;lfu-decay-time&#96;是一个以分钟为单位的数值,可以调整counter的减少速度</span><br><span class="line">这里有个问题是 8 位大小够计么,访问一次加 1 的话的确不够,不过大神就是大神,才不会这么简单的加一。往下看代码</span><br><span class="line">&#96;&#96;&#96;C</span><br><span class="line">&#x2F;* Low level key lookup API, not actually called directly from commands</span><br><span class="line"> * implementations that should instead rely on lookupKeyRead(),</span><br><span class="line"> * lookupKeyWrite() and lookupKeyReadWithFlags(). *&#x2F;</span><br><span class="line">robj *lookupKey(redisDb *db, robj *key, int flags) &#123;</span><br><span class="line"> dictEntry *de &#x3D; dictFind(db-&gt;dict,key-&gt;ptr);</span><br><span class="line"> if (de) &#123;</span><br><span class="line"> robj *val &#x3D; dictGetVal(de);</span><br><span class="line"></span><br><span class="line"> &#x2F;* Update the access time for the ageing algorithm.</span><br><span class="line"> * Don&#39;t do it if we have a saving child, as this will trigger</span><br><span class="line"> * a copy on write madness. *&#x2F;</span><br><span class="line"> if (!hasActiveChildProcess() &amp;&amp; !(flags &amp; LOOKUP_NOTOUCH))&#123;</span><br><span class="line"> if (server.maxmemory_policy &amp; MAXMEMORY_FLAG_LFU) &#123;</span><br><span class="line"> &#x2F;&#x2F; 当淘汰策略是 LFU 时,就会调用这个updateLFU</span><br><span class="line"> updateLFU(val);</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> val-&gt;lru &#x3D; LRU_CLOCK();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> return val;</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> return NULL;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">lfu-log-factor 10</span><br><span class="line">lfu-decay-time 1</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line">&#96;lfu-log-factor&#96; 可以调整计数器counter的增长速度,lfu-log-factor越大,counter增长的越慢。</span><br><span class="line"></span><br><span class="line">&#96;lfu-decay-time&#96;是一个以分钟为单位的数值,可以调整counter的减少速度</span><br><span class="line">这里有个问题是 8 位大小够计么,访问一次加 1 的话的确不够,不过大神就是大神,才不会这么简单的加一。往下看代码</span><br><span class="line">&#96;&#96;&#96;C</span><br><span class="line">&#x2F;* Low level key lookup API, not actually called directly from commands</span><br><span class="line"> * implementations that should instead rely on lookupKeyRead(),</span><br><span class="line"> * lookupKeyWrite() and lookupKeyReadWithFlags(). *&#x2F;</span><br><span class="line">robj *lookupKey(redisDb *db, robj *key, int flags) &#123;</span><br><span class="line"> dictEntry *de &#x3D; dictFind(db-&gt;dict,key-&gt;ptr);</span><br><span class="line"> if (de) &#123;</span><br><span class="line"> robj *val &#x3D; dictGetVal(de);</span><br><span class="line"></span><br><span class="line"> &#x2F;* Update the access time for the ageing algorithm.</span><br><span class="line"> * Don&#39;t do it if we have a saving child, as this will trigger</span><br><span class="line"> * a copy on write madness. *&#x2F;</span><br><span class="line"> if (!hasActiveChildProcess() &amp;&amp; !(flags &amp; LOOKUP_NOTOUCH))&#123;</span><br><span class="line"> if (server.maxmemory_policy &amp; MAXMEMORY_FLAG_LFU) &#123;</span><br><span class="line"> &#x2F;&#x2F; 当淘汰策略是 LFU 时,就会调用这个updateLFU</span><br><span class="line"> updateLFU(val);</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> val-&gt;lru &#x3D; LRU_CLOCK();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> return val;</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> return NULL;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>updateLFU 这个其实个入口,调用了两个重要的方法</p>
<p><a href="https://github.com/antirez/redis/blob/unstable/src/db.c#L46" target="_blank" rel="noopener"><code>updateLFU</code></a> 这个其实个入口,调用了两个重要的方法</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Update LFU when an object is accessed.</span></span><br><span class="line"><span class="comment"> * Firstly, decrement the counter if the decrement time is reached.</span></span><br><span class="line"><span class="comment"> * Then logarithmically increment the counter, and update the access time. */</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">updateLFU</span><span class="params">(robj *val)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = LFUDecrAndReturn(val);</span><br><span class="line"> counter = LFULogIncr(counter);</span><br><span class="line"> val-&gt;lru = (LFUGetTimeInMinutes()&lt;&lt;<span class="number">8</span>) | counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Update LFU when an object is accessed.</span></span><br><span class="line"><span class="comment"> * Firstly, decrement the counter if the decrement time is reached.</span></span><br><span class="line"><span class="comment"> * Then logarithmically increment the counter, and update the access time. */</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">updateLFU</span><span class="params">(robj *val)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = LFUDecrAndReturn(val);</span><br><span class="line"> counter = LFULogIncr(counter);</span><br><span class="line"> val-&gt;lru = (LFUGetTimeInMinutes()&lt;&lt;<span class="number">8</span>) | counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>首先来看看<code>LFUDecrAndReturn</code>,这个方法的作用是根据上一次衰减时间和系统配置的 <code>lfu-decay-time</code> 参数来确定需要将 counter 减去多少</p>
<p>首先来看看<a href="https://github.com/antirez/redis/blob/unstable/src/evict.c#L335" target="_blank" rel="noopener"><code>LFUDecrAndReturn</code></a>,这个方法的作用是根据上一次衰减时间和系统配置的 <code>lfu-decay-time</code> 参数来确定需要将 counter 减去多少</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* If the object decrement time is reached decrement the LFU counter but</span></span><br><span class="line"><span class="comment"> * do not update LFU fields of the object, we update the access time</span></span><br><span class="line"><span class="comment"> * and counter in an explicit way when the object is really accessed.</span></span><br><span class="line"><span class="comment"> * And we will times halve the counter according to the times of</span></span><br><span class="line"><span class="comment"> * elapsed time than server.lfu_decay_time.</span></span><br><span class="line"><span class="comment"> * Return the object frequency counter.</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * This function is used in order to scan the dataset for the best object</span></span><br><span class="line"><span class="comment"> * to fit: as we check for the candidate, we incrementally decrement the</span></span><br><span class="line"><span class="comment"> * counter of the scanned objects if needed. */</span></span><br><span class="line"><span class="function"><span class="keyword">unsigned</span> <span class="keyword">long</span> <span class="title">LFUDecrAndReturn</span><span class="params">(robj *o)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 右移 8 位,拿到上次衰减时间</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> ldt = o-&gt;lru &gt;&gt; <span class="number">8</span>;</span><br><span class="line"> <span class="comment">// 对 255 做与操作,拿到 counter 值</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = o-&gt;lru &amp; <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 根据lfu_decay_time来算出过了多少个衰减周期</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> num_periods = server.lfu_decay_time ? LFUTimeElapsed(ldt) / server.lfu_decay_time : <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span> (num_periods)</span><br><span class="line"> counter = (num_periods &gt; counter) ? <span class="number">0</span> : counter - num_periods;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* If the object decrement time is reached decrement the LFU counter but</span></span><br><span class="line"><span class="comment"> * do not update LFU fields of the object, we update the access time</span></span><br><span class="line"><span class="comment"> * and counter in an explicit way when the object is really accessed.</span></span><br><span class="line"><span class="comment"> * And we will times halve the counter according to the times of</span></span><br><span class="line"><span class="comment"> * elapsed time than server.lfu_decay_time.</span></span><br><span class="line"><span class="comment"> * Return the object frequency counter.</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * This function is used in order to scan the dataset for the best object</span></span><br><span class="line"><span class="comment"> * to fit: as we check for the candidate, we incrementally decrement the</span></span><br><span class="line"><span class="comment"> * counter of the scanned objects if needed. */</span></span><br><span class="line"><span class="function"><span class="keyword">unsigned</span> <span class="keyword">long</span> <span class="title">LFUDecrAndReturn</span><span class="params">(robj *o)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 右移 8 位,拿到上次衰减时间</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> ldt = o-&gt;lru &gt;&gt; <span class="number">8</span>;</span><br><span class="line"> <span class="comment">// 对 255 做与操作,拿到 counter 值</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = o-&gt;lru &amp; <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 根据lfu_decay_time来算出过了多少个衰减周期</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> num_periods = server.lfu_decay_time ? LFUTimeElapsed(ldt) / server.lfu_decay_time : <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span> (num_periods)</span><br><span class="line"> counter = (num_periods &gt; counter) ? <span class="number">0</span> : counter - num_periods;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>然后是加</p>
<p>然后是加,调用了<a href="https://github.com/antirez/redis/blob/unstable/src/evict.c#L315" target="_blank" rel="noopener"><code>LFULogIncr</code></a></p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Logarithmically increment a counter. The greater is the current counter value</span></span><br><span class="line"><span class="comment"> * the less likely is that it gets really implemented. Saturate it at 255. */</span></span><br><span class="line"><span class="function"><span class="keyword">uint8_t</span> <span class="title">LFULogIncr</span><span class="params">(<span class="keyword">uint8_t</span> counter)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 最大值就是 255,到顶了就不加了</span></span><br><span class="line"> <span class="keyword">if</span> (counter == <span class="number">255</span>) <span class="keyword">return</span> <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 生成个随机小数</span></span><br><span class="line"> <span class="keyword">double</span> r = (<span class="keyword">double</span>)rand()/RAND_MAX;</span><br><span class="line"> <span class="comment">// 减去个基础值,LFU_INIT_VAL = 5,防止刚进来就被逐出</span></span><br><span class="line"> <span class="keyword">double</span> baseval = counter - LFU_INIT_VAL;</span><br><span class="line"> <span class="comment">// 如果是小于 0,</span></span><br><span class="line"> <span class="keyword">if</span> (baseval &lt; <span class="number">0</span>) baseval = <span class="number">0</span>;</span><br><span class="line"> <span class="comment">// 如果 baseval 是 0,那么 p 就是 1了,后面 counter 直接加一,如果不是的话,得看系统参数lfu_log_factor,这个越大,除出来的 p 越小,那么 counter++的可能性也越小,这样子就把前面的疑问给解决了,不是直接+1 的</span></span><br><span class="line"> <span class="keyword">double</span> p = <span class="number">1.0</span>/(baseval*server.lfu_log_factor+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span> (r &lt; p) counter++;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Logarithmically increment a counter. The greater is the current counter value</span></span><br><span class="line"><span class="comment"> * the less likely is that it gets really implemented. Saturate it at 255. */</span></span><br><span class="line"><span class="function"><span class="keyword">uint8_t</span> <span class="title">LFULogIncr</span><span class="params">(<span class="keyword">uint8_t</span> counter)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 最大值就是 255,到顶了就不加了</span></span><br><span class="line"> <span class="keyword">if</span> (counter == <span class="number">255</span>) <span class="keyword">return</span> <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 生成个随机小数</span></span><br><span class="line"> <span class="keyword">double</span> r = (<span class="keyword">double</span>)rand()/RAND_MAX;</span><br><span class="line"> <span class="comment">// 减去个基础值,LFU_INIT_VAL = 5,防止刚进来就被逐出</span></span><br><span class="line"> <span class="keyword">double</span> baseval = counter - LFU_INIT_VAL;</span><br><span class="line"> <span class="comment">// 如果是小于 0,</span></span><br><span class="line"> <span class="keyword">if</span> (baseval &lt; <span class="number">0</span>) baseval = <span class="number">0</span>;</span><br><span class="line"> <span class="comment">// 如果 baseval 是 0,那么 p 就是 1了,后面 counter 直接加一,如果不是的话,得看系统参数lfu_log_factor,这个越大,除出来的 p 越小,那么 counter++的可能性也越小,这样子就把前面的疑问给解决了,不是直接+1 的</span></span><br><span class="line"> <span class="keyword">double</span> p = <span class="number">1.0</span>/(baseval*server.lfu_log_factor+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span> (r &lt; p) counter++;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>大概的变化速度可以参考</p> <p>大概的变化速度可以参考</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 0 | 104 | 255 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 1 | 18 | 49 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 10 | 10 | 18 | 142 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 100 | 8 | 11 | 49 | 143 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br></pre></td></tr></table></figure> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 0 | 104 | 255 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 1 | 18 | 49 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 10 | 10 | 18 | 142 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 100 | 8 | 11 | 49 | 143 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br></pre></td></tr></table></figure>
<p>factor 越大变化的越慢</p>
<p>简而言之就是 lfu_log_factor 越大变化的越慢</p>
<h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>总结一下,redis 实现了近似的 lru 淘汰策略,通过增加了淘汰 key 的池子(pool),并且增大每次抽样的 key 的数量来将淘汰效果更进一步地接近于 lru,这是 lru 策略,但是对于前面举的一个例子,其实 lru 并不能保证 key 的淘汰就如我们预期,所以在后期又引入了 lfu 的策略,lfu的策略比较巧妙,复用了 redis 对象的 lru 字段,并且使用了factor 参数来控制计数器递增的速度,防止 8 位的计数器太早溢出。</p>
</div> </div>
@ -344,13 +351,13 @@
<div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div> <div class="popular-posts-title"><a href="/2020/01/04/redis数据结构介绍二/" rel="bookmark">redis数据结构介绍二-第二部分 跳表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
<div class="popular-posts-title"><a href="/2020/01/19/redis数据结构介绍四/" rel="bookmark">redis数据结构介绍四-第四部分 压缩表</a></div>
</li> </li>
<li class="popular-posts-item"> <li class="popular-posts-item">
<div class="popular-posts-title"><a href="/2020/01/20/redis数据结构介绍五/" rel="bookmark">redis数据结构介绍五-第五部分 对象</a></div>
<div class="popular-posts-title"><a href="/2019/12/26/redis数据结构介绍/" rel="bookmark">redis数据结构介绍-第一部分 SDS,链表,字典</a></div>
</li> </li>
</ul> </ul>
@ -474,7 +481,7 @@
<!--noindex--> <!--noindex-->
<div class="post-toc-wrap sidebar-panel"> <div class="post-toc-wrap sidebar-panel">
<div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-3"><a class="nav-link" href="#LRU"><span class="nav-number">1.</span> <span class="nav-text">LRU</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#LFU"><span class="nav-number">2.</span> <span class="nav-text">LFU</span></a></li></ol></div>
<div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-3"><a class="nav-link" href="#LRU"><span class="nav-number">1.</span> <span class="nav-text">LRU</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#LFU"><span class="nav-number">2.</span> <span class="nav-text">LFU</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#总结"><span class="nav-number">3.</span> <span class="nav-text">总结</span></a></li></ol></div>
</div> </div>
<!--/noindex--> <!--/noindex-->


+ 30
- 30
atom.xml View File

@ -6,7 +6,7 @@
<link href="/atom.xml" rel="self"/> <link href="/atom.xml" rel="self"/>
<link href="https://nicksxs.me/"/> <link href="https://nicksxs.me/"/>
<updated>2020-04-18T15:25:04.854Z</updated>
<updated>2020-04-19T09:28:42.555Z</updated>
<id>https://nicksxs.me/</id> <id>https://nicksxs.me/</id>
<author> <author>
@ -21,7 +21,7 @@
<link href="https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/"/> <link href="https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/"/>
<id>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</id> <id>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</id>
<published>2020-04-18T15:23:41.000Z</published> <published>2020-04-18T15:23:41.000Z</published>
<updated>2020-04-18T15:25:04.854Z</updated>
<updated>2020-04-19T09:28:42.555Z</updated>
<summary type="html"> <summary type="html">
@ -38,14 +38,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -77,14 +77,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -397,10 +397,10 @@
<category term="Java" scheme="https://nicksxs.me/categories/Java/"/> <category term="Java" scheme="https://nicksxs.me/categories/Java/"/>
<category term="JVM" scheme="https://nicksxs.me/categories/Java/JVM/"/>
<category term="C++" scheme="https://nicksxs.me/categories/C/"/> <category term="C++" scheme="https://nicksxs.me/categories/C/"/>
<category term="JVM" scheme="https://nicksxs.me/categories/Java/JVM/"/>
<category term="GC" scheme="https://nicksxs.me/categories/Java/GC/"/> <category term="GC" scheme="https://nicksxs.me/categories/Java/GC/"/>
@ -476,14 +476,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -515,14 +515,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -554,14 +554,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -594,14 +594,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -633,14 +633,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -672,14 +672,14 @@
<category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/Redis/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="C" scheme="https://nicksxs.me/categories/C/"/> <category term="C" scheme="https://nicksxs.me/categories/C/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="数据结构" scheme="https://nicksxs.me/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
<category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/> <category term="Redis" scheme="https://nicksxs.me/categories/C/Redis/"/>
<category term="源码" scheme="https://nicksxs.me/categories/Redis/%E6%BA%90%E7%A0%81/"/>
<category term="redis" scheme="https://nicksxs.me/tags/redis/"/> <category term="redis" scheme="https://nicksxs.me/tags/redis/"/>
@ -746,10 +746,10 @@
</summary> </summary>
<category term="读后感" scheme="https://nicksxs.me/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/"/>
<category term="生活" scheme="https://nicksxs.me/categories/%E7%94%9F%E6%B4%BB/"/> <category term="生活" scheme="https://nicksxs.me/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="读后感" scheme="https://nicksxs.me/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/"/>
<category term="村上春树" scheme="https://nicksxs.me/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/%E6%9D%91%E4%B8%8A%E6%98%A5%E6%A0%91/"/> <category term="村上春树" scheme="https://nicksxs.me/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/%E6%9D%91%E4%B8%8A%E6%98%A5%E6%A0%91/"/>


+ 15
- 15
baidusitemap.xml View File

@ -2,7 +2,7 @@
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> <url>
<loc>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</loc> <loc>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</loc>
<lastmod>2020-04-18</lastmod>
<lastmod>2020-04-19</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2020/04/12/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E4%B8%83/</loc> <loc>https://nicksxs.me/2020/04/12/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E4%B8%83/</loc>
<lastmod>2020-04-12</lastmod> <lastmod>2020-04-12</lastmod>
@ -45,39 +45,39 @@
</url> <url> </url> <url>
<loc>https://nicksxs.me/2020/01/19/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E5%9B%9B/</loc> <loc>https://nicksxs.me/2020/01/19/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E5%9B%9B/</loc>
<lastmod>2020-01-18</lastmod> <lastmod>2020-01-18</lastmod>
</url> <url>
<loc>https://nicksxs.me/2019/12/10/Redis-Part-1/</loc>
<lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/01/14/Two-Sum/</loc> <loc>https://nicksxs.me/2015/01/14/Two-Sum/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2016/09/29/binary-watch/</loc>
<loc>https://nicksxs.me/2019/12/10/Redis-Part-1/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2016/11/10/php-abstract-class-and-interface/</loc> <loc>https://nicksxs.me/2016/11/10/php-abstract-class-and-interface/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2019/12/26/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D/</loc>
<loc>https://nicksxs.me/2016/09/29/binary-watch/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/03/13/Reverse-Integer/</loc>
<loc>https://nicksxs.me/2019/12/26/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/04/14/Add-Two-Number/</loc> <loc>https://nicksxs.me/2015/04/14/Add-Two-Number/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2014/12/24/MFC%20%E6%A8%A1%E6%80%81%E5%AF%B9%E8%AF%9D%E6%A1%86/</loc>
<loc>https://nicksxs.me/2015/03/13/Reverse-Integer/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2016/08/14/docker-mysql-cluster/</loc> <loc>https://nicksxs.me/2016/08/14/docker-mysql-cluster/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2019/06/18/openresty/</loc>
<loc>https://nicksxs.me/2014/12/24/MFC%20%E6%A8%A1%E6%80%81%E5%AF%B9%E8%AF%9D%E6%A1%86/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2017/05/09/ambari-summary/</loc> <loc>https://nicksxs.me/2017/05/09/ambari-summary/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url>
<loc>https://nicksxs.me/2019/06/18/openresty/</loc>
<lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2020/01/04/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E4%BA%8C/</loc> <loc>https://nicksxs.me/2020/01/04/redis%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%BB%8B%E7%BB%8D%E4%BA%8C/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
@ -105,27 +105,27 @@
</url> <url> </url> <url>
<loc>https://nicksxs.me/2016/07/13/swoole-websocket-test/</loc> <loc>https://nicksxs.me/2016/07/13/swoole-websocket-test/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url>
<loc>https://nicksxs.me/2016/10/12/summary-ranges-228/</loc>
<lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/06/22/invert-binary-tree/</loc> <loc>https://nicksxs.me/2015/06/22/invert-binary-tree/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2017/04/25/rabbitmq-tips/</loc>
<loc>https://nicksxs.me/2016/10/12/summary-ranges-228/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/01/04/Path-Sum/</loc> <loc>https://nicksxs.me/2015/01/04/Path-Sum/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/03/11/Number-Of-1-Bits/</loc>
<loc>https://nicksxs.me/2017/04/25/rabbitmq-tips/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/04/15/Leetcode-No-3/</loc>
<loc>https://nicksxs.me/2015/03/11/Number-Of-1-Bits/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2019/09/23/AbstractQueuedSynchronizer/</loc> <loc>https://nicksxs.me/2019/09/23/AbstractQueuedSynchronizer/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>
</url> <url>
<loc>https://nicksxs.me/2015/04/15/Leetcode-No-3/</loc>
<lastmod>2020-01-12</lastmod>
</url> <url> </url> <url>
<loc>https://nicksxs.me/2015/01/16/pcre-intro-and-a-simple-package/</loc> <loc>https://nicksxs.me/2015/01/16/pcre-intro-and-a-simple-package/</loc>
<lastmod>2020-01-12</lastmod> <lastmod>2020-01-12</lastmod>


+ 92
- 109
categories/Java/index.html View File

@ -29,7 +29,7 @@
<meta name="description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta name="description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:title" content="Nicksxs&#39;s Blog"> <meta property="og:title" content="Nicksxs&#39;s Blog">
<meta property="og:url" content="https://nicksxs.me/categories/java/index.html">
<meta property="og:url" content="https://nicksxs.me/categories/Java/index.html">
<meta property="og:site_name" content="Nicksxs&#39;s Blog"> <meta property="og:site_name" content="Nicksxs&#39;s Blog">
<meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
@ -40,7 +40,7 @@
<meta property="article:tag" content="森哥"> <meta property="article:tag" content="森哥">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/categories/java/">
<link rel="canonical" href="https://nicksxs.me/categories/Java/">
<script id="page-configurations"> <script id="page-configurations">
@ -53,7 +53,7 @@
}; };
</script> </script>
<title>Category: java | Nicksxs's Blog</title>
<title>Category: Java | Nicksxs's Blog</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script>
<script> <script>
@ -207,12 +207,75 @@
<div class="post-block"> <div class="post-block">
<div class="posts-collapse"> <div class="posts-collapse">
<div class="collection-title"> <div class="collection-title">
<h2 class="collection-header">java
<h2 class="collection-header">Java
<small>Category</small> <small>Category</small>
</h2> </h2>
</div> </div>
<div class="collection-year">
<span class="collection-header">2020</span>
</div>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-04-05T21:41:41+08:00"
content="2020-04-05">
04-05
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/04/05/Comparator%E4%BD%BF%E7%94%A8%E5%B0%8F%E8%AE%B0/" itemprop="url">
<span itemprop="name">Comparator使用小记</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-02-16T10:39:42+08:00"
content="2020-02-16">
02-16
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/02/16/Maven%E5%AE%9E%E7%94%A8%E5%B0%8F%E6%8A%80%E5%B7%A7/" itemprop="url">
<span itemprop="name">Maven实用小技巧</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-02-09T20:52:02+08:00"
content="2020-02-09">
02-09
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/02/09/G1%E6%94%B6%E9%9B%86%E5%99%A8%E6%A6%82%E8%BF%B0/" itemprop="url">
<span itemprop="name">G1收集器概述</span>
</a>
</div>
</header>
</article>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2019</span> <span class="collection-header">2019</span>
</div> </div>
@ -222,15 +285,35 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2019-09-23T23:40:05+08:00"
content="2019-09-23">
09-23
datetime="2019-12-21T01:03:09+08:00"
content="2019-12-21">
12-21
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2019/12/21/%E8%81%8A%E8%81%8AJava%E4%B8%AD%E7%9A%84%E5%8D%95%E4%BE%8B%E6%A8%A1%E5%BC%8F/" itemprop="url">
<span itemprop="name">聊聊Java中的单例模式</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2019-12-07T00:54:19+08:00"
content="2019-12-07">
12-07
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2019/09/23/AbstractQueuedSynchronizer/" itemprop="url">
<span itemprop="name">AbstractQueuedSynchronizer</span>
<a class="post-title-link" href="/2019/12/07/JVM-G1-Part-1/" itemprop="url">
<span itemprop="name">JVM源码分析之G1垃圾收集器分析一</span>
</a> </a>
</div> </div>
@ -557,106 +640,6 @@
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script>
window.addEventListener('load', () => {
quicklink({
timeout : 3000,
priority: true,
ignores : [uri => uri.includes('#'),uri => uri === 'https://nicksxs.me/categories/java/',]
});
});
</script>
<script>
function loadCount() {
var d = document, s = d.createElement('script');
s.src = 'https://nicksxs.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
// defer loading until the whole page loading is completed
window.addEventListener('load', loadCount, false);
</script>
</body>
</html>
if (CONFIG.page.isPost) {
if (CONFIG.hostname !== location.hostname) return;
addCount(Counter);
} else if (document.querySelectorAll('.post-title-link').length >= 1) {
showTime(Counter);
}
}
let api_server = app_id.slice(-9) !== '-MdYXbMMI' ? server_url : `https://${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com`;
if (api_server) {
fetchData(api_server);
} else {
fetch('https://app-router.leancloud.cn/2/route?appId=' + app_id)
.then(response => response.json())
.then(({ api_server }) => {
fetchData('https://' + api_server);
});
}
})();
</script>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
bp.src = (curProtocol === 'https') ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script> <script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script> <script>
window.addEventListener('load', () => { window.addEventListener('load', () => {


+ 102
- 70
categories/docker/index.html View File

@ -29,7 +29,7 @@
<meta name="description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta name="description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:title" content="Nicksxs&#39;s Blog"> <meta property="og:title" content="Nicksxs&#39;s Blog">
<meta property="og:url" content="https://nicksxs.me/categories/Docker/index.html">
<meta property="og:url" content="https://nicksxs.me/categories/docker/index.html">
<meta property="og:site_name" content="Nicksxs&#39;s Blog"> <meta property="og:site_name" content="Nicksxs&#39;s Blog">
<meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
@ -40,7 +40,7 @@
<meta property="article:tag" content="森哥"> <meta property="article:tag" content="森哥">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/categories/Docker/">
<link rel="canonical" href="https://nicksxs.me/categories/docker/">
<script id="page-configurations"> <script id="page-configurations">
@ -53,7 +53,7 @@
}; };
</script> </script>
<title>Category: Docker | Nicksxs's Blog</title>
<title>Category: docker | Nicksxs's Blog</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script>
<script> <script>
@ -207,14 +207,14 @@
<div class="post-block"> <div class="post-block">
<div class="posts-collapse"> <div class="posts-collapse">
<div class="collection-title"> <div class="collection-title">
<h2 class="collection-header">Docker
<h2 class="collection-header">docker
<small>Category</small> <small>Category</small>
</h2> </h2>
</div> </div>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2020</span>
<span class="collection-header">2016</span>
</div> </div>
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
@ -222,75 +222,15 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2020-03-29T21:48:50+08:00"
content="2020-03-29">
03-29
datetime="2016-08-14T16:51:00+08:00"
content="2016-08-14">
08-14
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2020/03/29/echo%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8F%E6%8A%80%E5%B7%A7/" itemprop="url">
<span itemprop="name">docker使用中发现的echo命令的一个小技巧及其他</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-21T14:43:39+08:00"
content="2020-03-21">
03-21
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/21/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D%E4%B8%89/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍三</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-15T22:33:55+08:00"
content="2020-03-15">
03-15
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/15/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D%E4%BA%8C/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍二</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-08T23:25:40+08:00"
content="2020-03-08">
03-08
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/08/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍</span>
<a class="post-title-link" href="/2016/08/14/docker-mysql-cluster/" itemprop="url">
<span itemprop="name">docker-mysql-cluster</span>
</a> </a>
</div> </div>
@ -617,6 +557,98 @@
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script>
window.addEventListener('load', () => {
quicklink({
timeout : 3000,
priority: true,
ignores : [uri => uri.includes('#'),uri => uri === 'https://nicksxs.me/categories/docker/',]
});
});
</script>
<script>
function loadCount() {
var d = document, s = d.createElement('script');
s.src = 'https://nicksxs.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
// defer loading until the whole page loading is completed
window.addEventListener('load', loadCount, false);
</script>
</body>
</html>
id.slice(0, 8).toLowerCase()}.api.lncldglobal.com`;
if (api_server) {
fetchData(api_server);
} else {
fetch('https://app-router.leancloud.cn/2/route?appId=' + app_id)
.then(response => response.json())
.then(({ api_server }) => {
fetchData('https://' + api_server);
});
}
})();
</script>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
bp.src = (curProtocol === 'https') ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script> <script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script> <script>
window.addEventListener('load', () => { window.addEventListener('load', () => {


+ 1
- 1
css/main.css View File

@ -1262,7 +1262,7 @@ pre .javascript .function {
} }
.links-of-author a::before, .links-of-author a::before,
.links-of-author span.exturl::before { .links-of-author span.exturl::before {
background: #033377;
background: #1de3c9;
border-radius: 50%; border-radius: 50%;
content: ' '; content: ' ';
display: inline-block; display: inline-block;


+ 21
- 14
index.html View File

@ -227,10 +227,16 @@
<i class="far fa-calendar"></i> <i class="far fa-calendar"></i>
</span> </span>
<span class="post-meta-item-text">Posted on</span> <span class="post-meta-item-text">Posted on</span>
<time title="Created: 2020-04-18 23:23:41 / Modified: 23:25:04" itemprop="dateCreated datePublished" datetime="2020-04-18T23:23:41+08:00">2020-04-18</time>
<time title="Created: 2020-04-18 23:23:41" itemprop="dateCreated datePublished" datetime="2020-04-18T23:23:41+08:00">2020-04-18</time>
</span> </span>
<span class="post-meta-item">
<span class="post-meta-item-icon">
<i class="far fa-calendar-check"></i>
</span>
<span class="post-meta-item-text">Edited on</span>
<time title="Modified: 2020-04-19 17:28:42" itemprop="dateModified" datetime="2020-04-19T17:28:42+08:00">2020-04-19</time>
</span>
<span class="post-meta-item"> <span class="post-meta-item">
<span class="post-meta-item-icon"> <span class="post-meta-item-icon">
<i class="far fa-folder"></i> <i class="far fa-folder"></i>
@ -241,19 +247,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -310,15 +316,16 @@
<p>前16位字段是最后一次递减时间,因此Redis知道 上一次计数器递减,后8位是 计数器 counter。<br>LFU 的主体策略就是当这个 key 被访问的次数越多频率越高他就越容易被保留下来,并且是最近被访问的频率越高。这其实有两个事情要做,一个是在访问的时候增加计数值,在一定长时间不访问时进行衰减,所以这里用了两个值,前 16 位记录上一次衰减的时间,后 8 位记录具体的计数值。<br>Redis4.0之后为maxmemory_policy淘汰策略添加了两个LFU模式:</p> <p>前16位字段是最后一次递减时间,因此Redis知道 上一次计数器递减,后8位是 计数器 counter。<br>LFU 的主体策略就是当这个 key 被访问的次数越多频率越高他就越容易被保留下来,并且是最近被访问的频率越高。这其实有两个事情要做,一个是在访问的时候增加计数值,在一定长时间不访问时进行衰减,所以这里用了两个值,前 16 位记录上一次衰减的时间,后 8 位记录具体的计数值。<br>Redis4.0之后为maxmemory_policy淘汰策略添加了两个LFU模式:</p>
<p><code>volatile-lfu</code>:对有过期时间的key采用LFU淘汰策略<br><code>allkeys-lfu</code>:对全部key采用LFU淘汰策略<br>还有2个配置可以调整LFU算法: </p> <p><code>volatile-lfu</code>:对有过期时间的key采用LFU淘汰策略<br><code>allkeys-lfu</code>:对全部key采用LFU淘汰策略<br>还有2个配置可以调整LFU算法: </p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">lfu-log-factor 10</span><br><span class="line">lfu-decay-time 1</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line">&#96;lfu-log-factor&#96; 可以调整计数器counter的增长速度,lfu-log-factor越大,counter增长的越慢。</span><br><span class="line"></span><br><span class="line">&#96;lfu-decay-time&#96;是一个以分钟为单位的数值,可以调整counter的减少速度</span><br><span class="line">这里有个问题是 8 位大小够计么,访问一次加 1 的话的确不够,不过大神就是大神,才不会这么简单的加一。往下看代码</span><br><span class="line">&#96;&#96;&#96;C</span><br><span class="line">&#x2F;* Low level key lookup API, not actually called directly from commands</span><br><span class="line"> * implementations that should instead rely on lookupKeyRead(),</span><br><span class="line"> * lookupKeyWrite() and lookupKeyReadWithFlags(). *&#x2F;</span><br><span class="line">robj *lookupKey(redisDb *db, robj *key, int flags) &#123;</span><br><span class="line"> dictEntry *de &#x3D; dictFind(db-&gt;dict,key-&gt;ptr);</span><br><span class="line"> if (de) &#123;</span><br><span class="line"> robj *val &#x3D; dictGetVal(de);</span><br><span class="line"></span><br><span class="line"> &#x2F;* Update the access time for the ageing algorithm.</span><br><span class="line"> * Don&#39;t do it if we have a saving child, as this will trigger</span><br><span class="line"> * a copy on write madness. *&#x2F;</span><br><span class="line"> if (!hasActiveChildProcess() &amp;&amp; !(flags &amp; LOOKUP_NOTOUCH))&#123;</span><br><span class="line"> if (server.maxmemory_policy &amp; MAXMEMORY_FLAG_LFU) &#123;</span><br><span class="line"> &#x2F;&#x2F; 当淘汰策略是 LFU 时,就会调用这个updateLFU</span><br><span class="line"> updateLFU(val);</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> val-&gt;lru &#x3D; LRU_CLOCK();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> return val;</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> return NULL;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br></pre></td><td class="code"><pre><span class="line">lfu-log-factor 10</span><br><span class="line">lfu-decay-time 1</span><br><span class="line">&#96;&#96;&#96; </span><br><span class="line">&#96;lfu-log-factor&#96; 可以调整计数器counter的增长速度,lfu-log-factor越大,counter增长的越慢。</span><br><span class="line"></span><br><span class="line">&#96;lfu-decay-time&#96;是一个以分钟为单位的数值,可以调整counter的减少速度</span><br><span class="line">这里有个问题是 8 位大小够计么,访问一次加 1 的话的确不够,不过大神就是大神,才不会这么简单的加一。往下看代码</span><br><span class="line">&#96;&#96;&#96;C</span><br><span class="line">&#x2F;* Low level key lookup API, not actually called directly from commands</span><br><span class="line"> * implementations that should instead rely on lookupKeyRead(),</span><br><span class="line"> * lookupKeyWrite() and lookupKeyReadWithFlags(). *&#x2F;</span><br><span class="line">robj *lookupKey(redisDb *db, robj *key, int flags) &#123;</span><br><span class="line"> dictEntry *de &#x3D; dictFind(db-&gt;dict,key-&gt;ptr);</span><br><span class="line"> if (de) &#123;</span><br><span class="line"> robj *val &#x3D; dictGetVal(de);</span><br><span class="line"></span><br><span class="line"> &#x2F;* Update the access time for the ageing algorithm.</span><br><span class="line"> * Don&#39;t do it if we have a saving child, as this will trigger</span><br><span class="line"> * a copy on write madness. *&#x2F;</span><br><span class="line"> if (!hasActiveChildProcess() &amp;&amp; !(flags &amp; LOOKUP_NOTOUCH))&#123;</span><br><span class="line"> if (server.maxmemory_policy &amp; MAXMEMORY_FLAG_LFU) &#123;</span><br><span class="line"> &#x2F;&#x2F; 当淘汰策略是 LFU 时,就会调用这个updateLFU</span><br><span class="line"> updateLFU(val);</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> val-&gt;lru &#x3D; LRU_CLOCK();</span><br><span class="line"> &#125;</span><br><span class="line"> &#125;</span><br><span class="line"> return val;</span><br><span class="line"> &#125; else &#123;</span><br><span class="line"> return NULL;</span><br><span class="line"> &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>updateLFU 这个其实个入口,调用了两个重要的方法</p>
<p><a href="https://github.com/antirez/redis/blob/unstable/src/db.c#L46" target="_blank" rel="noopener"><code>updateLFU</code></a> 这个其实个入口,调用了两个重要的方法</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Update LFU when an object is accessed.</span></span><br><span class="line"><span class="comment"> * Firstly, decrement the counter if the decrement time is reached.</span></span><br><span class="line"><span class="comment"> * Then logarithmically increment the counter, and update the access time. */</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">updateLFU</span><span class="params">(robj *val)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = LFUDecrAndReturn(val);</span><br><span class="line"> counter = LFULogIncr(counter);</span><br><span class="line"> val-&gt;lru = (LFUGetTimeInMinutes()&lt;&lt;<span class="number">8</span>) | counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Update LFU when an object is accessed.</span></span><br><span class="line"><span class="comment"> * Firstly, decrement the counter if the decrement time is reached.</span></span><br><span class="line"><span class="comment"> * Then logarithmically increment the counter, and update the access time. */</span></span><br><span class="line"><span class="function"><span class="keyword">void</span> <span class="title">updateLFU</span><span class="params">(robj *val)</span> </span>&#123;</span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = LFUDecrAndReturn(val);</span><br><span class="line"> counter = LFULogIncr(counter);</span><br><span class="line"> val-&gt;lru = (LFUGetTimeInMinutes()&lt;&lt;<span class="number">8</span>) | counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>首先来看看<code>LFUDecrAndReturn</code>,这个方法的作用是根据上一次衰减时间和系统配置的 <code>lfu-decay-time</code> 参数来确定需要将 counter 减去多少</p>
<p>首先来看看<a href="https://github.com/antirez/redis/blob/unstable/src/evict.c#L335" target="_blank" rel="noopener"><code>LFUDecrAndReturn</code></a>,这个方法的作用是根据上一次衰减时间和系统配置的 <code>lfu-decay-time</code> 参数来确定需要将 counter 减去多少</p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* If the object decrement time is reached decrement the LFU counter but</span></span><br><span class="line"><span class="comment"> * do not update LFU fields of the object, we update the access time</span></span><br><span class="line"><span class="comment"> * and counter in an explicit way when the object is really accessed.</span></span><br><span class="line"><span class="comment"> * And we will times halve the counter according to the times of</span></span><br><span class="line"><span class="comment"> * elapsed time than server.lfu_decay_time.</span></span><br><span class="line"><span class="comment"> * Return the object frequency counter.</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * This function is used in order to scan the dataset for the best object</span></span><br><span class="line"><span class="comment"> * to fit: as we check for the candidate, we incrementally decrement the</span></span><br><span class="line"><span class="comment"> * counter of the scanned objects if needed. */</span></span><br><span class="line"><span class="function"><span class="keyword">unsigned</span> <span class="keyword">long</span> <span class="title">LFUDecrAndReturn</span><span class="params">(robj *o)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 右移 8 位,拿到上次衰减时间</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> ldt = o-&gt;lru &gt;&gt; <span class="number">8</span>;</span><br><span class="line"> <span class="comment">// 对 255 做与操作,拿到 counter 值</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = o-&gt;lru &amp; <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 根据lfu_decay_time来算出过了多少个衰减周期</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> num_periods = server.lfu_decay_time ? LFUTimeElapsed(ldt) / server.lfu_decay_time : <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span> (num_periods)</span><br><span class="line"> counter = (num_periods &gt; counter) ? <span class="number">0</span> : counter - num_periods;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* If the object decrement time is reached decrement the LFU counter but</span></span><br><span class="line"><span class="comment"> * do not update LFU fields of the object, we update the access time</span></span><br><span class="line"><span class="comment"> * and counter in an explicit way when the object is really accessed.</span></span><br><span class="line"><span class="comment"> * And we will times halve the counter according to the times of</span></span><br><span class="line"><span class="comment"> * elapsed time than server.lfu_decay_time.</span></span><br><span class="line"><span class="comment"> * Return the object frequency counter.</span></span><br><span class="line"><span class="comment"> *</span></span><br><span class="line"><span class="comment"> * This function is used in order to scan the dataset for the best object</span></span><br><span class="line"><span class="comment"> * to fit: as we check for the candidate, we incrementally decrement the</span></span><br><span class="line"><span class="comment"> * counter of the scanned objects if needed. */</span></span><br><span class="line"><span class="function"><span class="keyword">unsigned</span> <span class="keyword">long</span> <span class="title">LFUDecrAndReturn</span><span class="params">(robj *o)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 右移 8 位,拿到上次衰减时间</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> ldt = o-&gt;lru &gt;&gt; <span class="number">8</span>;</span><br><span class="line"> <span class="comment">// 对 255 做与操作,拿到 counter 值</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> counter = o-&gt;lru &amp; <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 根据lfu_decay_time来算出过了多少个衰减周期</span></span><br><span class="line"> <span class="keyword">unsigned</span> <span class="keyword">long</span> num_periods = server.lfu_decay_time ? LFUTimeElapsed(ldt) / server.lfu_decay_time : <span class="number">0</span>;</span><br><span class="line"> <span class="keyword">if</span> (num_periods)</span><br><span class="line"> counter = (num_periods &gt; counter) ? <span class="number">0</span> : counter - num_periods;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>然后是加</p>
<p>然后是加,调用了<a href="https://github.com/antirez/redis/blob/unstable/src/evict.c#L315" target="_blank" rel="noopener"><code>LFULogIncr</code></a></p>
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Logarithmically increment a counter. The greater is the current counter value</span></span><br><span class="line"><span class="comment"> * the less likely is that it gets really implemented. Saturate it at 255. */</span></span><br><span class="line"><span class="function"><span class="keyword">uint8_t</span> <span class="title">LFULogIncr</span><span class="params">(<span class="keyword">uint8_t</span> counter)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 最大值就是 255,到顶了就不加了</span></span><br><span class="line"> <span class="keyword">if</span> (counter == <span class="number">255</span>) <span class="keyword">return</span> <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 生成个随机小数</span></span><br><span class="line"> <span class="keyword">double</span> r = (<span class="keyword">double</span>)rand()/RAND_MAX;</span><br><span class="line"> <span class="comment">// 减去个基础值,LFU_INIT_VAL = 5,防止刚进来就被逐出</span></span><br><span class="line"> <span class="keyword">double</span> baseval = counter - LFU_INIT_VAL;</span><br><span class="line"> <span class="comment">// 如果是小于 0,</span></span><br><span class="line"> <span class="keyword">if</span> (baseval &lt; <span class="number">0</span>) baseval = <span class="number">0</span>;</span><br><span class="line"> <span class="comment">// 如果 baseval 是 0,那么 p 就是 1了,后面 counter 直接加一,如果不是的话,得看系统参数lfu_log_factor,这个越大,除出来的 p 越小,那么 counter++的可能性也越小,这样子就把前面的疑问给解决了,不是直接+1 的</span></span><br><span class="line"> <span class="keyword">double</span> p = <span class="number">1.0</span>/(baseval*server.lfu_log_factor+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span> (r &lt; p) counter++;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">/* Logarithmically increment a counter. The greater is the current counter value</span></span><br><span class="line"><span class="comment"> * the less likely is that it gets really implemented. Saturate it at 255. */</span></span><br><span class="line"><span class="function"><span class="keyword">uint8_t</span> <span class="title">LFULogIncr</span><span class="params">(<span class="keyword">uint8_t</span> counter)</span> </span>&#123;</span><br><span class="line"> <span class="comment">// 最大值就是 255,到顶了就不加了</span></span><br><span class="line"> <span class="keyword">if</span> (counter == <span class="number">255</span>) <span class="keyword">return</span> <span class="number">255</span>;</span><br><span class="line"> <span class="comment">// 生成个随机小数</span></span><br><span class="line"> <span class="keyword">double</span> r = (<span class="keyword">double</span>)rand()/RAND_MAX;</span><br><span class="line"> <span class="comment">// 减去个基础值,LFU_INIT_VAL = 5,防止刚进来就被逐出</span></span><br><span class="line"> <span class="keyword">double</span> baseval = counter - LFU_INIT_VAL;</span><br><span class="line"> <span class="comment">// 如果是小于 0,</span></span><br><span class="line"> <span class="keyword">if</span> (baseval &lt; <span class="number">0</span>) baseval = <span class="number">0</span>;</span><br><span class="line"> <span class="comment">// 如果 baseval 是 0,那么 p 就是 1了,后面 counter 直接加一,如果不是的话,得看系统参数lfu_log_factor,这个越大,除出来的 p 越小,那么 counter++的可能性也越小,这样子就把前面的疑问给解决了,不是直接+1 的</span></span><br><span class="line"> <span class="keyword">double</span> p = <span class="number">1.0</span>/(baseval*server.lfu_log_factor+<span class="number">1</span>);</span><br><span class="line"> <span class="keyword">if</span> (r &lt; p) counter++;</span><br><span class="line"> <span class="keyword">return</span> counter;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>
<p>大概的变化速度可以参考</p> <p>大概的变化速度可以参考</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 0 | 104 | 255 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 1 | 18 | 49 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 10 | 10 | 18 | 142 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 100 | 8 | 11 | 49 | 143 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br></pre></td></tr></table></figure> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 0 | 104 | 255 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 1 | 18 | 49 | 255 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 10 | 10 | 18 | 142 | 255 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br><span class="line">| 100 | 8 | 11 | 49 | 143 | 255 |</span><br><span class="line">+--------+------------+------------+------------+------------+------------+</span><br></pre></td></tr></table></figure>
<p>factor 越大变化的越慢</p>
<p>简而言之就是 lfu_log_factor 越大变化的越慢</p>
<h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>总结一下,redis 实现了近似的 lru 淘汰策略,通过增加了淘汰 key 的池子(pool),并且增大每次抽样的 key 的数量来将淘汰效果更进一步地接近于 lru,这是 lru 策略,但是对于前面举的一个例子,其实 lru 并不能保证 key 的淘汰就如我们预期,所以在后期又引入了 lfu 的策略,lfu的策略比较巧妙,复用了 redis 对象的 lru 字段,并且使用了factor 参数来控制计数器递增的速度,防止 8 位的计数器太早溢出。</p>
</div> </div>
@ -377,19 +384,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>


+ 1
- 0
leancloud.memo View File

@ -44,4 +44,5 @@
{"title":"docker使用中发现的echo命令的一个小技巧及其他","url":"/2020/03/29/echo命令的一个小技巧/"}, {"title":"docker使用中发现的echo命令的一个小技巧及其他","url":"/2020/03/29/echo命令的一个小技巧/"},
{"title":"Comparator使用小记","url":"/2020/04/05/Comparator使用小记/"}, {"title":"Comparator使用小记","url":"/2020/04/05/Comparator使用小记/"},
{"title":"redis系列介绍七-过期策略","url":"/2020/04/12/redis系列介绍七/"}, {"title":"redis系列介绍七-过期策略","url":"/2020/04/12/redis系列介绍七/"},
{"title":"redis系列介绍八-淘汰策略","url":"/2020/04/18/redis系列介绍八/"},
] ]

+ 1
- 1
leancloud_counter_security_urls.json View File

@ -1 +1 @@
[{"title":"AbstractQueuedSynchronizer","url":"/2019/09/23/AbstractQueuedSynchronizer/"},{"title":"村上春树《1Q84》读后感","url":"/2019/12/18/1Q84读后感/"},{"title":"34_Search_for_a_Range","url":"/2016/08/14/34-Search-for-a-Range/"},{"title":"Clone Graph Part I","url":"/2014/12/30/Clone-Graph-Part-I/"},{"title":"Comparator使用小记","url":"/2020/04/05/Comparator使用小记/"},{"title":"add-two-number","url":"/2015/04/14/Add-Two-Number/"},{"title":"leetcode no.3","url":"/2015/04/15/Leetcode-No-3/"},{"title":"MFC 模态对话框","url":"/2014/12/24/MFC 模态对话框/"},{"title":"Number of 1 Bits","url":"/2015/03/11/Number-Of-1-Bits/"},{"title":"Reverse Bits","url":"/2015/03/11/Reverse-Bits/"},{"title":"Redis_分布式锁","url":"/2019/12/10/Redis-Part-1/"},{"title":"Reverse Integer","url":"/2015/03/13/Reverse-Integer/"},{"title":"docker-mysql-cluster","url":"/2016/08/14/docker-mysql-cluster/"},{"title":"ambari-summary","url":"/2017/05/09/ambari-summary/"},{"title":"binary-watch","url":"/2016/09/29/binary-watch/"},{"title":"two sum","url":"/2015/01/14/Two-Sum/"},{"title":"G1收集器概述","url":"/2020/02/09/G1收集器概述/"},{"title":"docker比一般多一点的初学者介绍","url":"/2020/03/08/docker比一般多一点的初学者介绍/"},{"title":"Maven实用小技巧","url":"/2020/02/16/Maven实用小技巧/"},{"title":"invert-binary-tree","url":"/2015/06/22/invert-binary-tree/"},{"title":"docker比一般多一点的初学者介绍三","url":"/2020/03/21/docker比一般多一点的初学者介绍三/"},{"title":"minimum-size-subarray-sum-209","url":"/2016/10/11/minimum-size-subarray-sum-209/"},{"title":"docker使用中发现的echo命令的一个小技巧及其他","url":"/2020/03/29/echo命令的一个小技巧/"},{"title":"openresty","url":"/2019/06/18/openresty/"},{"title":"C++ 指针使用中的一个小问题","url":"/2014/12/23/my-new-post/"},{"title":"docker比一般多一点的初学者介绍二","url":"/2020/03/15/docker比一般多一点的初学者介绍二/"},{"title":"pcre-intro-and-a-simple-package","url":"/2015/01/16/pcre-intro-and-a-simple-package/"},{"title":"php-abstract-class-and-interface","url":"/2016/11/10/php-abstract-class-and-interface/"},{"title":"redis数据结构介绍三-第三部分 整数集合","url":"/2020/01/10/redis数据结构介绍三/"},{"title":"rabbitmq-tips","url":"/2017/04/25/rabbitmq-tips/"},{"title":"gogs使用webhook部署react单页应用","url":"/2020/02/22/gogs使用webhook部署react单页应用/"},{"title":"redis数据结构介绍二-第二部分 跳表","url":"/2020/01/04/redis数据结构介绍二/"},{"title":"summary-ranges-228","url":"/2016/10/12/summary-ranges-228/"},{"title":"spark-little-tips","url":"/2017/03/28/spark-little-tips/"},{"title":"swoole-websocket-test","url":"/2016/07/13/swoole-websocket-test/"},{"title":"聊聊Java中的单例模式","url":"/2019/12/21/聊聊Java中的单例模式/"},{"title":"redis数据结构介绍四-第四部分 压缩表","url":"/2020/01/19/redis数据结构介绍四/"},{"title":"2019年终总结","url":"/2020/02/01/2019年终总结/"},{"title":"Path Sum","url":"/2015/01/04/Path-Sum/"},{"title":"redis数据结构介绍-第一部分 SDS,链表,字典","url":"/2019/12/26/redis数据结构介绍/"},{"title":"redis数据结构介绍五-第五部分 对象","url":"/2020/01/20/redis数据结构介绍五/"},{"title":"寄生虫观后感","url":"/2020/03/01/寄生虫观后感/"},{"title":"redis系列介绍七-过期策略","url":"/2020/04/12/redis系列介绍七/"},{"title":"redis数据结构介绍六 快表","url":"/2020/01/22/redis数据结构介绍六/"},{"title":"JVM源码分析之G1垃圾收集器分析一","url":"/2019/12/07/JVM-G1-Part-1/"},{"title":"redis系列介绍八-淘汰策略","url":"/2020/04/18/redis系列介绍八/"}]
[{"title":"34_Search_for_a_Range","url":"/2016/08/14/34-Search-for-a-Range/"},{"title":"AbstractQueuedSynchronizer","url":"/2019/09/23/AbstractQueuedSynchronizer/"},{"title":"add-two-number","url":"/2015/04/14/Add-Two-Number/"},{"title":"Comparator使用小记","url":"/2020/04/05/Comparator使用小记/"},{"title":"MFC 模态对话框","url":"/2014/12/24/MFC 模态对话框/"},{"title":"leetcode no.3","url":"/2015/04/15/Leetcode-No-3/"},{"title":"Path Sum","url":"/2015/01/04/Path-Sum/"},{"title":"Number of 1 Bits","url":"/2015/03/11/Number-Of-1-Bits/"},{"title":"Redis_分布式锁","url":"/2019/12/10/Redis-Part-1/"},{"title":"Maven实用小技巧","url":"/2020/02/16/Maven实用小技巧/"},{"title":"Reverse Bits","url":"/2015/03/11/Reverse-Bits/"},{"title":"Reverse Integer","url":"/2015/03/13/Reverse-Integer/"},{"title":"ambari-summary","url":"/2017/05/09/ambari-summary/"},{"title":"two sum","url":"/2015/01/14/Two-Sum/"},{"title":"docker-mysql-cluster","url":"/2016/08/14/docker-mysql-cluster/"},{"title":"binary-watch","url":"/2016/09/29/binary-watch/"},{"title":"docker比一般多一点的初学者介绍","url":"/2020/03/08/docker比一般多一点的初学者介绍/"},{"title":"docker比一般多一点的初学者介绍三","url":"/2020/03/21/docker比一般多一点的初学者介绍三/"},{"title":"docker比一般多一点的初学者介绍二","url":"/2020/03/15/docker比一般多一点的初学者介绍二/"},{"title":"gogs使用webhook部署react单页应用","url":"/2020/02/22/gogs使用webhook部署react单页应用/"},{"title":"minimum-size-subarray-sum-209","url":"/2016/10/11/minimum-size-subarray-sum-209/"},{"title":"invert-binary-tree","url":"/2015/06/22/invert-binary-tree/"},{"title":"openresty","url":"/2019/06/18/openresty/"},{"title":"docker使用中发现的echo命令的一个小技巧及其他","url":"/2020/03/29/echo命令的一个小技巧/"},{"title":"pcre-intro-and-a-simple-package","url":"/2015/01/16/pcre-intro-and-a-simple-package/"},{"title":"C++ 指针使用中的一个小问题","url":"/2014/12/23/my-new-post/"},{"title":"php-abstract-class-and-interface","url":"/2016/11/10/php-abstract-class-and-interface/"},{"title":"rabbitmq-tips","url":"/2017/04/25/rabbitmq-tips/"},{"title":"redis数据结构介绍三-第三部分 整数集合","url":"/2020/01/10/redis数据结构介绍三/"},{"title":"redis数据结构介绍二-第二部分 跳表","url":"/2020/01/04/redis数据结构介绍二/"},{"title":"redis数据结构介绍五-第五部分 对象","url":"/2020/01/20/redis数据结构介绍五/"},{"title":"redis数据结构介绍四-第四部分 压缩表","url":"/2020/01/19/redis数据结构介绍四/"},{"title":"redis数据结构介绍-第一部分 SDS,链表,字典","url":"/2019/12/26/redis数据结构介绍/"},{"title":"summary-ranges-228","url":"/2016/10/12/summary-ranges-228/"},{"title":"spark-little-tips","url":"/2017/03/28/spark-little-tips/"},{"title":"swoole-websocket-test","url":"/2016/07/13/swoole-websocket-test/"},{"title":"聊聊Java中的单例模式","url":"/2019/12/21/聊聊Java中的单例模式/"},{"title":"寄生虫观后感","url":"/2020/03/01/寄生虫观后感/"},{"title":"redis数据结构介绍六 快表","url":"/2020/01/22/redis数据结构介绍六/"},{"title":"G1收集器概述","url":"/2020/02/09/G1收集器概述/"},{"title":"Clone Graph Part I","url":"/2014/12/30/Clone-Graph-Part-I/"},{"title":"村上春树《1Q84》读后感","url":"/2019/12/18/1Q84读后感/"},{"title":"2019年终总结","url":"/2020/02/01/2019年终总结/"},{"title":"JVM源码分析之G1垃圾收集器分析一","url":"/2019/12/07/JVM-G1-Part-1/"},{"title":"redis系列介绍七-过期策略","url":"/2020/04/12/redis系列介绍七/"},{"title":"redis系列介绍八-淘汰策略","url":"/2020/04/18/redis系列介绍八/"}]

+ 28
- 28
page/2/index.html View File

@ -241,11 +241,11 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
@ -471,19 +471,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -600,19 +600,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -715,19 +715,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -839,19 +839,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -959,19 +959,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -1076,19 +1076,19 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C</span></a>
<a href="/categories/Redis/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/" itemprop="url" rel="index"><span itemprop="name">数据结构</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/Redis/" itemprop="url" rel="index"><span itemprop="name">Redis</span></a>
<a href="/categories/Redis/%E6%BA%90%E7%A0%81/" itemprop="url" rel="index"><span itemprop="name">源码</span></a>
</span> </span>
</span> </span>
@ -1308,11 +1308,11 @@
</span> </span>
<span class="post-meta-item-text">In</span> <span class="post-meta-item-text">In</span>
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/" itemprop="url" rel="index"><span itemprop="name">读后感</span></a>
<a href="/categories/%E7%94%9F%E6%B4%BB/" itemprop="url" rel="index"><span itemprop="name">生活</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/%E7%94%9F%E6%B4%BB/" itemprop="url" rel="index"><span itemprop="name">生活</span></a>
<a href="/categories/%E8%AF%BB%E5%90%8E%E6%84%9F/" itemprop="url" rel="index"><span itemprop="name">读后感</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">


+ 2
- 2
page/3/index.html View File

@ -373,11 +373,11 @@
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">
<a href="/categories/C/" itemprop="url" rel="index"><span itemprop="name">C++</span></a>
<a href="/categories/Java/JVM/" itemprop="url" rel="index"><span itemprop="name">JVM</span></a>
</span> </span>
, ,
<span itemprop="about" itemscope itemtype="http://schema.org/Thing"> <span itemprop="about" itemscope itemtype="http://schema.org/Thing">


+ 5
- 5
sitemap.xml View File

@ -4,7 +4,7 @@
<url> <url>
<loc>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</loc> <loc>https://nicksxs.me/2020/04/18/redis%E7%B3%BB%E5%88%97%E4%BB%8B%E7%BB%8D%E5%85%AB/</loc>
<lastmod>2020-04-18T15:25:04.854Z</lastmod>
<lastmod>2020-04-19T09:28:42.555Z</lastmod>
</url> </url>
@ -191,14 +191,14 @@
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2014/12/24/MFC%20%E6%A8%A1%E6%80%81%E5%AF%B9%E8%AF%9D%E6%A1%86/</loc>
<loc>https://nicksxs.me/2016/08/14/docker-mysql-cluster/</loc>
<lastmod>2020-01-12T13:08:27.011Z</lastmod> <lastmod>2020-01-12T13:08:27.011Z</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2016/08/14/docker-mysql-cluster/</loc>
<loc>https://nicksxs.me/2014/12/24/MFC%20%E6%A8%A1%E6%80%81%E5%AF%B9%E8%AF%9D%E6%A1%86/</loc>
<lastmod>2020-01-12T13:08:27.011Z</lastmod> <lastmod>2020-01-12T13:08:27.011Z</lastmod>
@ -254,14 +254,14 @@
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2014/12/23/my-new-post/</loc>
<loc>https://nicksxs.me/2017/03/28/spark-little-tips/</loc>
<lastmod>2020-01-12T13:08:26.998Z</lastmod> <lastmod>2020-01-12T13:08:26.998Z</lastmod>
</url> </url>
<url> <url>
<loc>https://nicksxs.me/2017/03/28/spark-little-tips/</loc>
<loc>https://nicksxs.me/2014/12/23/my-new-post/</loc>
<lastmod>2020-01-12T13:08:26.998Z</lastmod> <lastmod>2020-01-12T13:08:26.998Z</lastmod>


+ 165
- 164
tags/c/index.html View File

@ -29,7 +29,7 @@
<meta name="description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta name="description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:title" content="Nicksxs&#39;s Blog"> <meta property="og:title" content="Nicksxs&#39;s Blog">
<meta property="og:url" content="https://nicksxs.me/tags/c/index.html">
<meta property="og:url" content="https://nicksxs.me/tags/C/index.html">
<meta property="og:site_name" content="Nicksxs&#39;s Blog"> <meta property="og:site_name" content="Nicksxs&#39;s Blog">
<meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
@ -40,7 +40,7 @@
<meta property="article:tag" content="森哥"> <meta property="article:tag" content="森哥">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/tags/c/">
<link rel="canonical" href="https://nicksxs.me/tags/C/">
<script id="page-configurations"> <script id="page-configurations">
@ -53,7 +53,7 @@
}; };
</script> </script>
<title>Tag: c++ | Nicksxs's Blog</title>
<title>Tag: C++ | Nicksxs's Blog</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script>
<script> <script>
@ -207,14 +207,14 @@
<div class="post-block"> <div class="post-block">
<div class="posts-collapse"> <div class="posts-collapse">
<div class="collection-title"> <div class="collection-title">
<h2 class="collection-header">c++
<h2 class="collection-header">C++
<small>Tag</small> <small>Tag</small>
</h2> </h2>
</div> </div>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2016</span>
<span class="collection-header">2020</span>
</div> </div>
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
@ -222,82 +222,22 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2016-10-12T23:25:17+08:00"
content="2016-10-12">
10-12
datetime="2020-02-09T20:52:02+08:00"
content="2020-02-09">
02-09
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2016/10/12/summary-ranges-228/" itemprop="url">
<span itemprop="name">summary-ranges-228</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2016-10-11T22:04:28+08:00"
content="2016-10-11">
10-11
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2016/10/11/minimum-size-subarray-sum-209/" itemprop="url">
<span itemprop="name">minimum-size-subarray-sum-209</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2016-09-29T23:16:06+08:00"
content="2016-09-29">
09-29
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2016/09/29/binary-watch/" itemprop="url">
<span itemprop="name">binary-watch</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2016-08-14T21:33:24+08:00"
content="2016-08-14">
08-14
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2016/08/14/34-Search-for-a-Range/" itemprop="url">
<span itemprop="name">34_Search_for_a_Range</span>
<a class="post-title-link" href="/2020/02/09/G1%E6%94%B6%E9%9B%86%E5%99%A8%E6%A6%82%E8%BF%B0/" itemprop="url">
<span itemprop="name">G1收集器概述</span>
</a> </a>
</div> </div>
</header> </header>
</article> </article>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2015</span>
<span class="collection-header">2019</span>
</div> </div>
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
@ -305,115 +245,38 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2015-06-22T10:29:44+08:00"
content="2015-06-22">
06-22
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2015/06/22/invert-binary-tree/" itemprop="url">
<span itemprop="name">invert-binary-tree</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2015-04-15T13:49:00+08:00"
content="2015-04-15">
04-15
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2015/04/15/Leetcode-No-3/" itemprop="url">
<span itemprop="name">leetcode no.3</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2015-04-14T17:40:10+08:00"
content="2015-04-14">
04-14
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2015/04/14/Add-Two-Number/" itemprop="url">
<span itemprop="name">add-two-number</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2015-03-13T17:22:20+08:00"
content="2015-03-13">
03-13
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2015/03/13/Reverse-Integer/" itemprop="url">
<span itemprop="name">Reverse Integer</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2015-03-11T17:35:20+08:00"
content="2015-03-11">
03-11
datetime="2019-12-07T00:54:19+08:00"
content="2019-12-07">
12-07
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2015/03/11/Reverse-Bits/" itemprop="url">
<span itemprop="name">Reverse Bits</span>
<a class="post-title-link" href="/2019/12/07/JVM-G1-Part-1/" itemprop="url">
<span itemprop="name">JVM源码分析之G1垃圾收集器分析一</span>
</a> </a>
</div> </div>
</header> </header>
</article> </article>
<div class="collection-year">
<span class="collection-header">2014</span>
</div>
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
<header class="post-header"> <header class="post-header">
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2015-03-11T17:02:58+08:00"
content="2015-03-11">
03-11
datetime="2014-12-30T16:50:01+08:00"
content="2014-12-30">
12-30
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2015/03/11/Number-Of-1-Bits/" itemprop="url">
<span itemprop="name">Number of 1 Bits</span>
<a class="post-title-link" href="/2014/12/30/Clone-Graph-Part-I/" itemprop="url">
<span itemprop="name">Clone Graph Part I</span>
</a> </a>
</div> </div>
@ -427,9 +290,6 @@
<nav class="pagination">
<span class="page-number current">1</span><a class="page-number" href="/tags/c/page/2/">2</a><a class="extend next" rel="next" href="/tags/c/page/2/"><i class="fa fa-angle-right" aria-label="Next page"></i></a>
</nav>
@ -743,6 +603,147 @@
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script>
window.addEventListener('load', () => {
quicklink({
timeout : 3000,
priority: true,
ignores : [uri => uri.includes('#'),uri => uri === 'https://nicksxs.me/tags/C/',]
});
});
</script>
<script>
function loadCount() {
var d = document, s = d.createElement('script');
s.src = 'https://nicksxs.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
// defer loading until the whole page loading is completed
window.addEventListener('load', loadCount, false);
</script>
</body>
</html>
ecurity` option to `false`.');
}
})
.catch(error => {
console.error('LeanCloud Counter Error', error);
});
}
function showTime(Counter) {
var visitors = document.querySelectorAll('.leancloud_visitors');
var entries = [...visitors].map(element => {
return decodeURI(element.id);
});
Counter('get', '/classes/Counter?where=' + encodeURIComponent(JSON.stringify({ url: { '$in': entries } })))
.then(response => response.json())
.then(({ results }) => {
for (let url of entries) {
let target = results.find(item => item.url === url);
leancloudSelector(url).innerText = target ? target.time : 0;
}
})
.catch(error => {
console.error('LeanCloud Counter Error', error);
});
}
let { app_id, app_key, server_url } = {"enable":true,"app_id":"ysza182Vghlqjdt7QiwGLLJy-gzGzoHsz","app_key":"s9GDqbn7gnGGkusf66YRVccw","server_url":"https://leancloud.cn","security":true};
function fetchData(api_server) {
var Counter = (method, url, data) => {
return fetch(`${api_server}/1.1${url}`, {
method,
headers: {
'X-LC-Id' : app_id,
'X-LC-Key' : app_key,
'Content-Type': 'application/json',
},
body: JSON.stringify(data)
});
};
if (CONFIG.page.isPost) {
if (CONFIG.hostname !== location.hostname) return;
addCount(Counter);
} else if (document.querySelectorAll('.post-title-link').length >= 1) {
showTime(Counter);
}
}
let api_server = app_id.slice(-9) !== '-MdYXbMMI' ? server_url : `https://${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com`;
if (api_server) {
fetchData(api_server);
} else {
fetch('https://app-router.leancloud.cn/2/route?appId=' + app_id)
.then(response => response.json())
.then(({ api_server }) => {
fetchData('https://' + api_server);
});
}
})();
</script>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
bp.src = (curProtocol === 'https') ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script> <script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script> <script>
window.addEventListener('load', () => { window.addEventListener('load', () => {


+ 102
- 70
tags/docker/index.html View File

@ -29,7 +29,7 @@
<meta name="description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta name="description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:title" content="Nicksxs&#39;s Blog"> <meta property="og:title" content="Nicksxs&#39;s Blog">
<meta property="og:url" content="https://nicksxs.me/tags/Docker/index.html">
<meta property="og:url" content="https://nicksxs.me/tags/docker/index.html">
<meta property="og:site_name" content="Nicksxs&#39;s Blog"> <meta property="og:site_name" content="Nicksxs&#39;s Blog">
<meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
@ -40,7 +40,7 @@
<meta property="article:tag" content="森哥"> <meta property="article:tag" content="森哥">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/tags/Docker/">
<link rel="canonical" href="https://nicksxs.me/tags/docker/">
<script id="page-configurations"> <script id="page-configurations">
@ -53,7 +53,7 @@
}; };
</script> </script>
<title>Tag: Docker | Nicksxs's Blog</title>
<title>Tag: docker | Nicksxs's Blog</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script>
<script> <script>
@ -207,14 +207,14 @@
<div class="post-block"> <div class="post-block">
<div class="posts-collapse"> <div class="posts-collapse">
<div class="collection-title"> <div class="collection-title">
<h2 class="collection-header">Docker
<h2 class="collection-header">docker
<small>Tag</small> <small>Tag</small>
</h2> </h2>
</div> </div>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2020</span>
<span class="collection-header">2016</span>
</div> </div>
<article itemscope itemtype="http://schema.org/Article"> <article itemscope itemtype="http://schema.org/Article">
@ -222,75 +222,15 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2020-03-29T21:48:50+08:00"
content="2020-03-29">
03-29
datetime="2016-08-14T16:51:00+08:00"
content="2016-08-14">
08-14
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2020/03/29/echo%E5%91%BD%E4%BB%A4%E7%9A%84%E4%B8%80%E4%B8%AA%E5%B0%8F%E6%8A%80%E5%B7%A7/" itemprop="url">
<span itemprop="name">docker使用中发现的echo命令的一个小技巧及其他</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-21T14:43:39+08:00"
content="2020-03-21">
03-21
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/21/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D%E4%B8%89/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍三</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-15T22:33:55+08:00"
content="2020-03-15">
03-15
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/15/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D%E4%BA%8C/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍二</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-03-08T23:25:40+08:00"
content="2020-03-08">
03-08
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/03/08/docker%E6%AF%94%E4%B8%80%E8%88%AC%E5%A4%9A%E4%B8%80%E7%82%B9%E7%9A%84%E5%88%9D%E5%AD%A6%E8%80%85%E4%BB%8B%E7%BB%8D/" itemprop="url">
<span itemprop="name">docker比一般多一点的初学者介绍</span>
<a class="post-title-link" href="/2016/08/14/docker-mysql-cluster/" itemprop="url">
<span itemprop="name">docker-mysql-cluster</span>
</a> </a>
</div> </div>
@ -617,6 +557,98 @@
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script>
window.addEventListener('load', () => {
quicklink({
timeout : 3000,
priority: true,
ignores : [uri => uri.includes('#'),uri => uri === 'https://nicksxs.me/tags/docker/',]
});
});
</script>
<script>
function loadCount() {
var d = document, s = d.createElement('script');
s.src = 'https://nicksxs.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
// defer loading until the whole page loading is completed
window.addEventListener('load', loadCount, false);
</script>
</body>
</html>
${app_id.slice(0, 8).toLowerCase()}.api.lncldglobal.com`;
if (api_server) {
fetchData(api_server);
} else {
fetch('https://app-router.leancloud.cn/2/route?appId=' + app_id)
.then(response => response.json())
.then(({ api_server }) => {
fetchData('https://' + api_server);
});
}
})();
</script>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
bp.src = (curProtocol === 'https') ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script> <script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script> <script>
window.addEventListener('load', () => { window.addEventListener('load', () => {


+ 72
- 93
tags/java/index.html View File

@ -29,7 +29,7 @@
<meta name="description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta name="description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="og:type" content="website"> <meta property="og:type" content="website">
<meta property="og:title" content="Nicksxs&#39;s Blog"> <meta property="og:title" content="Nicksxs&#39;s Blog">
<meta property="og:url" content="https://nicksxs.me/tags/java/index.html">
<meta property="og:url" content="https://nicksxs.me/tags/Java/index.html">
<meta property="og:site_name" content="Nicksxs&#39;s Blog"> <meta property="og:site_name" content="Nicksxs&#39;s Blog">
<meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森"> <meta property="og:description" content="learn from zero,技术博客,Nicksxs,史学森">
<meta property="article:author" content="Nicksxs"> <meta property="article:author" content="Nicksxs">
@ -40,7 +40,7 @@
<meta property="article:tag" content="森哥"> <meta property="article:tag" content="森哥">
<meta name="twitter:card" content="summary"> <meta name="twitter:card" content="summary">
<link rel="canonical" href="https://nicksxs.me/tags/java/">
<link rel="canonical" href="https://nicksxs.me/tags/Java/">
<script id="page-configurations"> <script id="page-configurations">
@ -53,7 +53,7 @@
}; };
</script> </script>
<title>Tag: java | Nicksxs's Blog</title>
<title>Tag: Java | Nicksxs's Blog</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-61358619-1"></script>
<script> <script>
@ -207,12 +207,75 @@
<div class="post-block"> <div class="post-block">
<div class="posts-collapse"> <div class="posts-collapse">
<div class="collection-title"> <div class="collection-title">
<h2 class="collection-header">java
<h2 class="collection-header">Java
<small>Tag</small> <small>Tag</small>
</h2> </h2>
</div> </div>
<div class="collection-year">
<span class="collection-header">2020</span>
</div>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-04-05T21:41:41+08:00"
content="2020-04-05">
04-05
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/04/05/Comparator%E4%BD%BF%E7%94%A8%E5%B0%8F%E8%AE%B0/" itemprop="url">
<span itemprop="name">Comparator使用小记</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-02-16T10:39:42+08:00"
content="2020-02-16">
02-16
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/02/16/Maven%E5%AE%9E%E7%94%A8%E5%B0%8F%E6%8A%80%E5%B7%A7/" itemprop="url">
<span itemprop="name">Maven实用小技巧</span>
</a>
</div>
</header>
</article>
<article itemscope itemtype="http://schema.org/Article">
<header class="post-header">
<div class="post-meta">
<time itemprop="dateCreated"
datetime="2020-02-09T20:52:02+08:00"
content="2020-02-09">
02-09
</time>
</div>
<div class="post-title">
<a class="post-title-link" href="/2020/02/09/G1%E6%94%B6%E9%9B%86%E5%99%A8%E6%A6%82%E8%BF%B0/" itemprop="url">
<span itemprop="name">G1收集器概述</span>
</a>
</div>
</header>
</article>
<div class="collection-year"> <div class="collection-year">
<span class="collection-header">2019</span> <span class="collection-header">2019</span>
</div> </div>
@ -222,15 +285,15 @@
<div class="post-meta"> <div class="post-meta">
<time itemprop="dateCreated" <time itemprop="dateCreated"
datetime="2019-09-23T23:40:05+08:00"
content="2019-09-23">
09-23
datetime="2019-12-07T00:54:19+08:00"
content="2019-12-07">
12-07
</time> </time>
</div> </div>
<div class="post-title"> <div class="post-title">
<a class="post-title-link" href="/2019/09/23/AbstractQueuedSynchronizer/" itemprop="url">
<span itemprop="name">AbstractQueuedSynchronizer</span>
<a class="post-title-link" href="/2019/12/07/JVM-G1-Part-1/" itemprop="url">
<span itemprop="name">JVM源码分析之G1垃圾收集器分析一</span>
</a> </a>
</div> </div>
@ -557,90 +620,6 @@
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script>
window.addEventListener('load', () => {
quicklink({
timeout : 3000,
priority: true,
ignores : [uri => uri.includes('#'),uri => uri === 'https://nicksxs.me/tags/java/',]
});
});
</script>
<script>
function loadCount() {
var d = document, s = d.createElement('script');
s.src = 'https://nicksxs.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
// defer loading until the whole page loading is completed
window.addEventListener('load', loadCount, false);
</script>
</body>
</html>
tchData('https://' + api_server);
});
}
})();
</script>
</div>
</footer>
</div>
<script src="/lib/anime.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script>
<script src="//cdn.jsdelivr.net/gh/fancyapps/fancybox@3/dist/jquery.fancybox.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/lozad@1/dist/lozad.min.js"></script>
<script src="/lib/velocity/velocity.min.js"></script>
<script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script>
<script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>
<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
bp.src = (curProtocol === 'https') ? 'https://zz.bdstatic.com/linksubmit/push.js' : 'http://push.zhanzhang.baidu.com/push.js';
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>
<script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script> <script src="//cdn.jsdelivr.net/npm/quicklink@1/dist/quicklink.umd.js"></script>
<script> <script>
window.addEventListener('load', () => { window.addEventListener('load', () => {


Loading…
Cancel
Save