java中Redis5大基本类型的操作--jedis用法

大憨熊 提交于 2019-11-26 22:06:51

存储格式

 

大家都知道redis支持的存储类型(String/List/Hash/Set/SortedSet ),但是不一定在工作中都用到过,希望通过整理的这篇文章,让初学者都能知道在java中如何使用redis以及redis对这几种数据类型的操作。

基本用法

jedis就是集成了redis的一些命令操作,封装了redis的java客户端。提供了连接池管理。一般不直接使用jedis,而是在其上在封装一层,作为业务的使用。如果用spring的话,可以看看spring 封装的 redis Spring Data Redis

Jedis工具类

 public class JedisPoolUtil {     private static JedisPool pool = null;     static {         //加载配置文件         InputStream in = JedisPoolUtil.class.getClassLoader().getResourceAsStream("redis.properties");         Properties pro = new Properties();         try {             pro.load(in);         } catch (IOException e) {             e.printStackTrace();             System.out.println("加载文件失败");         }         JedisPoolConfig poolConfig = new JedisPoolConfig();         //最大连接数         poolConfig.setMaxTotal(Integer.parseInt( pro.get("redis.maxTotal").toString()));         //最大空闲连接数         poolConfig.setMaxIdle(Integer.parseInt( pro.get("redis.maxIdle").toString()));         //最小空闲连接数         poolConfig.setMinIdle(Integer.parseInt( pro.get("redis.minIdle").toString()));         pool = new JedisPool(poolConfig, pro.get("redis.url").toString(),Integer.parseInt( pro.get("redis.port")                 .toString()));     }      public static Jedis getJedis(){         return pool.getResource();     }     public static void release(Jedis jedis){         if(null != jedis){             jedis.close();         }     } } 

redis配置文件

 redis.maxTotal=100 redis.maxIdle=30 redis.minIdle=10 redis.url=172.0.0.1 redis.port=6379 

key值测试

 public void keyTest{          public  Jedis jedis = JedisPoolUtil.getJedis();          @Test     private void KeyOperate(){                  System.out.println("======================key==========================");          // 清空数据          System.out.println("清空库中所有数据:"+jedis.flushDB());         // 判断key否存在          System.out.println("判断key999键是否存在:"+shardedJedis.exists("key999"));          System.out.println("新增key001,value001键值对:"+shardedJedis.set("key001",         "value001"));          System.out.println("判断key001是否存在:"+shardedJedis.exists("key001"));         // 输出系统中所有的key         System.out.println("新增key002,value002键值对:"+shardedJedis.set("key002", "value002"));         System.out.println("系统中所有键如下:");         Set<String> keys = jedis.keys("*");          Iterator<String> it=keys.iterator() ;            while(it.hasNext()){                String key = it.next();                System.out.println(key);            }         // 删除某个key,若key不存在,则忽略该命令。         System.out.println("系统中删除key002: "+jedis.del("key002"));         System.out.println("判断key002是否存在:"+shardedJedis.exists("key002"));         // 设置 key001的过期时间         System.out.println("设置 key001的过期时间为5秒:"+jedis.expire("key001", 5));         try{              Thread.sleep(2000);          }          catch (InterruptedException e){          }          // 查看某个key的剩余生存时间,单位【秒】.永久生存或者不存在的都返回-1         System.out.println("查看key001的剩余生存时间:"+jedis.ttl("key001"));         // 移除某个key的生存时间         System.out.println("移除key001的生存时间:"+jedis.persist("key001"));         System.out.println("查看key001的剩余生存时间:"+jedis.ttl("key001"));         // 查看key所储存的值的类型         System.out.println("查看key所储存的值的类型:"+jedis.type("key001"));         /*          * 一些其他方法:1、修改键名:jedis.rename("key6", "key0");          *             2、将当前db的key移动到给定的db当中:jedis.move("foo", 1)          */     } } 

String测试

 public class StringTest {     public  Jedis jedis = JedisPoolUtil.getJedis();     @Test     //添加和获取     public void fun(){         jedis.set("num","1");         System.out.println(jedis.get("num"));     }     @Test     //删除值     public void fun1(){         jedis.del("num");         System.out.println(jedis.get("num"));     }     @Test     //自减和自减     public void fun2(){         jedis.set("num","1");         System.out.println(jedis.get("num"));         jedis.decr("num");         System.out.println(jedis.get("num"));         jedis.incr("num");         jedis.incr("num");         System.out.println(jedis.get("num"));     }     @Test     //加上/减去 一个数     //incrBy 返回的是修改之后的值如果原值是字符串不是数字,则会抛出异常     public void fun3(){         Long num = jedis.incrBy("num", 3);         System.out.println(num);         jedis.decrBy("num",10);          System.out.println(jedis.get("num"));         jedis.set("name","caopengfei");         //jedis.decrBy("name",1);     }     @Test     //字符串拼接     public void fun4(){         Long len = jedis.append("name", "123");         System.out.println(len);         System.out.println(jedis.get("name"));     }          @Test     //多键值操作     public void fun5(){          System.out.println("一次性新增key201,key202,key203,key204及其对应值:"+jedis.mset("key201","value201",                         "key202","value202","key203","value203","key204","value204"));           System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+                         jedis.mget("key201","key202","key203","key204"));         System.out.println("一次性删除key201,key202:"+jedis.del(new String[]{"key201", "key202"}));         System.out.println("一次性获取key201,key202,key203,key204各自对应的值:"+                 jedis.mget("key201","key202","key203","key204"));          System.out.println();     } } 

Hash测试

 public class HashTest {     public Jedis jedis = JedisPoolUtil.getJedis();      //hash 操作的是map对象     //适合存储键值对象的信息     @Test     //存值 参数第一个变量的名称, map键名(key), map键值(value)     //调用hset     public void fun() {         Long num = jedis.hset("hash1", "username", "caopengfei");         System.out.println(num);         String hget = jedis.hget("hash1", "username");         System.out.println(hget);     }      @Test     //也可以存多个key     //调用hmset     public void fun1() {         Map<String, String> map = new HashMap<String, String>();         map.put("username", "caopengfei");         map.put("age", "25");         map.put("sex", "男");         String res = jedis.hmset("hash2", map);         System.out.println(res);//ok     }      @Test     //获取hash中所有的值     public void fun2() {         Map<String, String> map2 = new HashMap<String, String>();         map2 = jedis.hgetAll("hash2");         System.out.println(map2);     }      @Test     //删除hash中的键 可以删除一个也可以删除多个,返回的是删除的个数     public void fun3() {         Long num = jedis.hdel("hash2", "username", "age");         System.out.println(num);         Map<String, String> map2 = new HashMap<String, String>();         map2 = jedis.hgetAll("hash2");         System.out.println(map2);     }      @Test     //增加hash中的键值对     public void fun4() {         Map<String, String> map2 = new HashMap<String, String>();         map2 = jedis.hgetAll("hash2");         System.out.println(map2);         jedis.hincrBy("hash2", "age", 10);         map2 = jedis.hgetAll("hash2");         System.out.println(map2);     }      @Test     //判断hash是否存在某个值     public void fun5() {         System.out.println(jedis.hexists("hash2", "username"));         System.out.println(jedis.hexists("hash2", "age"));     }      @Test     //获取hash中键值对的个数     public void fun6() {         System.out.println(jedis.hlen("hash2"));     }      //    获取一个hash中所有的key值     @Test     public void fun7() {         Set<String> hash2 = jedis.hkeys("hash2");         System.out.println(hash2);     }      //    获取所有的value值     @Test     public void fun8() {         List<String> hash2 = jedis.hvals("hash2");         System.out.println(hash2);     } } 

List测试

 public class ListTest {      public Jedis jedis = JedisPoolUtil.getJedis();          @Test     public void testList()     {         jedis.flushDB();         System.out.println("===========添加一个list===========");         jedis.lpush("collections", "ArrayList", "Vector", "Stack", "HashMap",         "WeakHashMap", "LinkedHashMap");         jedis.lpush("collections", "HashSet");         jedis.lpush("collections", "TreeSet");         jedis.lpush("collections", "TreeMap");         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));//-1    代表倒数第一个元素,-2代表倒数第二个元素         System.out.println("collections区间0-3的元素:"+jedis.lrange("collections",0,3));         System.out.println("===============================");         // 删除列表指定的值 ,第二个参数为删除的个数(有重复时),后add进去的值先被删,类似于出栈         System.out.println("删除指定元素个数:"+jedis.lrem("collections", 2, "HashMap"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("删除下表0-3区间之外的元素:"+jedis.ltrim("collections", 0, 3));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections列表出栈(左端):"+jedis.lpop("collections"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections添加元素,从列表右端,与lpush相对应:"+jedis.rpush("collections", "EnumMap"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("collections列表出栈(右端):"+jedis.rpop("collections"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("修改collections指定下标1的内容:"+jedis.lset("collections", 1, "LinkedArrayList"));         System.out.println("collections的内容:"+jedis.lrange("collections", 0, -1));         System.out.println("===============================");         System.out.println("collections的长度:"+jedis.llen("collections"));         System.out.println("获取collections下标为2的元素:"+jedis.lindex("collections", 2));         System.out.println("===============================");         jedis.lpush("sortedList", "3","6","2","0","7","4");         System.out.println("sortedList排序前:"+jedis.lrange("sortedList", 0, -1));         System.out.println(jedis.sort("sortedList"));         System.out.println("sortedList排序后:"+jedis.lrange("sortedList", 0, -1));     }       } 

Set测试

 /* * Set集合,和List类的区别就是 * set中不会出现重复的数据 * 他可以进行聚合操作效率比较高 * 其余的操作基本上和list相同 * * */ public class SetTest {     public  Jedis jedis = JedisPoolUtil.getJedis();      @Test     /*添加元素删除元素*/     public void fun(){         Long num = jedis.sadd("myset", "a", "a", "b","abc");         System.out.println(num);      }     @Test     /*获得元素*/     public void fun1(){         Set<String> myset = jedis.smembers("myset");         System.out.println(myset);     }     @Test     /*移除元素*/     public void fun2(){         jedis.srem("myset","a","b");         Set<String> myset = jedis.smembers("myset");         System.out.println(myset);     }     @Test     //判断是否这个set中存在某个值     public void fun3(){         Boolean sismember = jedis.sismember("myset", "a");         System.out.println(sismember);     }     @Test     //获得A-B 获得差集合     public void fun4(){         jedis.sadd("myset1","123","32","abc","def","123456","sdfasd");         jedis.sadd("myset2","abc","345","123","fda");         Set<String> sdiff = jedis.sdiff("myset1", "myset2");         System.out.println(sdiff);     }     @Test     //获得交集     public void fun5(){         Set<String> sinter = jedis.sinter("myset1", "myset2");         System.out.println(sinter);      }     @Test     //获得并集合     public void fun6(){         Set<String> sunion = jedis.sunion("myset1", "myset2");         System.out.println(sunion);     }     @Test     //成员数量     public void fun7(){         System.out.println(jedis.scard("myset1"));     }     @Test     //获得随机的一个成员     public void fun8(){         System.out.println(jedis.srandmember("myset1"));     }     @Test     //将相差的成员放到一个新的set中同理交集和并集都可以后面均     //加上一个store即可     //并返回新的长度     public void fun9(){         System.out.println(jedis.sdiffstore("myset3","myset1","myset2"));         System.out.println(jedis.smembers("myset3"));     } } 

SortedSet 测试

 /* 和set极为的类似,他们是字符串的集合,没有重复的数据 差别是sortedset每个成员中都会有一个分数(score)与之关联 ,redis正是通过分数来为集合中的成员进行从小到大的排序 sortedset中数据必须单一但是他的score可以是重复的  */ public class SortedsetTest {     public  Jedis jedis = JedisPoolUtil.getJedis();     //添加元素     @Test     public void fun(){         jedis.zadd("mysort",100.0, "zhangsan");         jedis.zadd("mysort",200.0,"lisi");         jedis.zadd("mysort",50.0,"wangwu");         Map<String ,Double>map = new HashMap<String ,Double>();         map.put("mutouliu",70.0);          jedis.zadd("mysort",map);         Set<String> mysort = jedis.zrange("mysort", 0, -1);         System.out.println(mysort);         Set<String> mysort1 = jedis.zrange("mysort", 1, 2);         System.out.println(mysort1);     } }  

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!