memcache1.5.8——slab自动分配验证

1、首先需要再启动的时候这样:
memcached -d -m 4 -u root -p 11211 -o slab_reassign,slab_automove=1

2、然后利用python脚本写入memcache进行测试

写小数据的程序

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from pymemcache.client.hash import HashClient

server = [('localhost', 11211), ('localhost', 11212)]
server = server[:1]

if __name__ == '__main__':
    print(server)
    mc = HashClient(server)
    count = 50000
    while (count > 0):
        key = "eeee%.5d" % count
        mc.set(key, "a", 30)
        # mc.get(key)
        print(key)
        count -= 1
    print('ok...')

写大数据的程序

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from pymemcache.client.hash import HashClient
import uuid

server = [('localhost', 11211), ('localhost', 11212)]
server = server[:1]

if __name__ == '__main__':
    print(server)
    mc = HashClient(server)
    count = 30000
    while (count > 0):
        key = "cccc%.5d" % count
        value = str(uuid.uuid4()) + str(uuid.uuid4()) + str(uuid.uuid4())
        mc.set(key, value)
        # mc.get(key)
        print(key)
        count -= 1
    print('ok...')

为了方便查看结果,我们这样,先把启动参数修改成这样(注意在生产环境中不要把slab_automove设置为2):
memcached -d -m 8 -u root -p 11211 -o slab_reassign,slab_automove=2
然后,我们先运行一下保存小数据量的程序,然后看一下memcache中的状态。


稍等一会。等待小数据都过期


这时,保存大数据量的数据。

能够看到,现在是把已经分配给slab 1的page重新分配给了slab 4。
那么这个时候会不会有LRU淘汰呢?答案是会的。

内部的机制是如果发现当前的有LRU淘汰,那么会从其他有空闲的slab中抢过来一个页。同时在stats命令中能够看到已经进行slabs_moved的次数。

现在再次扩大slab 4中的存储内容,然后看一下效果。


能够看到slab4 又抢走了slab1一个page



猜你喜欢

转载自blog.csdn.net/wild46cat/article/details/80916892