Java中使用Jedis操作Redis

前言:

    在前面的redis文章已经对单机版和集群版的redis进行了搭建,这里介绍一下java中使用jedis操作Redis。

jedis的使用

添加maven依赖

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
    </dependency>
     <!-- Redis客户端 -->  
    <dependency>
        <groupId>redis.clients</groupId>  
        <artifactId>jedis</artifactId>  
        <version>2.7.2</version>  
    </dependency>

测试类

大家可以使用Redis Desktop Manager作为数据查看工具:
https://redisdesktop.com/

/**
 * 
 * @author lpl
 *
 */
public class RedisTest {

    private Jedis jedis;
    private JedisCluster jedis;

    @Before//初始化方法
    public void setup(){
       // 连接redis服务器,192.168.17.185:6379  单机版链接方式 
       //jedis = new Jedis("192.168.251.129","6379");

        // 创建一个JedisCluster对象
        Set<HostAndPort> nodes = new HashSet<>();
        nodes.add(new HostAndPort("192.168.251.129", 7001));
        nodes.add(new HostAndPort("192.168.251.129", 7002));
        nodes.add(new HostAndPort("192.168.251.129", 7003));
        nodes.add(new HostAndPort("192.168.251.129", 7004));
        nodes.add(new HostAndPort("192.168.251.129", 7005));
        nodes.add(new HostAndPort("192.168.251.129", 7006));
        // 在nodes中指定每个节点的地址
        // jedisCluster在系统中是单例的。
        jedis = new JedisCluster(nodes);

    }
    //字符串测试
    @Test
    public void testString(){
        //测试链接
        //System.out.println(jedis);

        //添加数据
        jedis.set("name", "dalei");
        System.out.println(jedis.get("name"));
        //拼接
        jedis.append("name", "is a boy");//拼接
        System.out.println("拼接后:"+jedis.get("name"));
        //删除键name
        jedis.del("name");
        //对key中的数字值进行加一操作
        jedis.incr("age");
        //
        System.out.println(jedis.get("name")+"-"+jedis.get("age"));
    }
    //map测试
    @Test
    public void testMap(){
        //存储数据
        Map<String,String> map = new HashMap<String,String>();
        map.put("name", "dalei");
        map.put("age", "23");
        map.put("sex", "男");
        jedis.hmset("user", map);
        //获得数据
        //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,后面的key可以跟多个,是可变参数
        List<String> hmget = jedis.hmget("user", "name","age","sex");
        System.out.println(hmget);

        //删除map中的某个键值
        jedis.hdel("user", "sex");
        System.out.println(jedis.hmget("user", "sex")); // 因为删除了,所以返回的是null
        System.out.println(jedis.hlen("user")); // 返回key为user的键中存放的值的个数2
        System.out.println(jedis.exists("user"));// 是否存在key为user的记录 返回true
        System.out.println(jedis.hkeys("user"));// 返回map对象中的所有key
        System.out.println(jedis.hvals("user"));// 返回map对象中的所有value
        //遍历map中的值
        Iterator<String> iter = jedis.hkeys("user").iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + jedis.hmget("user", key));
        }
    }
    /**  
    * jedis操作List  
    */    
    @Test    
    public void testList() {
        // 开始前,先移除所有的内容
        jedis.del("java framework");
        System.out.println(jedis.lrange("java framework", 0, -1));
        // 先向key java framework中存放三条数据
        //Lpush将一个值插入到已存在的列表头部
        jedis.lpush("java framework", "spring");
        jedis.lpush("java framework", "struts");
        jedis.lpush("java framework", "hibernate");
        // 再取出所有数据jedis.lrange是按范围取出,
        // 第一个是key,第二个是起始位置,第三个是结束位置,jedis.llen获取长度 -1表示取得所有
        System.out.println(jedis.lrange("java framework", 0, -1));

        jedis.del("java framework");
        //rpush在列表中插入一条记录
        jedis.rpush("java framework", "spring");
        jedis.rpush("java framework", "struts");
        jedis.rpush("java framework", "hibernate");
        System.out.println(jedis.lrange("java framework", 0, -1));
    }

    /**  
     * jedis操作Set  
     */    
    @Test    
    public void testSet(){    
        //添加    
        jedis.sadd("student","liuling");    
        jedis.sadd("student","xinxin");    
        jedis.sadd("student","ling");    
        jedis.sadd("student","zhangxinxin");  
        jedis.sadd("student","who");    
        //移除noname    
        jedis.srem("student","who");    
        System.out.println(jedis.smembers("student"));//获取所有加入的value    
        System.out.println(jedis.sismember("student", "who"));//判断 who 是否是user集合的元素    
        System.out.println(jedis.srandmember("student"));    
        System.out.println(jedis.scard("student"));//返回集合的元素个数    
    } 
    //jedis 排序  
    @Test    
    public void test() throws InterruptedException {    
        //注意,此处的rpush和lpush是List的操作。是一个双向链表(但从表现来看的)    
        jedis.del("a");//先清除数据,再加入数据进行测试    
        jedis.rpush("a", "1");    
        jedis.lpush("a","6");    
        jedis.lpush("a","3");    
        jedis.lpush("a","9");    
        System.out.println(jedis.lrange("a",0,-1));// [9, 3, 6, 1]    
        System.out.println(jedis.sort("a")); //[1, 3, 6, 9]  //输入排序后结果    
        System.out.println(jedis.lrange("a",0,-1));    
    }  

}

遇到的错误

报错1:集群no reachable node in cluster的错误
解决:1.确定每个redis配置文件中的bind是你客户端的ip (我的设置为0.0.0.0,任何ip都可以访问)2.开放端口(关闭虚拟机的防火墙)

报错2:JedisClusterMaxRedirectionsException: Too many Cluster redirections
原因:查看http://blog.csdn.net/l2000h_ing/article/details/52806933
解决:删除每个redis中的node.conf和nump. dump.rdb
重新运行:./redis-trib.rb create –replicas 1 192.168.251.129:7001 192.168.
251.129:7002 192.168.251.129:7003 192.168.251.129:7004 192.168.251.129:7005 192.168.251.129:7006

报错3:redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value
原因:因为redis数据库中已经存在了相同的key, 而且key对应的值类型并不是HashMap;再调用hmset时,就会抛出此错误。
解决:将原来的数据清除掉就可以了

参考资料:

1.http://www.cnblogs.com/liuling/p/2014-4-19-04.html
2.http://blog.csdn.net/qq_34021712/article/details/70274204

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值