2、Redis集群的调用

来源:互联网 发布:软件编程成果展板 编辑:程序博客网 时间:2024/06/09 21:46

前言:

在上篇文章中讲到了redis集群环境的搭建,本次将讲解下redis集群的调用,对大多程序员来讲大多数操作还是调用集群环境,对于环境的搭建,后期的维护是不太关心的,
不过手动构建测试环境还是很有必要的。


redis-cli 调用

通过redis-server 启动redis的服务,对应存在命令 redis-cli作为客户端去调用服务器。在redis单机情况下,我们都是这么调用redis服务的
./redis-cli  -h 192.168.1.103 -p 7001

      如果需要调用集群环境,需要增加 -c参数 ,即:

./redis-cli -c -h 192.168.1.103 -p 7001

连接到服务器后,进行简单的操作
mac:bin lkl$ ./redis-cli -c -h 192.168.1.103 -p 7001192.168.1.103:7001> set name liaokailin
设置了一个简单的key-value 
note: 本系列文章,只针对redis的集群,不阐述redis的基本操作,如有需要可自行搜索。

Enter后 

mac:bin lkl$ ./redis-cli -c -h 192.168.1.103 -p 7001192.168.1.103:7001> set name liaokailinOK192.168.1.103:7001> get name"liaokailin"192.168.1.103:7001> 

一切正常,那么连接 7004

mac:bin lkl$ ./redis-cli -c -h 192.168.1.103 -p 7004192.168.1.103:7004> set hello world-> Redirected to slot [866] located at 192.168.1.103:7000OK192.168.1.103:7000> 
      此时发现,连接到7004这个节点后,设置一个简单的key,操作跳转到7000这个节点,这是为什么呢???


7004做为slave节点存在,在redis cluster中,slave node是不支持写操作的,slave是为了保证高可用的。在对slave操作时会主动切换到master来操作的。
切换到7000后,由于7000和7001是在同一集群下,因此在7000下同样能获取到7001中设置的key

192.168.1.103:7000> get name-> Redirected to slot [5798] located at 192.168.1.103:7001"liaokailin"192.168.1.103:7001> 

操作成功~~


jedis 调用

jedis为redis的java调用客户端开发包,需要注意的是,jedis的低版本中是不能支持redis的集群调用的

配置maven 


  <dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>2.7.2</version></dependency>


下面给出我写的一段小程序,easy

package com.lkl.redis;import java.util.HashSet;import java.util.Set;import redis.clients.jedis.HostAndPort;import redis.clients.jedis.JedisCluster;/** * test redis cluster *  * @author lkl * @version $Id: App.java, v 0.1 2015年8月13日 下午11:24:16 lkl Exp $ */public class App {    public static void main(String[] args) {        String clusterConfig = "192.168.1.103:7000 192.168.1.103:7001 192.168.1.103:7002 192.168.1.103:7003 192.168.1.103:7004 192.168.1.103:7005";        Set<HostAndPort> jedisClusterNodes = new HashSet<HostAndPort>();        jedisClusterNodes.addAll(configRedisCluster(clusterConfig));        JedisCluster jc = new JedisCluster(jedisClusterNodes);        jc.set("foo", "bar");        System.out.println(jc.get("foo"));    }    public static final String NODE_DELIMITER = "; ,";    public static Set<HostAndPort> configRedisCluster(String clusterNodes) {        Set<HostAndPort> nodeSet = new HashSet<HostAndPort>();        char[] cc = NODE_DELIMITER.toCharArray();        for (int i = 0; i < cc.length; i++) {            if (clusterNodes.indexOf(cc[i]) != -1) {                String[] nodes = clusterNodes.split(cc[i] + "");                if (nodes != null && nodes.length > 0) {                    for (int j = 0; j < nodes.length; j++) {                        nodeSet.add(new HostAndPort(nodes[j].split(":")[0], Integer.valueOf(nodes[j].split(":")[1])));                    }                    break;                }            } else {                continue;            }        }        return nodeSet;    }}



redis-desk-manager

redis-desk-manager为redis的可视化工具,一般我都不使用,有兴趣的同学可自行研究下。














1 0