概述
twemproxy(发音"two-em-proxy"),是一个memcached和redis协议的快速而轻量级的代理。它的建立主要是减少后端缓存服务器上的连接。基于这一点,协议流水线和分片一起使你能够水平缩放你的分布式缓存架构,它最大的特性和优势就是可以水平缩放分布式缓存架构,如果你的应用内存数据量会不断增加且较大,强烈建议使用它。
注意:因为做了分片,所以有一些命令是不支持的,查看不支持的命令列表;
特性
- 实现完整的memcached ascii 和 redis协议
- 支持Linux,*BSD,OS X 和 SmartOS(Salaris)
部署架构图

- Twemproxy实际上只是一个代理,不保存任何数据,只建立client和Redis实例的通道;
- 添加缓存数据时通过一定的算法将数据分片进入不同的Redis实例。
用法
客户端是使用非常简单,只需要将原来单机redis的地址改为代理的地址即可,注意同时连接多个代理稍微有些不同,建议使用这种方式
public
static
void
testMultiTwemproxy(){
Set<HostAndPort> jedisClusterNodes =
new
HashSet<HostAndPort>();
jedisClusterNodes.add(
new
HostAndPort(
"192.168.45.135"
,
22122
));
jedisClusterNodes.add(
new
HostAndPort(
"192.168.45.136"
,
22122
));
JedisCluster jc =
new
JedisCluster(jedisClusterNodes);
for
(
int
i =
0
; i <
10000
; i++) {
String key =
"singlekey"
+ i;
jc.set(key,
"singleValue"
+ i);
System.out.println(jc.get(key));
}
String value = jc.get(
"foo"
);
}
|
public
static
void
testSingleProxy()
throws
Exception{
Jedis jedis =
new
Jedis(
"192.168.45.136"
,
22122
);
for
(
int
i =
0
; i <
10000000
; i++) {
try
{
String key =
"testkey"
+ i;
jedis.set(key,
"value"
+ i);
System.out.println(jedis.get(key));
Thread.sleep(
5
);
}
catch
(Exception e) {
e.printStackTrace();
Thread.sleep(
1000
);
i--;
}
}
}
|