在https://blog.csdn.net/qq_38455201/article/details/79203640这篇文章当中讲述了如何配置和连接Redis数据库,获取Redis的操作对象Jedis,接下来,详细记录一下Jedis如何操作Redis当中的数据,主要包括操作String、List、Set、Sorted Set、HashMap等数据结构。
一:操作String
Jedis jedis = jedisPool.getResource(); //操作String //添加一条数据 jedis.set("name","king james"); //根据key找到对应的value的值 jedis.get("name"); //再次设置:对一个key多次赋值的话,key对应的值是最后一次赋值的值,之前的被覆盖。 jedis.set("name","kobe bryant"); //字符串拼接 jedis.append("name"," is my love"); //删除某个键 jedis.del("name"); //同时设置多个键值对:获取值的方式同上 jedis.mset("name","king james","age","33","country","American"); //假如值里面有数字(字符串形式),可以进行+1的操作 jedis.incr("age");//age的值变成34 //进行-1的操作 jedis.decr("age"); //某个值增加多少:这里是+20 jedis.incrBy("age",20); //某个值减少多少:这里是-20 jedis.decrBy("age",20); //判断是否存在某个key jedis.exists("name"); //设置值的时间:存在5s jedis.setex("name",5,"king james"); //查询值的存活时间:当 key不存在时,返回 -2,当key存在但没有设置剩余生存时间时,返回-1,否则,以秒为单位,返回key的剩余生存时间。 Long ttl = jedis.ttl("name"); //去掉key的时间设置:不再有失效时间 jedis.persist("name");
二:操作List
//操作List集合 //保存数据:lpush-->left push jedis.lpush("users","king james"); jedis.lpush("users","kobe bryant"); jedis.lpush("users","stephen curry"); jedis.lpush("users","Kevin Durant"); //查询:第一个值是key,第二个值表示从0开始,第三个值表示结束(-1表示取全部) //userListA当中的值排列情况:["Kevin Durant","stephen curry","kobe bryant","king james"] List<String> userListA = jedis.lrange("users", 0, -1); //保存数据:rpush-->right push jedis.rpush("users","Wilt Chamberlain"); jedis.rpush("users","John Smith"); jedis.rpush("users","Karl Malone"); //查询:第一个值是key,第二个值表示从0开始,第三个值表示结束(-1表示取全部) //userListB当中值排列情况:["Kevin Durant","stephen curry","kobe bryant","king james","Wilt Chamberlain","John Smith","Karl Malone"] List<String> userListB = jedis.lrange("users", 0, -1); //移除并返回列表key的头元素:lpop-->left pop String nameA = jedis.lpop("users");//Kevin Durant //移除并返回列表key的尾元素:rpop-->right pop String nameB = jedis.rpop("users");//Karl Malone //删除key jedis.del("users"); //给特定位置赋值 jedis.lset("users", 1, "Yao Ming"); //查询特定位置的值:idnex从0开始 jedis.lindex("users",1); //对list进行裁剪:只保留下标1-3的值,其他的全部删除,下标从0开始 jedis.ltrim("users", 1, 3); //返回list的长度 jedis.llen("users"); //根据参数count的值,移除列表中与参数value相等的元素。 //count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。 //count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。 //count = 0 : 移除表中所有与 value 相等的值。 jedis.lrem("users",2,"king james"); /** * ("key","LIST_POSITION","pivot","value") * LINSERT key BEFORE|AFTER pivot value * 将值 value 插入到列表 key 当中,位于值 pivot 之前或之后。 * 当 pivot 不存在于列表 key 时,不执行任何操作。 * 当 key 不存在时, key 被视为空列表,不执行任何操作。 * 如果 key 不是列表类型,返回一个错误。 */ jedis.linsert("users", BinaryClient.LIST_POSITION.AFTER,"Yao Ming","AAAA"); //从users的右边弹出一个元素,把该元素左插入到players列表当中 jedis.rpoplpush("users","players");
三:操作Set集合:和List不同,元素是无序的,因此也不能够重复
//操作Set集合:和列表不同,集合中的元素是无序的,因此元素也不能重复。 jedis.sadd("users","king james"); jedis.sadd("users","kobe bryant"); jedis.sadd("users","stephen curry"); jedis.sadd("users","Kevin Durant"); //查询users里面的所有数据 Set<String> users = jedis.smembers("users"); //移除users当中的某个元素 jedis.srem("users", "Kevin Durant"); //获取users当中的元素个数 Long size = jedis.scard("users"); //随机移除users当中的一个元素 jedis.spop("users"); //返回users里面的一个随机元素 jedis.srandmember("users"); /** * 从users当中返回一个长度为3的随机数组。 * 当数字大于0时,list里面元素都不相同,小于0时,元素可能相同,长度为count的绝对值 */ List<String> list = jedis.srandmember("users",3); //判断users里面是否含有某个元素 Boolean isMember = jedis.sismember("users", "king james"); //批量插入数据 jedis.sadd("players", "Yao Ming", "Wilt Chamberlain","Karl Malone"); //交集 Set<String> sinter = jedis.sinter("users","players"); //差集 Set<String> sdiff = jedis.sdiff("users","players"); //并集 Set<String> sunion = jedis.sunion("users", "players"); //把users当中的king james 移动到players当中 jedis.smove("users","players","king james");
四:操作Sorted Set:有序的Set集合
//操作有序Set //新增:根据“第二个参数(score)”进行排序。 jedis.zadd("users",10,"king james"); //元素相同时,更新为当前的排序数 jedis.zadd("users",20,"king james"); //查询users里面的所有元素 Set<String> usersA = jedis.zrange("users", 0, -1); //查询当前set集合的元素个数 jedis.zcard("users"); //返回users集合里面,score 值在min和max之间(包括)元素个数 jedis.zcount("users",10,20); //移除users中的一个或多个成员,不存在的成员将被忽略。 jedis.zrem("users","king james"); //移除users当中第0到第1之间的元素(包含),也可以是负数:以 -1 表示最后一个成员, -2 表示倒数第二个成员 jedis.zremrangeByRank("users",0,3); //移除users当中score值在min和max之间(包括)元素 jedis.zremrangeByScore("users",10,20); //返回某个元素的score值 jedis.zscore("users", "king james"); //返回有序集users中,所有score值介于min和max之间(包括)的元素 jedis.zrangeByScore("users",10,20); //返回元素king james在users当中的序号,排第一位0 long rank = jedis.zrank("users","king james");
五:操作HashMap
//操作HashMap Map<String,String> map = Maps.newHashMap(); map.put("Cleveland Cavaliers","King James"); map.put("Los Angeles","Kobe Bryant"); map.put("Memphis Grizzlies","Mike Conley"); map.put("Miami Heat","Goran Dragic"); map.put("Golden State Warriors","Stephen Curry"); //设置值 jedis.hmset("NBA",map); //根据map当中的key,去查询key对应的value List<String> MVP = jedis.hmget("NBA", "Los Angeles", "Cleveland Cavaliers"); //删除某个key对应的value jedis.hdel("NBA","Miami Heat"); //返回NBA当中map的键值对的数量 jedis.hlen("NBA"); //是否存在NBA这个key jedis.exists("NBA"); //返回NBA当中map的所有的key Set<String> teams = jedis.hkeys("NBA"); //返回NBA当中所有的key对应value的值 List<String> players = jedis.hvals("NBA"); //返回NBA当中对应的map的值 Map<String, String> map1 = jedis.hgetAll("NBA");
六:其他的一些通用操作
//通用操作 //删除 jedis.del("NBA"); //存在检测 jedis.exists("NBA"); //设置key的过期时间,单位为秒 jedis.expire("NBA",600); //设置key在那个时间点过期 jedis.expireAt("NBA",System.currentTimeMillis()+30*1000); //获取redis当中的所有的key值 Set<String> keys = jedis.keys("*"); //当前数据库的key移动到给定的数据库db当中。 jedis.move("NBA", 1); //移除给定key的生存时间 jedis.persist("NBA"); //以毫秒为单位返回 key 的剩余生存时间 jedis.pttl("NBA"); //以秒为单位返回 key 的剩余生存时间 jedis.ttl("NBA"); //从当前数据库中随机返回(不删除)一个 key jedis.randomKey(); //将 key 改名为 newkey jedis.rename("NBA", "CBA"); //当且仅当 newkey 不存在时,将 key 改名为 newkey jedis.renamenx("NBA", "CBA"); //返回 key 所储存的值的类型 jedis.type("NBA");以上内容基本总结完了Jedis对Redis数据库的常用的操作,还有一些比较冷门的操作没有总结,希望在用到的时候再次进行总结积累,方便下次的使用。