Memcache 提高快取命中率

2021-09-06 18:52:49 字數 3121 閱讀 7039

1

2

3

4

define(『admin_username』,'admin』);

define(『admin_password』,'admin』);

$memcache_servers= 』127.0.0.1:11211′;

$memcache_servers= 』127.0.0.1:11212′;//可以多個監控

效果圖如下

問題出現了

發現命中率 以每天0.5%的速度下降 從原來的97%下降到了94%。

misses 的個數增長飛快。

從監控的variables看出,幾乎所有的items都集中在slab2裡,有將近8737個item。

那麼問題肯定出現在slab2所快取的資料上面。

開始查詢問題~

在linux下執行 memcached-tool 127.0.0.1:11211

slabid   chunk的大小   生命週期   page數量    快取項個數    是否已滿    被登出數?

看來slab 2 類的 page 資料儲存已滿 ,但page的個數並沒有增加,count已達到8738.

memcache守護程序為

memcached -d -m 10 -u root -p 11211

分配的記憶體只有10m , chunk的size 的倍數因子 -f 為預設的1.25

1

2

3

4

5

6

7

8

9

10

[root@]# memcached -u root -vv

slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       120 perslab    8738

slab class   3: chunk size       152 perslab    6898

slab class   4: chunk size       192 perslab    5461

slab class   5: chunk size       240 perslab    4369

slab class   6: chunk size       304 perslab    3449

slab class   7: chunk size       384 perslab    2730

slab class   8: chunk size       480 perslab    2184

...

10m的記憶體分給了過多的 slab,導致每個slab的pages 最多只能有1個,無法增加pages。

slab2的 count 已經達到了所能容納的最高值8738。不斷的有快取資料被evicted。

解決問題

新開乙個memcache守護程序

memcached -d -m 10 -f 2 -u root -p 11212

在專案**中將所有使用memcache 11211 slab2 的快取資料 介面位址改為 11212

1

2

3

[root@ ~]# /home/duyumi/memcached-tool 127.0.0.1:11212

#  item_size  max_age   pages   count   full?  evicted evict_time oom

2     192b      5190s       2    8001      no        0        0    0

pages數增加為2,count達到了8001,並沒有full,乙個page的最大chunk為5461,每個chunk的大小為192b

1

2

3

4

5

[root@ ~]# memcached -u root -f 2 -vv

slab class   1: chunk size        96 perslab   10922

slab class   2: chunk size       192 perslab    5461

slab class   3: chunk size       384 perslab    2730

....

快取項並沒有被evicted。

ok,問題解決了

提高快取命中率

原因是快取不存在或者快取已過期 通過redis提供的info命令檢視引數 命令 127.0.0.1 info輸出 expired keys 2061008 evicted keys 0 keyspace hits 19528495 keyspace misses 2915371計算公式 命中率 擊中...

如何提高快取命中率

命中 可以直接通過快取獲取到需要的資料。不命中 無法直接通過快取獲取到想要的資料,需要再次查詢資料庫或者執行其它的操作。原因可能是由於快取中根本不存在,或者快取已經過期。通常來講,快取的命中率越高則表示使用快取的收益越高,應用的效能越好 響應時間越短 吞吐量越高 抗併發的能力越強。由此可見,在高併發...

快取命中率

安裝 docker redis 查詢乙個不存在的key 127.0.0.1 6379 get test nil 在看命中率 新插入乙個值 name 127.0.0.1 6379 set name jackma ok查詢name 127.0.0.1 6379 get name jackma 再看命中率...