Java中使用Jedis操作Redis
《Java中使用Jedis操作Redis》由会员分享,可在线阅读,更多相关《Java中使用Jedis操作Redis(24页珍藏版)》请在装配图网上搜索。
1、文档供参考,可复制、编制,期待您的好评与关注! Jedis 是 Redis 官方首选的 Java 客户端开发包。工作过程总结的一个示例,贴出来,如下:Java代码packagecom.wujintao.redis;importjava.util.Date;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;importorg.junit.Test;importredis.clients.jedis.Jedis;importred
2、is.clients.jedis.Pipeline;importredis.clients.jedis.SortingParams;importcom.wujintao.redis.util.RedisUtil;publicclassTestCase/*在不同的线程中使用相同的Jedis实例会发生奇怪的错误。但是创建太多的实现也不好因为这意味着会建立很多sokcet连接,*也会导致奇怪的错误发生。单一Jedis实例不是线程安全的。为了避免这些问题,可以使用JedisPool,*JedisPool是一个线程安全的网络连接池。可以用JedisPool创建一些可靠Jedis实例,可以从池中拿到Jed
3、is的实例。*这种方式可以解决那些问题并且会实现高效的性能*/publicstaticvoidmain(Stringargs)/.whenclosingyourapplication:RedisUtil.getPool().destroy();publicstaticvoidHello()Jedisjedis=RedisUtil.getJedis();try/向key-name中放入了value-minxrjedis.set(name,minxr);Stringss=jedis.get(name);System.out.println(ss);/很直观,类似map将jintaoappend到已
4、经有的value之后jedis.append(name,jintao);ss=jedis.get(name);System.out.println(ss);/2、直接覆盖原来的数据jedis.set(name,jintao);System.out.println(jedis.get(jintao);/删除key对应的记录jedis.del(name);System.out.println(jedis.get(name);/执行结果:null/*mset相当于jedis.set(name,minxr);jedis.set(jarorwar,aaa);*/jedis.mset(name,minxr
5、,jarorwar,aaa);System.out.println(jedis.mget(name,jarorwar);catch(Exceptione)e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);privatevoidtestKey()Jedisjedis=RedisUtil.getJedis();System.out.println(=key=);/清空数据System.out.println(jedis.flushDB();System.out.println(jedis.echo(foo);/
6、判断key否存在System.out.println(jedis.exists(foo);jedis.set(key,values);System.out.println(jedis.exists(key);publicstaticvoidtestString()System.out.println(=String=);Jedisjedis=RedisUtil.getJedis();try/Stringjedis.set(key,HelloWorld!);Stringvalue=jedis.get(key);System.out.println(value);catch(Exceptione)
7、e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);System.out.println(=String=);/清空数据System.out.println(jedis.flushDB();/存储数据jedis.set(foo,bar);System.out.println(jedis.get(foo);/若key不存在,则存储jedis.setnx(foo,foonotexits);System.out.println(jedis.get(foo);/覆盖数据jedis.set(foo,fooupdate)
8、;System.out.println(jedis.get(foo);/追加数据jedis.append(foo,hello,world);System.out.println(jedis.get(foo);/设置key的有效期,并存储数据jedis.setex(foo,2,foonotexits);System.out.println(jedis.get(foo);tryThread.sleep(3000);catch(InterruptedExceptione)System.out.println(jedis.get(foo);/获取并更改数据jedis.set(foo,fooupdate
9、);System.out.println(jedis.getSet(foo,foomodify);/截取value的值System.out.println(jedis.getrange(foo,1,3);System.out.println(jedis.mset(mset1,mvalue1,mset2,mvalue2,mset3,mvalue3,mset4,mvalue4);System.out.println(jedis.mget(mset1,mset2,mset3,mset4);System.out.println(jedis.del(newStringfoo,foo1,foo3);pub
10、licstaticvoidtestList()System.out.println(=List=);Jedisjedis=RedisUtil.getJedis();try/开始前,先移除所有的内容jedis.del(messages);jedis.rpush(messages,Hellohowareyou?);jedis.rpush(messages,Finethanks.Imhavingfunwithredis.);jedis.rpush(messages,IshouldlookintothisNOSQLthingASAP);/再取出所有数据jedis.lrange是按范围取出,/第一个是k
11、ey,第二个是起始位置,第三个是结束位置,jedis.llen获取长度-1表示取得所有Listvalues=jedis.lrange(messages,0,-1);System.out.println(values);catch(Exceptione)e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);/清空数据System.out.println(jedis.flushDB();/添加数据jedis.lpush(lists,vector);jedis.lpush(lists,ArrayList);jedis
12、.lpush(lists,LinkedList);/数组长度System.out.println(jedis.llen(lists);/排序System.out.println(jedis.sort(lists);/字串System.out.println(jedis.lrange(lists,0,3);/修改列表中单个值jedis.lset(lists,0,hellolist!);/获取列表指定下标的值System.out.println(jedis.lindex(lists,1);/删除列表指定下标的值System.out.println(jedis.lrem(lists,1,vector
13、);/删除区间以外的数据System.out.println(jedis.ltrim(lists,0,1);/列表出栈System.out.println(jedis.lpop(lists);/整个列表值System.out.println(jedis.lrange(lists,0,-1);publicstaticvoidtestSet()System.out.println(=Set=);Jedisjedis=RedisUtil.getJedis();tryjedis.sadd(myset,1);jedis.sadd(myset,2);jedis.sadd(myset,3);jedis.sa
14、dd(myset,4);SetsetValues=jedis.smembers(myset);System.out.println(setValues);/移除nonamejedis.srem(myset,4);System.out.println(jedis.smembers(myset);/获取所有加入的valueSystem.out.println(jedis.sismember(myset,4);/判断minxr/是否是sname集合的元素System.out.println(jedis.scard(sname);/返回集合的元素个数catch(Exceptione)e.printSt
15、ackTrace();finallyRedisUtil.getPool().returnResource(jedis);/清空数据System.out.println(jedis.flushDB();/添加数据jedis.sadd(sets,HashSet);jedis.sadd(sets,SortedSet);jedis.sadd(sets,TreeSet);/判断value是否在列表中System.out.println(jedis.sismember(sets,TreeSet);/整个列表值System.out.println(jedis.smembers(sets);/删除指定元素Sy
16、stem.out.println(jedis.srem(sets,SortedSet);/出栈System.out.println(jedis.spop(sets);System.out.println(jedis.smembers(sets);/jedis.sadd(sets1,HashSet1);jedis.sadd(sets1,SortedSet1);jedis.sadd(sets1,TreeSet);jedis.sadd(sets2,HashSet2);jedis.sadd(sets2,SortedSet1);jedis.sadd(sets2,TreeSet1);/交集System.o
17、ut.println(jedis.sinter(sets1,sets2);/并集System.out.println(jedis.sunion(sets1,sets2);/差集System.out.println(jedis.sdiff(sets1,sets2);publicstaticvoidsortedSet()System.out.println(=SoretedSet=);Jedisjedis=RedisUtil.getJedis();tryjedis.zadd(hackers,1940,AlanKay);jedis.zadd(hackers,1953,RichardStallman)
18、;jedis.zadd(hackers,1965,YukihiroMatsumoto);jedis.zadd(hackers,1916,ClaudeShannon);jedis.zadd(hackers,1969,LinusTorvalds);jedis.zadd(hackers,1912,AlanTuring);SetsetValues=jedis.zrange(hackers,0,-1);System.out.println(setValues);SetsetValues2=jedis.zrevrange(hackers,0,-1);System.out.println(setValues
19、2);catch(Exceptione)e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);/清空数据System.out.println(jedis.flushDB();/添加数据jedis.zadd(zset,10.1,hello);jedis.zadd(zset,10.0,:);jedis.zadd(zset,9.0,zset);jedis.zadd(zset,11.0,zset!);/元素个数System.out.println(jedis.zcard(zset);/元素下标System.out.pr
20、intln(jedis.zscore(zset,zset);/集合子集System.out.println(jedis.zrange(zset,0,-1);/删除元素System.out.println(jedis.zrem(zset,zset!);System.out.println(jedis.zcount(zset,9.5,10.5);/整个集合值System.out.println(jedis.zrange(zset,0,-1);publicstaticvoidtestHsh()System.out.println(=Hash=);Jedisjedis=RedisUtil.getJed
21、is();tryMappairs=newHashMap();pairs.put(name,Akshi);pairs.put(age,2);pairs.put(sex,Female);jedis.hmset(kid,pairs);Listname=jedis.hmget(kid,name);/结果是个泛型的LIST/jedis.hdel(kid,age);/删除map中的某个键值System.out.println(jedis.hmget(kid,pwd);/因为删除了,所以返回的是nullSystem.out.println(jedis.hlen(kid);/返回key为user的键中存放的值
22、的个数System.out.println(jedis.exists(kid);/是否存在key为user的记录System.out.println(jedis.hkeys(kid);/返回map对象中的所有keySystem.out.println(jedis.hvals(kid);/返回map对象中的所有valueIteratoriter=jedis.hkeys(kid).iterator();while(iter.hasNext()Stringkey=iter.next();System.out.println(key+:+jedis.hmget(kid,key);Listvalues=
23、jedis.lrange(messages,0,-1);values=jedis.hmget(kid,newStringname,age,sex);System.out.println(values);SetsetValues=jedis.zrange(hackers,0,-1);setValues=jedis.hkeys(kid);System.out.println(setValues);values=jedis.hvals(kid);System.out.println(values);pairs=jedis.hgetAll(kid);System.out.println(pairs);
24、catch(Exceptione)e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);/清空数据System.out.println(jedis.flushDB();/添加数据jedis.hset(hashs,entryKey,entryValue);jedis.hset(hashs,entryKey1,entryValue1);jedis.hset(hashs,entryKey2,entryValue2);/判断某个值是否存在System.out.println(jedis.hexists(hashs,en
25、tryKey);/获取指定的值System.out.println(jedis.hget(hashs,entryKey);/批量获取指定的值System.out.println(jedis.hmget(hashs,entryKey,entryKey1);/删除指定的值System.out.println(jedis.hdel(hashs,entryKey);/为key中的域field的值加上增量incrementSystem.out.println(jedis.hincrBy(hashs,entryKey,123l);/获取所有的keysSystem.out.println(jedis.hke
26、ys(hashs);/获取所有的valuesSystem.out.println(jedis.hvals(hashs);publicstaticvoidtestOther()throwsInterruptedExceptionJedisjedis=RedisUtil.getJedis();try/keys中传入的可以用通配符System.out.println(jedis.keys(*);/返回当前库中所有的keysose,sanme,/name,jarorwar,foo,/sname,javaframework,/user,braandSystem.out.println(jedis.key
27、s(*name);/返回的snamesname,nameSystem.out.println(jedis.del(sanmdde);/删除key为sanmdde的对象删除成功返回1/删除失败(或者不存在)返回0System.out.println(jedis.ttl(sname);/返回给定key的有效时间,如果是-1则表示永远有效jedis.setex(timekey,10,min);/通过此方法,可以指定key的存活(有效时间)时间为秒Thread.sleep(5000);/睡眠5秒后,剩余时间将为=5System.out.println(jedis.ttl(timekey);/输出结果为
28、5jedis.setex(timekey,1,min);/设为1后,下面再看剩余时间就是1了System.out.println(jedis.ttl(timekey);/输出结果为1System.out.println(jedis.exists(key);/检查key是否存在System.out.println(jedis.rename(timekey,time);System.out.println(jedis.get(timekey);/因为移除,返回为nullSystem.out.println(jedis.get(time);/因为将timekey重命名为time/所以可以取得值min
29、/jedis排序/注意,此处的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,1System.out.println(jedis.sort(a);/1,3,6,9/输入排序后结果System.out.println(jedis.lrange(a,0,-1);catch(Exception
30、e)e.printStackTrace();finallyRedisUtil.getPool().returnResource(jedis);org.junit.TestpublicvoidtestUnUsePipeline()longstart=newDate().getTime();Jedisjedis=RedisUtil.getJedis();for(inti=0;i10000;i+)jedis.set(age1+i,i+);jedis.get(age1+i);/每个操作都发送请求给redis-serverlongend=newDate().getTime();System.out.pr
31、intln(unusepipelinecost:+(end-start)+ms);RedisUtil.getPool().returnResource(jedis);org.junit.Test/*参考:*/publicvoidtestUsePipeline()longstart=newDate().getTime();Jedisjedis=RedisUtil.getJedis();jedis.flushDB();Pipelinep=jedis.pipelined();for(inti=0;i10000;i+)p.set(age2+i,i+);System.out.println(p.get(
32、age2+i);p.sync();/这段代码获取所有的responselongend=newDate().getTime();System.out.println(usepipelinecost:+(end-start)+ms);RedisUtil.getPool().returnResource(jedis);org.junit.Test/*时间复杂度:O(N+M*log(M),N为要排序的列表或集合内的元素数量,M为要返回的元素数量。如果只是使用SORT命令的GET选项获取数据而没有进行排序,时间复杂度O(N)。*/publicvoidtestSort1()/排序默认以数字作为对象,值被解
33、释为双精度浮点数,然后进行比较Jedisredis=RedisUtil.getJedis();/一般SORT用法最简单的SORT使用方法是SORTkey。redis.lpush(mylist,1);redis.lpush(mylist,4);redis.lpush(mylist,6);redis.lpush(mylist,3);redis.lpush(mylist,0);/Listlist=redis.sort(sort);/默认是升序SortingParamssortingParameters=newSortingParams();sortingParameters.desc();/sort
34、ingParameters.alpha();/当数据集中保存的是字符串值时,你可以用ALPHA/修饰符(modifier)进行排序。sortingParameters.limit(0,2);/可用于分页查询Listlist=redis.sort(mylist,sortingParameters);/默认是升序for(inti=0;i用于分割哈希表的键名(keyname)和索引域(hashfield),格式为key-field。sortingParameters.get(user:*-name);sortingParameters.get(user:*-add);/sortingParamete
35、rs.by(user:*-name);/sortingParameters.get(#);Listresult=jedis.sort(userlist,sortingParameters);for(Stringitem:result)System.out.println(item.+item);/*对应的redis客户端命令是:sortmlgetuser*-namesortmlgetuser:*-nameget*user:*-add*/org.junit.Test/*sortset*SET结合String的排序*/publicvoidtestSort3()Jedisjedis=RedisUti
36、l.getJedis();jedis.del(tom:friend:list,score:uid:123,score:uid:456,score:uid:789,score:uid:101,uid:123,uid:456,uid:789,uid:101);jedis.sadd(tom:friend:list,123);/tom的好友列表jedis.sadd(tom:friend:list,456);jedis.sadd(tom:friend:list,789);jedis.sadd(tom:friend:list,101);jedis.set(score:uid:123,1000);/好友对应的成绩jedis.set(score:uid:456,6000);jedis.set(score:uid:789,100);jedis.set(score:uid:101,5999);jedis.set(uid:123,uid:123,name:lucy);/好友的详细信息jedis.set(uid:456,uid:456,name:jack);jedis.set(uid:789,uid:789,name:jay);jedis.set(uid:101,uid:101,name:jolin);
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。