Redis命令之JavaAPI Jedis的操作

        本文主要讲解在IDEA上对Jedis中关于Redis五种不同数据结构的具体操作,如果需要完整代码配置的,可以到github上下载相关代码。https://github.com/carson0408/JredisDemo.git

1.配置pom.xml

        至于如何建立Maven项目,之前博客已经仔细讲述过,这里就不叙述了。直接讲Jedis使用需要的Jar包。



    4.0.0

    com.carson
    JredisTest
    1.0-SNAPSHOT
    
        
            redis.clients
            jedis
            2.9.0
        
        
            commons-pool
            commons-pool
            20030825.183949
        
        
            junit
            junit
            4.12
        

        
            org.apache.logging.log4j
            log4j-core
            2.10.0
        
        
            log4j
            log4j
            1.2.17
        
    



2.对String的操作

import redis.clients.jedis.BitOP;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;

import java.util.logging.Logger;

public class StringDemo {
    /**
     * 连接上redis服务器
     * @return
     */
    public static Jedis getJedis(){
        JedisShardInfo info = new JedisShardInfo("127.0.0.1", 6379);
        Jedis jedis = new Jedis(info);
        return jedis;
    }
    public static void testString(Jedis jedis){
        //对set、get、incr、decr的用法示例,其中String数据结构中key是String类型,但是value可以是字符串、整数和浮点数
        try {
            jedis.set("name", "carson");
            jedis.set("age", "25");
            jedis.set("money", "26.5");
            jedis.incr("age");
            jedis.incrBy("age", 10);
            String age = jedis.get("age");
            String name = jedis.get("name");
            System.out.println(name + ":" + age);
            System.out.println("age:" + jedis.decrBy("age", 5));
        }catch(Exception e){
            e.printStackTrace();
        }
       // System.out.println(jedis.incrByFloat("money",3.5));

        //setnx key_name value:设值,如果存在key_name,则什么都不做,反之设值。
        try {
            jedis.setnx("money", "31");
            System.out.println("使用设值之后的money:" + jedis.get("money"));
        }catch(Exception e){
            e.printStackTrace();
        }


        //append方法的使用
        try {
            jedis.append("name", " Jack");
            System.out.println("append全名之后的name是:" + jedis.get("name"));
        }catch(Exception e){
            e.printStackTrace();
        }

        //getrange、setrange的使用
        try {
            System.out.println("取前四个字节是:"+jedis.getrange("name", 0, 3));
            jedis.setrange("name", 5, "abc");
            System.out.println("修改之后的name是:" + jedis.get("name"));
        }catch(Exception e){
            e.printStackTrace();
        }

        //setbit key_name offset value:将字符串看作二进制位串,并将位串中偏移量为offset的二进制位的值
        //getbit key_name offset:将字符串看作是二进制位串,并将位串中偏移量为offset的二进制位的值。

        try {
            System.out.println("name值的二进制位的第五位是:" + jedis.getbit("name", 5));
            jedis.setbit("name", 5, true);
            System.out.println("改变第5位的值后:" + jedis.get("name"));

        }catch(Exception e){
            e.printStackTrace();
        }

        //判断是否存在key
        try {
            System.out.println("name是否存在:" + jedis.exists("name"));
        }catch(Exception e){
            e.printStackTrace();
        }

        //mset key1 value1 [key2 value2 ...]:批量添加
        //mget key1 [key2 ....]:批量获取
        try {
            System.out.println("批量获取name、name1、name2对应的值是:"+jedis.mget("name", "name1", "name2"));
            jedis.mset("one","1","two","2","three","3");
            System.out.println("批量获取到的one、two、three对应的值是:"+jedis.mget("one","two","three"));
        }catch(Exception e){
            e.printStackTrace();
        }

        //expire key time:为key设置过期时间
        try {
            System.out.println("设置过期时间之前的name值:" + jedis.get("name"));
            jedis.expire("name",5);
            Thread.sleep(6000);
            System.out.println("过期时间到达之后的name值:"+jedis.get("name"));

        }catch(Exception e){
            e.printStackTrace();
        }

        //setex key time value:这个是原子操作,同步进行,而set+expire是两步操作。
        try{
            jedis.setex("name",5,"carson");
            System.out.println("过期时间之前的name值:"+jedis.get("name"));
            Thread.sleep(6000);
            System.out.println("过期时间之后的name值:"+jedis.get("name"));
        }catch(Exception e){
            e.printStackTrace();
        }



    }


}

3.对List操作

import redis.clients.jedis.BinaryClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;

public class ListDemo {
    /**
     * 连接上redis服务器
     * @return
     */
    public static Jedis getJedis(){
        JedisShardInfo info = new JedisShardInfo("127.0.0.1", 6379);
        Jedis jedis = new Jedis(info);
        return jedis;
    }

    /**
     * 测试List相关的方法
     * List即为链表,可以联想Java中的数据结构双向链表,两者有许多相似之处
     * @param jedis
     */
    public static void testList(Jedis jedis){

        //lpush list_name value:链表头插入元素,可以多个元素
        //rpush list_name value 链表尾插入元素
        //lpop list_name :链表头弹出元素
        //rpop list_name :链表尾弹出元素
        //lrange list_name start end:输出start到end偏移量之间的所有元素
        try{
            jedis.lpush("list_","book");
            jedis.rpush("list_","table");
            jedis.lpush("list_","pen");
            jedis.rpush("list_","pencil");
            jedis.rpush("list_","watch");
            jedis.lpush("list_","ball");
            jedis.rpush("list_","water");
            jedis.rpush("list_","bag");
            System.out.println("获取当前list_链表所有元素:"+jedis.lrange("list_",0,-1));
            System.out.println("从链表头弹出的元素是:"+jedis.lpop("list_"));
            System.out.println("从链表尾弹出的元素是:"+jedis.rpop("list_"));
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println();
        }

        //lrem list_name count value:链表中删除与value相等的元素,其中count>0时,表示移除与value相等的元素,数量为count
        //count<0表示从尾到头搜索,移除与value相等的元素,数量为count
        //count=0表示移除表中所有与value相等的元素
        try{
            System.out.println("当前list_所有元素是:"+jedis.lrange("list_",0,-1));
            jedis.lrem("list_",2,"book");
            System.out.println("删除两个book元素之后的list_所有元素:"+jedis.lrange("list_",0,-1));
        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println();
        }

        //lindex list_name index:获取链表list_name中下标为index的值
        //lset list_name index value:将链表下标为index的元素值设为value
        //ltrim list_name start end:截取start和end之间的元素
        try{
            System.out.println("链表list_中下标3的元素是:"+jedis.lindex("list_",3));
            jedis.lset("list_",2,"banana");
            System.out.println("修改值之后list_的所有元素:"+jedis.lrange("list_",0,-1));
            jedis.ltrim("list_",1,3);
            System.out.println("截取之后list_中的元素为"+jedis.lrange("list_",0,-1));
        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println();
        }


        //llen  list_name:获取链表长度
        //linsert list_name before|after pivot value :将value插入pivot前或者后面,当pivot不存在时,则不操作。当有多个pivot时,以第一个pivot为主
        try{
            long size = jedis.llen("list_");
            System.out.println(size);
            System.out.println("执行插入操作之前list_链表的所有元素有:"+jedis.lrange("list_",0,-1));
            jedis.linsert("list_", BinaryClient.LIST_POSITION.BEFORE,"banana","apple");
            System.out.println("执行插入操作之后的链表list_所有元素为:"+jedis.lrange("list_",0,-1));
            jedis.linsert("list_", BinaryClient.LIST_POSITION.AFTER,"banana","apple");
            System.out.println("执行插入操作之后的链表list_所有元素为:"+jedis.lrange("list_",0,-1));

        }catch(Exception e){
            e.printStackTrace();
        }
        finally {
            System.out.println();
        }

        //rpoplpush list_name source dest:将source链表从尾部弹出,从dest头部压进
        try{
            int size = Integer.parseInt(""+jedis.llen("list_"));
            System.out.println("执行转移操作之前的list_元素有:"+jedis.lrange("list_",0,-1));
            for(int i=0;i

4.对Set操作

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;

public class SetDemo {

    /**
     * 连接上redis服务器
     * @return
     */
    public static Jedis getJedis(){
        JedisShardInfo info = new JedisShardInfo("127.0.0.1", 6379);
        Jedis jedis = new Jedis(info);
        return jedis;
    }

    /**
     * 主要讲解集合set的一些常见方法,该集合可以参考Java的集合,同样具有无序性、不可重复性
     * @param jedis
     */
    public static void testSet(Jedis jedis){

        //sadd set_name value1 [value2 ...]:添加元素到集合中
        //smembers set_name:输出集合中所有元素
        //scard set_name:返回链表的数量
        try{
            jedis.sadd("myset","apple","banana","orange");
            System.out.println(jedis.smembers("myset"));
            System.out.println(jedis.scard("myset"));
        }catch(Exception e){
            e.printStackTrace();
        }
        finally{
            System.out.println();
        }

        //srem set_name value1 [value2 ....]:从集合离面移除一个或者多个元素,并返回被移除元素的数量
        //spop set_name:随机地移除集合中的一个元素,并返回被移除的元素
        try{
            System.out.println("移除元素个数:"+jedis.srem("myset","banana"));
            System.out.println("移除指定元素之后的myset包含元素有:"+jedis.smembers("myset"));
            jedis.sadd("myset","peer","knif","ball");
            System.out.println("添加三个元素之后的myset:"+jedis.smembers("myset"));
            System.out.println("随机移除一个元素:"+jedis.spop("myset"));
            System.out.println("随机移除一个元素之后的myset:"+jedis.smembers("myset"));
        }catch(Exception e){
            e.printStackTrace();
        }
        finally{
            System.out.println();
        }

        //smove source_set dest_set item:如果集合source_set包含元素item,那么就会从集合source_set中移除元素item,并将元素item添加到集合dest_set中,
        //如果item成功移除,那么返回1,否则返回0.
        //sismember set_name item:检查元素item是否存在于集合set_name中
        try{
            System.out.println("当前myset中所有元素为:"+jedis.smembers("myset"));
            String[] strs = {"banana","apple","peer","melon","berry"};
            int size = strs.length;
            for(int i=0;i

5.对Hash操作

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;

import java.util.HashMap;

public class HashDemo {

    /**
     * 连接上redis服务器
     * @return
     */
    public static Jedis getJedis(){
        JedisShardInfo info = new JedisShardInfo("127.0.0.1", 6379);
        Jedis jedis = new Jedis(info);
        return jedis;
    }

    /**
     * 讲解哈希表的一些主要操作
     * @param jedis
     */
    public static void testHash(Jedis jedis){

        //hset hash_name key value:给hash表hash_name添加key-value键值对
        //hmset hash_name Map hash:给hash表同时添加一个或多个键值对,需要整合到map中作为hmset的输入
        //hget hash_name key:获取hash表hash_name中key对应的value
        //hmget hash_name key1 [key2 key3...]:获取多个key对应的值
        try{
            jedis.hset("myhash","name","Carson");
            System.out.println("获取myhash表中name对应的值:"+jedis.hget("myhash","name"));
            HashMap map = new HashMap();
            map.put("age","20");
            map.put("sex","female");
            map.put("birth","0317");
            jedis.hmset("myhash",map);
            System.out.println("同时获取多个key对应的value:"+jedis.hmget("myhash","name","age","sex"));

        }catch(Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        //hkeys hash_name:获取hash表中所有的key
        //hvals hash_name:获取hash表中所有的values
        try{
            System.out.println("获取myhash的所有的key:"+jedis.keys("myhash"));
            System.out.println("获取myhash的所有的value:"+jedis.hvals("myhash"));
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            System.out.println();
        }

        //hgetall hash_name:获取hash表所有的键值对
        //hexists hash_name key:判断key是不是在hash表中
        try{
            System.out.println("获取myhash中所有的键值对:"+jedis.hgetAll("myhash"));
            System.out.println("判断name是否在myhash中:"+jedis.hexists("myhash","name"));
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        //hlen hash_name:获取hash表的长度
        //hdel hash_name key1 [key2...]:删除hash表中的一个或多个元素
        try{
            System.out.println("获取myhash表的长度:"+jedis.hlen("myhash"));
            System.out.println("获取删除之前的myhash所有的元素:"+jedis.hgetAll("myhash"));
            jedis.del("name","sex");
            System.out.println("获取删除之后的myhash的元素:"+jedis.hgetAll("myhash"));
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        //hincrby hash_name key count:给hash表中key的值加数值count。
        //hde
        try{
            jedis.hset("myhash","money","200");
            System.out.println("incr之前的money对应的值:"+jedis.hget("myhash","money"));
            jedis.hincrBy("myhash","money",10);
            System.out.println("incr之后的money对应的值:"+jedis.hget("myhash","money"));


        }catch(Exception e){
            e.printStackTrace();
        }


    }

    public static void main(String[] args){
        testHash(getJedis());
    }
}

6.对Zset操作

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisShardInfo;

import java.util.HashMap;

public class ZsetDemo {
    /**
     * 连接上redis服务器
     * @return
     */
    public static Jedis getJedis(){
        JedisShardInfo info = new JedisShardInfo("127.0.0.1", 6379);
        Jedis jedis = new Jedis(info);
        return jedis;
    }

    public static void testZset(Jedis jedis){

        //zadd zset_name score member:zset_name有序集合中key值为member,value为score,注意顺序,同时该有序集合是以score进行排序的,重复member则会覆盖。
        //zadd zset_name Mapmap:对zset_name有序集合添加一个member、score键值对的map。
        //zcard zset_name :返回有序集zset_name的元素个数
        try{
            jedis.zadd("myzset",100.0,"id:1001");
            HashMap map = new HashMap();
            map.put("id:1002",50.0);
            map.put("id:1003",125.0);
            map.put("id:1004",75.0);
            map.put("id:1005",180.0);
            jedis.zadd("myzset",map);
            System.out.println("当前myzset的元素的个数是:"+jedis.zcard("myzset"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }


        //zcount zset_name min max:返回有序集中,score值>=min且<=max的成员的数量
        //zrangeByscore(zrangeByscoreWithscores) zset_name start end [withscores]:返回有序集合中的score区间的元素
        //zrange(zrangeWithscores) zset_name start end [withscores]:返回有序集中指定区间内的位置,成员位置按score从小到大排序
        //zrevrange(zrevrangeWithscores) zset_name start end [withscores]:返回有序集中指定区间内的位置,成员位置按score从大到小排序
        //zrevrangeByscore(zrevrangeByscoreWithscores) zset_name start end [withscores]:返回有序集合中的score区间的元素,score从大到小排序
        try{
            System.out.println("myzset中score处于100到200之间的元素有:"+jedis.zcount("myzset",100,200));
            System.out.println("返回利用score范围的元素的成员值:"+jedis.zrangeByScore("myzset",100,200));
            System.out.println("返回利用score区间的成员值包含score:"+jedis.zrangeByScoreWithScores("myzset",100,200));

            System.out.println("返回有序区间score排名区间内的所有成员值:"+jedis.zrange("myzset",0,-1));
            System.out.println("返回有序区间score排名区间内的所有成员与score值对:"+jedis.zrangeWithScores("myzset",0,-1));
            System.out.println("返回从高到低score排名区间的所有值:"+jedis.zrevrange("myzset",0,-1));
            System.out.println("返回从高到低score排名区间的所有值score对:"+jedis.zrevrangeWithScores("myzset",0,-1));
            System.out.println("返回从高到低score区间内的所有成员值:"+jedis.zrevrangeByScore("myzset",200,100));
            System.out.println("返回从高到低score区间内的所有成员score值对:"+jedis.zrevrangeByScoreWithScores("myzset",200,100));
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        //zrank zset_name member:查member在zset_name中排名位置,score从小到大排序,其中最小的为0
        //zrevrank zset_name member:查member在zset_name中排名位置,score从大到小排序,其中最大的为0.
        try{
            System.out.println("在从小到大的有序集合中id:1002的排名是:"+jedis.zrank("myzset","id:1002"));
            System.out.println("在从大到小的有序集合中id:1002的排名是:"+jedis.zrevrank("myzset","id:1002"));
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        //zrem zset_name member [member...]:移除指定一个或多个的member,不存在的member被忽略
        //zremrangebyrank  zset_name start end:删除排名区间内的元素
        //zremrangebyscore zset_name min max:删除score区间内的元素
        try{
            System.out.println("移除之前的myzset:"+jedis.zrange("myzset",0,-1));
            jedis.zrem("myzset","id:1001","id:1010");
            System.out.println("zrem之后的myzset元素:"+jedis.zrangeWithScores("myzset",0,-1));
            jedis.zremrangeByRank("myzset",0,1);
            System.out.println("zremByRank之后的myzset元素是:"+jedis.zrangeWithScores("myzset",0,-1));
            jedis.zremrangeByScore("myzset",150,200);
            System.out.println("zremrangeByScore之后的myzset元素是:"+jedis.zrangeWithScores("myzset",0,-1));

        }catch(Exception e){
            e.printStackTrace();
        }finally {
            System.out.println();
        }

        
    }


    public static void main(String[] args){
        testZset(getJedis());
    }
}

        以上代码讲述了对redis五种数据结构的具体操作,还有详细的注解,可以了解一些方法的特性,便于对Redis的使用有更深的了解。

你可能感兴趣的:(Redis,Jedis,Redis)