Java中使用Jedis操作Redis
2017-12-14 13:05
423 查看
前言:
在前面的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.html2.http://blog.csdn.net/qq_34021712/article/details/70274204
相关文章推荐
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- java操作redis。jedis使用api
- Java中使用Jedis操作Redis
- Jedis学习使用(java操作redis)
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- java操作redis。jedis使用api
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis
- Java中使用Jedis操作Redis之二