redis-cluster体验之初步功能测试

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 联动帖:http://blog.itpub.net/29510932/viewspace-1788524/ 这是一篇很简短的博文 ----------------------------------------------------------------...
联动帖:http://blog.itpub.net/29510932/viewspace-1788524/

这是一篇很简短的博文

----------------------------------------------------------- ----- -------- --------- --------- -------正文 ------ ---------- ---------- ------- ------- ---------- ---------- ---------- ------- ---------- ---------- --------

目的:联动帖已经搭建好了cluster的环境,写一个cluster的测试示例来简单验证一下cluster的功能

结果:等待详细评估以后,再考虑在简单的业务上进行生产使用

过程:

使用jedis-2.7.3和commons-pool2,尽量使用最新版

代码

点击(此处)折叠或打开

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. import redis.clients.jedis.HostAndPort;
  4. import redis.clients.jedis.JedisCluster;
  5. public class jedis
  6. {
  7.     public static void main( String[] args )
  8.     {
  9.         Set<HostAndPort> clusterNodes = new HashSet<HostAndPort>();
  10.         // 这里只需要列出集群中的一个节点
  11.         // JedisCluster 会自行通过cluster nodes来获取其他的集群节点
  12.         clusterNodes.add(new HostAndPort("10.16.68.183", 7000));
  13.         /*
  14.         clusterNodes.add(new HostAndPort("10.16.68.183", 7001));
  15.         clusterNodes.add(new HostAndPort("10.16.68.183", 7002));
  16.         clusterNodes.add(new HostAndPort("10.16.68.183", 7003));
  17.         clusterNodes.add(new HostAndPort("10.16.68.183", 7004));
  18.         clusterNodes.add(new HostAndPort("10.16.68.183", 7005));
  19.         clusterNodes.add(new HostAndPort("10.16.68.183", 7006));
  20.         clusterNodes.add(new HostAndPort("10.16.68.183", 7007));
  21.         */
  22.         JedisCluster cluster = new JedisCluster(clusterNodes,3000,1000);//cluster节点,超时时间,最大重定向数
  23.         // set/get试验
  24.         /*
  25.         cluster.set("cluster test", "hello jedis cluster!");
  26.         String value = cluster.get("foo");
  27.         System.out.println("foo = " + value);
  28.         */
  29.         cluster.incr("counter");
  30.         System.out.println("counter = " + cluster.get("counter"));
  31.         cluster.incr("counter");
  32.         System.out.println("counter = " + cluster.get("counter"));
  33.         // get cluster nodes
  34.         System.out.println("------- cluster nodes --------");
  35.         /*
  36.         Map<String, JedisPool> nodes = cluster.getClusterNodes();
  37.         Iterator<Map.Entry<String, JedisPool>> iterNodes = nodes.entrySet().iterator();
  38.         while (iterNodes.hasNext()) 
  39.         {
  40.             Map.Entry<String, JedisPool> entry = iterNodes.next();
  41.             Jedis jedis = entry.getValue().getResource();
  42.             System.out.println("============");
  43.             System.out.println(entry.getKey() + "\n" + jedis.info());
  44.         }
  45.         // 循环结束
  46.         System.out.println("------- end --------");
  47.         */
  48.         cluster.close();
  49.     }
  50. }


红色字体标出了与普通redis不同的地方,一部分特性也在代码中已注释标明,简单看了一下cluster的函数列表,基本上单点redis的命令都支持了,接下来记录一部分redis-cluster使用过程已经发现的问题

1.创建cluster Node的时候,或者是操作cluster Node的时候,出现如下错误

redis.clients.jedis.exceptions.JedisClusterMaxRedirectionsException: Too many Cluster redirections?
解决办法:
a. 在创建cluster的时候,带上超时时间和最大重定向数;
b. 检查cluster Node的状态,如果某个cluster node在加入集群的时候,使用的是127.0.0.1:port的形式,那么客户端 在连接这个Node,在 -MOVE转移request的时候会出现问题,其实是连接超时(但是抛出的异常却是一个坑爹的连接数太多,而且还是个疑问句....), 所以集群在配置的时候务必带上详细的IP

2.redis-cluster没有pipeline

无解,因为redis-cluster的数据是垂直切分的,这意味着不同的key按照不同的策略被分配到了不同的Node上, 所以pipeline里面的request[A,B,C,D,E,F ]经过转发以后,可能[A,B]发往了Node1,[C ]在Node2上面处理, [D,E,F]转发到Node3,最终的response无法保证为[A,B,C,E,D,F]的顺序。cluster干脆就不让用pipeline了

3.redis-benchmark目前不能对cluster进行压力测试

所以没办法进行严密的对比测试,如果采用比较小的数据量,可以跑跑试试看效果, 但是结论必定是不严谨的,仅仅看看就好,所以不贴测试结果了,
从原理来看,在轻负载和中等负载下, 使用cluster会少量的增加延迟,但是会有更高的operation/s的上限

4.redis-cluster会丢失分片的数据

联动帖里面阐述过redis-cluster丢失数据的一种可能性, 在这里要写的就是redis-cluster有可能会丢失整个分片的数据的一种情况,一般来说,如果某个Master挂掉了,对应的s lave会变成新的Master处理request,但是如果这个Master对应的所有的slave都挂了的话,这一组分片保存的数据在这些Node恢复之前是不可访问和操作的,所以在初始化redis-cluster的时候,replica的数量需要好好斟酌,MS的分布也需要尽量规划好,避免某个分片所有的Node 全部挂掉



-----------------------------------------------------------------------------------------------简短的小尾巴~-------------------------------------------------------------------------------------------------------
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
2月前
|
NoSQL 测试技术 Redis
Redis 性能测试
10月更文挑战第21天
39 2
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
35 3
|
2月前
|
存储 Prometheus NoSQL
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
大数据-44 Redis 慢查询日志 监视器 慢查询测试学习
26 3
|
2月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
57 3
|
4月前
|
NoSQL Java Linux
Redis6入门到实战------ 六、Redis_Jedis_测试
这篇文章介绍了如何使用Jedis客户端连接Redis,并进行基本的数据类型操作测试,包括字符串、列表、集合、哈希和有序集合的相关API使用示例。
Redis6入门到实战------ 六、Redis_Jedis_测试
|
4月前
|
NoSQL Java Linux
Jedis测试redis。(redis在linux虚拟机中)
该博客文章提供了使用Jedis客户端连接Linux虚拟机中的Redis服务器的步骤,包括Maven依赖配置、测试用例编写以及测试结果的截图。
|
4月前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
【Azure Redis 缓存 Azure Cache For Redis】使用Redis自带redis-benchmark.exe命令测试Azure Redis的性能
|
4月前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
【Azure Redis 缓存 Azure Cache For Redis】在创建高级层Redis(P1)集成虚拟网络(VNET)后,如何测试VNET中资源如何成功访问及配置白名单的效果
|
6月前
|
存储 缓存 NoSQL
Redis性能测试实操记录与分析
Redis性能测试实操记录与分析
84 3
|
6月前
|
NoSQL Redis 数据安全/隐私保护
连接测试服务器redis
连接测试服务器redis