redis12--常用API

上一篇总结我们使用我们本地的Eclipse中创建的jedis工程,链接
到了我们处于VMware虚拟机上的Linux系统上的Redis服务,我们接下来
讲一下jedis的一些常用的API。

(1)jedis存储字符串

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class Test1 {  
  6.     public static void main(String[] args) {  
  7.         Jedis jedis = new Jedis("192.168.248.129",6379);  
  8.           
  9.         //添加数据  
  10.         jedis.set("username", "jack");//向key-->name中放入了value-->jack  
  11.           
  12.         System.out.println(jedis.get("username"));//执行结果:jack  
  13.           
  14.         jedis.append("username"," is a Coder");//拼接  
  15.         System.out.println(jedis.get("username"));  
  16.           
  17.         jedis.del("username");//删除某个键  
  18.         System.out.println(jedis.get("username"));//为null  
  19.         //设置多个键值对  
  20.         jedis.mset("username","liuling","age","23","qq","412345678");  
  21.         jedis.incr("age");//进行加1操作  
  22.         System.out.println(jedis.get("name")+"-"+jedis.get("age")+"-"+jedis.get("qq"));  
  23.     }  
  24. }  

效果:


查看一下redis:

说明我们的操作是成功的。

(2)jedis操作Map

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import java.util.HashMap;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import redis.clients.jedis.Jedis;  
  9.   
  10. public class Test2 {  
  11.     public static void main(String[] args) {  
  12.         Jedis jedis = new Jedis("192.168.248.129",6379);  
  13.           
  14.         //添加数据  
  15.         Map<String,String> map = new HashMap<String,String>();  
  16.         map.put("name", "ZhangSan");  
  17.         map.put("age", "35");  
  18.         map.put("email", "12345678@126.com");  
  19.         jedis.hmset("user",map);  
  20.         //第一个参数是存入redis中map对象的key,后面跟的是放入map中的对象的key,  
  21.         //后面的key可以跟多个,是可变参数    
  22.           
  23.         List<String> rsmap = jedis.hmget("user", "name","age","email");  
  24.         System.out.println(rsmap);  
  25.           
  26.         //删除map中的某个值  
  27.         jedis.hdel("user","age");  
  28.         System.out.println(jedis.hmget("user", "age"));//因为删除了,所以返回的是null  
  29.         System.out.println(jedis.hlen("user"));//返回key为user的键中存放值的个数2  
  30.         System.out.println(jedis.exists("user"));//是否存在key为user的记录,返回true  
  31.         System.out.println(jedis.hkeys("user"));//返回map对象中的所有key  
  32.         System.out.println(jedis.hvals("user"));//返回map对象中的所有val  
  33.           
  34.         Iterator<String> iter=jedis.hkeys("user").iterator();//得到iterator对象进行遍历  
  35.         while(iter.hasNext()){  
  36.             String key = iter.next();  
  37.             System.out.println(key+":"+jedis.hmget("user", key));  
  38.         }  
  39.     }  
  40. }  

效果:


查看一下redis:

说明我们的操作是成功的。


(3)jedis操作List 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class Test3 {  
  6.     public static void main(String[] args) {  
  7.         Jedis jedis = new Jedis("192.168.248.129",6379);  
  8.           
  9.         //开始前,先移出所有的内容  
  10.         jedis.del("java framework");  
  11.         System.out.println(jedis.lrange("java framework", 0, -1));  
  12.           
  13.         //先向key java framework中存放三条数据  
  14.         //lpush key string  在key对应list的头部添加字符串元素  
  15.         jedis.lpush("java framework","spring");  
  16.         jedis.lpush("java framework","struts");  
  17.         jedis.lpush("java framework","hibernate");  
  18.           
  19.         //取出所有数据,jedis.lrange是按范围取出,  
  20.         //第一个是key,第二个是起始位置,第三个是结束位置,-1表示取得所有  
  21.         System.out.println(jedis.lrange("java framework", 0, -1));  
  22.           
  23.         //jedis.llen获取长度  
  24.         System.out.println(jedis.llen("java framework"));  
  25.           
  26.         //删除数据  
  27.         jedis.del("java framework");  
  28.           
  29.         //rpush key string  在key对应list的尾部添加字符串元素  
  30.         //插入数据的时候如果List不存在,就创建它再插入  
  31.         jedis.rpush("java framework", "spring");  
  32.         jedis.rpush("java framework", "struts");  
  33.         jedis.rpush("java framework", "hibernate");  
  34.         System.out.println(jedis.lrange("java framework", 0, -1));  
  35.           
  36.     }  
  37. }  

效果:


查看以下redis:

说明我们的操作是成功的。

(4)jedis操作Set 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class Test4 {  
  6.     public static void main(String[] args) {  
  7.         Jedis jedis = new Jedis("192.168.248.129",6379);  
  8.           
  9.         //添加  
  10.         jedis.sadd("users", "ZhangSan");  
  11.         jedis.sadd("users", "LiSi");  
  12.         jedis.sadd("users", "WangWu");  
  13.         jedis.sadd("users", "ZhangEr");  
  14.         jedis.sadd("users", "MaLiu");  
  15.           
  16.         //移出MaLiu  
  17.         jedis.srem("users", "MaLiu");  
  18.         System.out.println(jedis.smembers("users"));//获取所有加入的value  
  19.           
  20.         System.out.println(jedis.sismember("users", "MaLiu"));//判断MaLiu是否是user结合的元素  
  21.         System.out.println(jedis.srandmember("users"));  
  22.         System.out.println(jedis.scard("users"));//返回集合的元素个数  
  23.           
  24.     }  
  25. }  

效果:


查看以下redis:

说明我们的操作是成功的。

(5)jedis排序

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class Test5 {  
  6.     public static void main(String[] args) {  
  7.         Jedis jedis = new Jedis("192.168.248.129",6379);  
  8.           
  9.         //jedis排序  
  10.         //注意,此处的rpush和lpush是List的操作,是一个双向链表  
  11.         //rpush是从尾部加入数据,lpush是从头部加入数据  
  12.           
  13.         jedis.del("a");//先清楚数据,再加入数据进行测试  
  14.         jedis.rpush("a", "1");  
  15.         jedis.rpush("a", "6");  
  16.         jedis.rpush("a", "3");  
  17.         jedis.rpush("a", "9");  
  18.         System.out.println(jedis.lrange("a", 0, -1));//[1,6,3,9]  
  19.         System.out.println(jedis.sort("a"));//[1,3,6,9]  输出排序后结果  
  20.           
  21.         jedis.del("a");//先清楚数据,再加入数据进行测试  
  22.         jedis.lpush("a", "1");  
  23.         jedis.lpush("a", "6");  
  24.         jedis.lpush("a", "3");  
  25.         jedis.lpush("a", "9");  
  26.         System.out.println(jedis.lrange("a", 0, -1));//[9,3,6,1]  
  27.         System.out.println(jedis.sort("a"));//[1,3,6,9]  输出排序后结果  
  28.           
  29.     }  
  30. }  

效果:


查看以下redis:

说明我们的操作是成功的。

(6)Redis连接池
我们每一次使用redis的时候,都要写Jedis jedis = new Jedis("192.168.248.129",6379);
我们要优化连接,不能使用一次就new一个连接对象,我们要创建一个工具类,管理redis的
连接和一些配置参数的设置。

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4. import redis.clients.jedis.JedisPool;  
  5. import redis.clients.jedis.JedisPoolConfig;  
  6.   
  7. public class RedisUtil {  
  8.     //redis服务器IP  
  9.     private static String ADDR = "192.168.248.129";  
  10.       
  11.     //redis的端口号  
  12.     private static int PORT = 6379;  
  13.       
  14.     //访问密码  
  15.     private static String AUTH = "root";  
  16.       
  17.     //可用连接实例的最大数目,默认为8  
  18.     //如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此  
  19.     //时pool的状态为exhausted(耗尽)。  
  20.     private static int MAX_ACTIVE = 1024;  
  21.       
  22.     //控制一个pool最多有多少个状态为idle(空闲)的jedis实例,默认也是8  
  23.     private static int MAX_IDLE = 200;  
  24.       
  25.     //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。  
  26.     //如果超过等待时间,则直接抛出JedisConnectionException  
  27.     private static int MAX_WAIT = 10000;  
  28.       
  29.     private static int TIMEOUT = 10000;  
  30.       
  31.     //在borrow一个redis实例时,是否提前进行validate操作;  
  32.     //如果为true,则得到的jedis实例均是可用的  
  33.     private static boolean TEST_ON_BORROW = true;  
  34.       
  35.     private static JedisPool jedisPool = null;  
  36.       
  37.     /** 
  38.      * 初始化Redis连接池 
  39.      * Jedis的连接池配置需要用到org.apache.commons.pool.impl.GenericObjectPool.Config.class 
  40.      * 所以要引入commons-pool.jar 
  41.      * */  
  42.     static{  
  43.         try {  
  44.             JedisPoolConfig config = new JedisPoolConfig();    
  45.             config.setMaxTotal(MAX_ACTIVE);//老版本是setMaxActive  
  46.             config.setMaxIdle(MAX_IDLE);  
  47.             config.setMaxWaitMillis(MAX_WAIT);//老版本是maxMaxWait  
  48.             config.setTestOnBorrow(TEST_ON_BORROW);  
  49.             jedisPool = new JedisPool(config,ADDR,PORT,TIMEOUT);//有密码的时候传入AUTH  
  50.               
  51.         } catch (Exception e) {  
  52.             e.printStackTrace();  
  53.         }  
  54.     }  
  55.   
  56.     /** 
  57.      * 获取Jedis实例 
  58.      * */  
  59.     public synchronized static Jedis getJedis(){  
  60.         try {  
  61.             if(jedisPool != null){  
  62.                 Jedis resource = jedisPool.getResource();  
  63.                 return resource;  
  64.             }else{  
  65.                 return null;  
  66.             }  
  67.         } catch (Exception e) {  
  68.             e.printStackTrace();  
  69.             return null;  
  70.         }  
  71.     }  
  72.       
  73.     /** 
  74.      * 释放jedis资源 
  75.      * */  
  76.     public static void returnResource(final Jedis jedis){  
  77.         if(jedis != null){  
  78.             jedisPool.returnResourceObject(jedis);  
  79.         }  
  80.     }  
  81.   
  82. }  

不要忘记引入commons-pool.jar:


测试:

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. package cn.com.redis;  
  2.   
  3. import redis.clients.jedis.Jedis;  
  4.   
  5. public class Test6 {  
  6.     public static void main(String[] args) {  
  7.         RedisUtil redisUtil = new RedisUtil();  
  8.         Jedis jedis = redisUtil.getJedis();  
  9.           
  10.         try {  
  11.             System.out.println(jedis.lrange("a", 0, -1));  
  12.             System.out.println(jedis.smembers("users"));  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.         }finally{  
  16.             redisUtil.returnResource(jedis);  
  17.         }  
  18.           
  19.     }  
  20. }  


结果:

使用连接池获取jedis对象会更符合开发规范。
智能转账:http://blog.csdn.net/acmman/article/details/53487684

原文地址:https://www.cnblogs.com/gaochsh/p/6288360.html