java使用redis入门学习--Jedis
2016-06-14 22:32
751 查看
人总要进步!最近的项目中,因为是电商类的网站,图片比较多,考虑到网站性能问题,所以尝试用redis做缓存,当然,redis很多高大上的功能都还没能及时到应用到项目中来,只是初步的使用了redis做页面缓存,减少数据库的压力。项目代码不能贴,下面贴上自己刚学习redis时敲的学习代码,可能不是很全面,仅供入门参考和自己以后回顾。
安装redis服务过程略过,网上很多,也很简单。相关jar包:jedis-2.7.2.jar commons-pool2-2.4.2.jar
动手才能真正的感受到代码的魅力,上面就是本人学习敲的redis demo,非常基础,希望下一位学习的朋友,也自己敲一次。
最后一句:多有不足之处,请大神们勿喷!
安装redis服务过程略过,网上很多,也很简单。相关jar包:jedis-2.7.2.jar commons-pool2-2.4.2.jar
import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import redis.clients.jedis.Transaction; import sun.tools.jar.resources.jar; /** * redis Demo * @author 李小拐 * 2016年6月11日16:17:58 */ public class RedisUtil { private static JedisPool pool=null;//声明jedis池 private static JedisPool getPool(){ if(pool==null){ JedisPoolConfig config=new JedisPoolConfig(); //可用连接实例的最大数目,默认值为8,旧版本是maxActive,如果赋值为-1,则表示不限制 config.setMaxTotal(500); //设置允许池中最大的空连接数 config.setMaxIdle(20); //设置最大等待时间 config.setMaxWaitMillis(1000*60); //引入一个jedis的实例时,是否提前进行validate操作,true表示得到的实例均可用 config.setTestOnBorrow(true); pool=new JedisPool(config, "127.0.0.1",6379); } return pool; } /** * 回收jedis * @param pool * @param jedis */ private static void returnJedisPool(JedisPool pool,Jedis jedis) { pool.returnResourceObject(jedis); } /** * jedis对字符串的基本操作 */ public static void Jedis_String(){ System.out.println("------------------------------------------string"); JedisPool pool=getPool(); Jedis jedis=pool.getResource(); try{ //jedis中存入一个值 jedis.set("name", "李小拐"); System.out.println(jedis.get("name"));//result:李小拐 //在原来基础后面追加一个值 jedis.append("name", "--追加到后面"); System.out.println(jedis.get("name"));//result:李小拐--追加到后面 //jedis覆盖原来的值 jedis.set("name", "易小乖"); System.out.println(jedis.get("name"));//result:易小乖 //删除key jedis.del("name"); System.out.println(jedis.get("name"));//result:null //设置多个key值,相当于jedis.set("name", "李小拐"); jedis.set("sex", "男"); //当然也能同时删除/获取多个key jedis.mset("name","李小拐","sex","男"); //jedis.mget结果是list<String>类型 System.out.println(jedis.mget("name"));//result:[李小拐] System.out.println(jedis.mget("name","sex"));//result:[李小拐, 男] //setnx:当key存在时和不存在时-------这能防止新增覆盖原值 jedis.setnx("name", "李二拐"); jedis.setnx("nameA", "李三拐"); System.out.println("---"+jedis.mget("name","nameA"));//result:[李小拐, 李三拐] //setex:设置值的同时设置过期时间 jedis.setex("nameB", 3, "李四拐"); System.out.println(jedis.get("nameB"));//result:李四拐 Thread.sleep(1000*3);//等待3s System.out.println(jedis.get("nameB"));//result:null //获取原值同时更新新值 System.out.println(jedis.getSet("nameA", "李new拐"));//result:李三拐 System.out.println(jedis.get("nameA"));//result:李new拐 //截取字符串 System.out.println(jedis.getrange("nameA", 3, 5));//result:new }catch (Exception e) { }finally{ //回收jedis //getPool().returnResource(jedis);//过时 //getPool().returnResourceObject(jedis); returnJedisPool(pool, jedis); } } /** * jedis操作Hash */ public static void Jedis_Hash(){ System.out.println("------------------------------------------Hash"); Jedis jedis=getPool().getResource(); Map<String, String> map=new HashMap<String, String>(); map.put("name", "李小拐"); map.put("sex", "男"); map.put("age", "25"); //存入map数据 jedis.hmset("user", map); jedis.hset("user", "hset", "hsetvalue"); //结果是List<String>类型,第一个是jedis的key,后面可以跟多个map的key List<String> list=jedis.hmget("user","name","sex"); System.out.println(list);//result:[李小拐,男] //删除map中某个key jedis.hdel("user", "sex"); System.out.println(jedis.hmget("user", "sex"));//删除了,返回null //返回key为user的值的长度 System.out.println(jedis.hlen("user"));//result:2 //返回user对象中所有的key,,,类型Set<String> System.out.println(jedis.hkeys("user"));//result:[age, name] //返回user 4000 对象中所有的value,,,类型List<String> System.out.println(jedis.hvals("user"));//result:[李小拐, 25] //遍历map所有的key并取值 Iterator<String> iterator=jedis.hkeys("user").iterator(); while (iterator.hasNext()) { String key=iterator.next(); System.out.println(key+":"+jedis.hget("user", key)); } } /** * jedis操作List */ public static void Jedis_List(){ System.out.println("------------------------------------------LIST"); Jedis jedis=getPool().getResource(); //List集合可以无限添加重复值,所以这里添加之前,先把其清空,方便看效果 jedis.del("users"); jedis.del("users2"); //----------------------------------lpush:后进先出(添加在list的头部) jedis.lpush("users", "李小拐"); jedis.lpush("users", "李中拐"); jedis.lpush("users", "李大拐"); //第一个key,第二个起始位置,第三个是结束位置,-1表示取,,,结果类型List<String> System.out.println(jedis.lrange("users", 0, -1));//result:[李大拐, 李中拐, 李小拐] //覆盖位置1的元素值 jedis.lset("users", 1, "李新拐"); System.out.println(jedis.lrange("users", 0, -1));//result:[李大拐, 李新拐, 李小拐] //对列表进行裁剪,key,开始位置,结束位置,因为是lpush后进先出,所以直接干掉了李大拐 jedis.ltrim("users", 1, 2); System.out.println(jedis.lrange("users", 0, -1));//result:[李新拐, 李小拐] //获取列表长度 System.out.println(jedis.llen("users"));//result:3 //----------------------------------rpush:先进先出(添加在list的尾部) jedis.rpush("users2", "李小拐"); jedis.rpush("users2", "李中拐"); jedis.rpush("users2", "李大拐"); System.out.println(jedis.lrange("users2", 0, -1));//result:[李小拐, 李中拐, 李大拐] //对列表进行裁剪,只保留区间内的数,因为是rpush先进先出,所以直接干掉了李小拐 jedis.ltrim("users2", 1, 2); System.out.println(jedis.lrange("users2", 0, -1));//result:[李中拐, 李大拐] //List<String>类型来接受结果 List<String> list=jedis.lrange("users2", 0, -1); for(int i=0;i<list.size();i++){ System.out.println("user2:::"+list.get(i)); } //移除并返回列表的第一个元素。 System.out.println(jedis.lpop("users2"));//result:李中拐 //移除并返回列表的最后一个元素。 //System.out.println(jedis.rpop("users2")); System.out.println(jedis.lrange("users2", 0, -1));//result:[李大拐] //获取指定下标的元素值 System.out.println(jedis.lindex("users2", 0));//result:李大拐 } /** * jedis操作Set * sadd---无序集合 * zadd---有序集合 */ public static void Jedis_Set(){ System.out.println("------------------------------------------SET(sadd)"); Jedis jedis=getPool().getResource(); //添加 jedis.sadd("sname", "李小拐");//可以试试这里sname换成前面用过的name,看看会不会冲突 jedis.sadd("sname", "李中拐"); jedis.sadd("sname", "李大拐","李二拐");//可以一次添加多个 jedis.sadd("sname", "要删除的"); jedis.sadd("sname", "要删除的");//插入重复的会被忽略 //遍历集合,从结果可以看出是无序的 System.out.println(jedis.smembers("sname"));//result:[李小拐, 李中拐, 李二拐, 要删除的, 李大拐] Set<String> set=jedis.smembers("sname"); for (String val : set) { System.out.print("====="+val); } //移除集合里某个元素 jedis.srem("sname", "要删除的"); //获取所有成员 System.out.println("\r"+jedis.smembers("sname"));//result:[李小拐, 李中拐, 李大拐] //判断李小拐是不是sname的元素,判断是否存在 System.out.println(jedis.sismember("sname", "李小拐"));//result:true //srandmember返回集合中的一个随机元素。 该操作和SPOP相似,但SPOP将随机元素从集合中移除并返回,而SRANDMEMBER则仅仅返回随机元素 System.out.println(jedis.srandmember("sname"));//result: //随机返回集合中的某个元素,并从集合中移除移除 System.out.println(jedis.spop("sname"));//result: //获取所有成员 System.out.println(jedis.smembers("sname")); //获取成员数量(长度) System.out.println(jedis.scard("sname"));//result:3 System.out.println("此刻sname的集合::"+jedis.smembers("sname"));//[李小拐, 李中拐, 李二拐] //此处新增一个sname2的集合 jedis.sadd("sname2", "李小拐", "易小乖"); //取两个集合的并集(全部) Set<String> set1=jedis.sunion("sname2","sname"); System.out.println(set1);//[李小拐, 李中拐, 李二拐, 易小乖] //取两个集合的差集(前一个独有的) Set<String> set2=jedis.sdiff("sname","sname2"); System.out.println(set2);//[李二拐, 李中拐] //取两个集合的差集,调换了前后位置,结果也就变了 Set<String> set3=jedis.sdiff("sname2","sname"); System.out.println(set3);//[易小乖, 李小拐] //取两个集合的交集(共有的) Set<String> set4=jedis.sinter("sname","sname2"); System.out.println(set4); System.out.println("------------------------------------------SET(zadd)"); jedis.zadd("zname", 3, "李小拐1"); jedis.zadd("zname", 4, "李小拐2"); jedis.zadd("zname", 1, "李小拐3"); jedis.zadd("zname", 2, "李小拐4"); //按权重排序 System.out.println(jedis.zrange("zname", 0, -1));//[李小拐3, 李小拐4, 李小拐1, 李小拐2] //移除 ---zrem //总数----zcard //位于某个权重范围内的元素个数 System.out.println(jedis.zcount("zname", 2, 4));//3 } /** * 其他一些基础操作 */ public static void Jedis_Other(){ Jedis jedis=getPool().getResource(); //对key进行模糊查询,这里是查出全部的key Set<String> keys = jedis.keys("*"); System.out.println(keys); //对key进行模糊查询,这里是查出已s开头的key全部的key Set<String> keys2 = jedis.keys("s*"); System.out.println(keys2); //删除某个key //jedis.del("sex"); //判断某个key是否存在 System.out.println(jedis.exists("name")); //设置key的失效时间,单位:秒 jedis.expire("name", 10);//10s过期 //获取key的存活时间(及剩余的有效时间) System.out.println(jedis.ttl("name")); //去掉key的失效时间expire,即理论上永存 jedis.persist("name"); //int类型采用String存储 jedis.set("amount", 100 + ""); long val; //自增 val=jedis.incr("amount"); System.out.println(val); //自减 val=jedis.decr("amount"); System.out.println(val); //做加法 val=jedis.incrBy("amount", 5); System.out.println(val); //做减法 val=jedis.decrBy("amount", 5); System.out.println(val); //可以用非int类型的的做下加减试试 //jedis对事物的支持 Transaction tx=jedis.multi(); //模拟批量操作,事物hejedis操作方式一样 for (int i = 0; i < 5; i++) { tx.set("key"+i, "value"+i); } //执行事物,返回每一个结果 List<Object> list=tx.exec(); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)+"--------"); } //清空当前DB jedis.flushDB(); //清空全部DB....两个有什么区别呢?? jedis.flushAll(); } }
动手才能真正的感受到代码的魅力,上面就是本人学习敲的redis demo,非常基础,希望下一位学习的朋友,也自己敲一次。
最后一句:多有不足之处,请大神们勿喷!
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- redis安装问题小结
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序