公司使用twemproxy + pika存放一些永久的缓存数据,节点扩容情况如下
1. 新建pika03,pika04,分别和pika01,pika02进行主从同步。
2. 观察同步数据完成,断开主从。
# -*- coding:utf-8 -*- __author__ = 'wangwenjie' import redis import time import sys #定义server数量 #建立redis连接 def hash_fnv1a_64(s): #实现fnv1a_64 hash算法 UINT32_MAX = 2 ** 32 FNV_64_INIT = 0xcbf29ce484222325 % UINT32_MAX FNV_64_PRIME = 0x100000001b3 % UINT32_MAX hval = FNV_64_INIT for c in s: hval = hval ^ ord(c) hval = (hval * FNV_64_PRIME) % UINT32_MAX return hval def cleanKey(key,conn): #删除Key conn.delete(key) def scanKey(conn): r = conn n, l = r.scan(0, count=50)#每次取50个key while True: time.sleep(1) for i in l: modula = hash_fnv1a_64(i) % count #对key的hash值进行取余 if modula != index: #如果取余结果不等余当前服务器的index,则认定nutcracker不会将这个key的请求传到这个机器上可以删除 print i cleanKey(i,r)#删除key if n == 0: #如果resutl count = 0 那么证明已经scan完所有的key,中断循环 return n,l = r.scan(n,count=50) if __name__ == "__main__": host = sys.argv[1] port = int(sys.argv[2]) count = int(sys.argv[3]) index = int(sys.argv[4]) r = redis.Redis(host=host, port=port) scanKey(r)