Redis003之使用jedis操作Redis常用的5种数据类型

String

 

public static void main(String[] args) {
        Jedis conn = new Jedis("localhost");
        //PONG 代表链接成功
        System.out.println(conn.ping());
//set key test    val 123
        conn.set("test", "123");
        System.out.println(conn.get("test"));//get key
        System.out.println(conn.exists("test"));// key是否存在
        System.out.println(conn.strlen("test"));//返回key的长度
        System.out.println(conn.getrange("test", 0, -1));//返回截取字符串长度 0 -1 截取全部
        System.out.println(conn.getrange("test", 1, 2));//23

        System.out.println(conn.append("test", "appendStr"));//追加,返回最后的长度
        System.out.println(conn.get("test"));

        conn.rename("test", "test_new");//重命名
        System.out.println(conn.exists("test"));//false


        conn.mset("key1", "val1", "key2", "val2");//批量插入
        System.out.println(conn.mget("key1", "key2"));//批量取出
        System.out.println(conn.del("key1"));//删除
        System.out.println(conn.exists("key1"));

        System.out.println(conn.getSet("key2", "2"));//取出旧值 并set新值
        System.out.println(conn.incr("key2")); //自增1 要求数值类型
        System.out.println(conn.incrBy("key2", 5));//自增5 要求数值类型
        System.out.println(conn.decr("key2"));//自减1 要求数值类型
        System.out.println(conn.decrBy("key2", 5));
        System.out.println(conn.incrByFloat("key2", 1.1));//增加浮点类型

        System.out.println(conn.setnx("key2", "existVal"));//返回0 只有在key不存在的时候才设置
        System.out.println(conn.get("key2"));// 3.1

        System.out.println(conn.msetnx("key2", "exists1", "key3", "exists2"));//只有key都不存在的时候才设置
        System.out.println(conn.mget("key2", "key3"));// null

        conn.setex("key4", 3, "3 seconds is no Val");//设置key 3 秒后失效
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(conn.get("key4"));// 3 seconds is no Val

        conn.psetex("key5", 2000, "2000 milliseconds is no Val ");//设置秒数单位为毫秒
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println(conn.get("key5"));//null

        conn.set("key6", "123456789");
        conn.setrange("key6", 3, "abcdefg"); //从第三位开始 将值覆盖 下标从0 开始
        System.out.println(conn.get("key6"));//123abcdefg

        System.out.println(conn.type("key6"));//返回数据类型  string

    }

列表list

 /**
     * Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
     一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
     * @param args
     */
    public static void main(String[] args) {
        Jedis conn = new Jedis("localhost");
        System.out.println(conn.ping());

        conn.lpush("list1","yz","wc","xzg"); //像list添加元素
        System.out.println(conn.lrange("list1",0,-1));//遍历元素
        System.out.println(conn.llen("list1"));//获取元素长度
        System.out.println(conn.lindex("list1",1));//获取 下面 1 的元素
        System.out.println(conn.lpop("list1"));//左侧弹出元素
        System.out.println(conn.rpop("list1"));//右侧弹出元素
        conn.lset("list1",0,"hxx");//设置下面0的元素val
        conn.rpushx("list1","yz");//如果 list1 存在 则set值

        //在list1 的 yz 后面插入 wc
//        conn.linsert("list1", BinaryClient.LIST_POSITION.AFTER,"yz","wc");
        conn.linsert("list1", ListPosition.AFTER.AFTER,"yz","wc");
        conn.lpush("list1","yz"); //头部添加
        conn.lrem("list1",2,"yz"); //移除 数量count(=0 所有 >0 从头部(左侧) <) 从尾部)为 yz的元素
        conn.ltrim("list1",1,-1);//按下面裁剪集合 返回 范围内的 元素

        conn.lpush("list2","cs1","cs2");
        System.out.println(conn.lrange("list1",0,-1));//[hxx, xzg, wc]
        System.out.println(conn.lrange("list2",0,-1));//[cs2, cs1]
        conn.rpoplpush("list1","list2");//集合list1 右侧弹出元素 加入 list2 左侧
        System.out.println(conn.lrange("list1",0,-1));//[hxx, xzg]
        System.out.println(conn.lrange("list2",0,-1));//[wc, cs2, cs1]

        System.out.println(conn.type("list1"));
    }

 

Hash

/**
 * Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象。
    Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)
 * @param args
 */
public static void main(String[] args) {

    Jedis conn = new Jedis("localhost");
    conn.hset("student","name","yz");
    System.out.println(conn.hget("student","name"));

    Map<String,String> studentFields = new HashMap<String,String>();
    studentFields.put("score","56");
    studentFields.put("addr","gaoxin");
    conn.hmset("student",studentFields);//批量添加
    System.out.println(conn.hgetAll("student"));//获取键值
    System.out.println(conn.hmget("student","score","name"));//批量获取key中field对应的val

    conn.hincrByFloat("student","score",1.2);// 同 String
    System.out.println(conn.hget("student","score"));

    System.out.println(conn.hkeys("student"));//获取所有的key
    System.out.println(conn.hvals("student"));//获取所有的val

    System.out.println(conn.hlen("student"));//获取长度
    System.out.println(conn.hexists("student","name"));//判断是否存在

    conn.hdel("student","addr");//删除一个field
    System.out.println(conn.hexists("student","addr"));

    conn.hsetnx("student","addr","hefei");//不存在 即设置
    System.out.println(conn.hget("student","addr"));

    System.out.println(conn.type("student"));//hash
}

 

set

/**
 * Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
 Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
 * @param args
 */
public static void main(String[] args) {
    Jedis conn = new Jedis("localhost");
    System.out.println(conn.ping());

    conn.sadd("set1","yz","zwl","xzg","hxx","xzg"); //像集合添加元素
    System.out.println(conn.smembers("set1"));//遍历所有元素
    System.out.println(conn.scard("set1"));//获取集合元素个数
    System.out.println(conn.sismember("set1","hxx"));//判断是否是集合元素
    System.out.println(conn.spop("set1"));//随机弹出一个元素
    System.out.println(conn.srandmember("set1",2));//随机返回 2 个元素 并不会从集合中移除
    System.out.println(conn.srem("set1","yz","zwl"));//移除元素

    conn.sadd("set2","hxx","yz","zwl","xzg");
    System.out.println(conn.sinter("set1","set2"));//求两个集合的交集
    System.out.println(conn.sinterstore("set3","set1","set2"));//求两个集合的交集 并存放到set3
    System.out.println(conn.smembers("set3"));

    System.out.println(conn.sdiff("set1","set2"));//求两个集合的差集 同时也存在  conn.sdiffstore()
    System.out.println(conn.sunion("set1","set2"));//求两个集合的并集 同时也存在  conn.sunionstore()

    System.out.println(conn.smove("set2","set1","yz"));//将yz 从 set2 移动dao set1 同时set2 中yz 移除
    System.out.println(conn.type("set1"));
}

zset有序集合

/**
 * Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。
 不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
 有序集合的成员是唯一的,但分数(score)却可以重复。
 集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
 * @param args
 */
public static void main(String[] args) {

    Jedis conn = new Jedis("localhost");
    System.out.println(conn.ping());

    Map<String,Double> members = new HashMap<String,Double>();
    members.put("yz",12.0);
    members.put("zwl",67.5);
    members.put("xzg",34.0);
    conn.zadd("zset1",members);//添加元素

    System.out.println(conn.zcard("zset1"));//获取集合元素个数
    System.out.println(conn.zrange("zset1",0,-1));//按照下标起始终止遍历元素
    System.out.println(conn.zrangeByScore("zset1",30,60));//按照分数起始终止遍历元素
    Set<Tuple> res0 = conn.zrangeByScoreWithScores("zset1",30,60);//按照分数起始终止遍历元素 返回 field score
    for(Tuple temp:res0){
        System.out.println(temp.getElement()+" : "+temp.getScore());
    }
    System.out.println(conn.zrevrange("zset1",0,-1));//按照下标起始终止倒序遍历元素
    System.out.println(conn.zrevrangeByScore("zset1",60,0));//按照分数起始终止倒序遍历元素

    System.out.println(conn.zscore("zset1","yz"));//获取元素score值
    System.out.println(conn.zcount("zset1",0,60));//获取元素分数区间的元素

    System.out.println(conn.zrank("zset1","yz"));//获取元素下标
    System.out.println(conn.zrevrank("zset1","yz"));//倒序获取元素下标
    System.out.println(conn.zrem("zset1","yz","zwl"));//删除元素
    System.out.println(conn.zremrangeByRank("zset3",0,-1));//删除元素通过下标范围
    System.out.println(conn.zremrangeByScore("zset4",0,10));//删除元素通过分数范围
    System.out.println(conn.zrange("zset1",0,-1));

    Map<String,Double> members2 = new HashMap<String,Double>();
    members2.put("yz",36.1);
    members2.put("zwl",12.5);
    members2.put("xzg",24.0);
    conn.zadd("zset2",members2);//添加元素
    System.out.println( conn.zincrby("zset1",1,"yz"));//增加指定分数
    Set<Tuple> rs = conn.zrangeWithScores("zset1",0,-1);
    for(Tuple temp:rs){
        System.out.println(temp.getElement()+" : "+temp.getScore());
    }
    System.out.println("===================================");
    Set<Tuple> rs2 = conn.zrangeWithScores("zset2",0,-1);
    for(Tuple temp:rs2){
        System.out.println(temp.getElement()+" : "+temp.getScore());
    }
    System.out.println("===================================");

    conn.zinterstore("zset3","zset1","zset2");
    Set<Tuple> rs3 = conn.zrangeWithScores("zset3",0,-1);
    for(Tuple temp:rs3){
        System.out.println(temp.getElement()+" : "+temp.getScore());
    }

    /**
     * ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE SUM|MIN|MAX]
     计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination 。
     默认情况下,结果集中某个成员的 score 值是所有给定集下该成员 score 值之 和 。

     WEIGHTS

     使用 WEIGHTS 选项,你可以为 每个 给定有序集 分别 指定一个乘法因子(multiplication factor),
     每个给定有序集的所有成员的 score 值在传递给聚合函数(aggregation function)之前都要先乘以该有序集的因子。
     如果没有指定 WEIGHTS 选项,乘法因子默认设置为 1 。

     AGGREGATE

     使用 AGGREGATE 选项,你可以指定并集的结果集的聚合方式。
     默认使用的参数 SUM ,可以将所有集合中某个成员的 score 值之 和 作为结果集中该成员的 score 值;
     使用参数 MIN ,可以将所有集合中某个成员的 最小 score 值作为结果集中该成员的 score 值;
     而参数 MAX 则是将所有集合中某个成员的 最大 score 值作为结果集中该成员的 score 值。
     */
    conn.zunionstore("zset4","zset1","zset2");
    Set<Tuple> rs4 = conn.zrangeWithScores("zset4",0,-1);
    for(Tuple temp:rs4){
        System.out.println(temp.getElement()+" : "+temp.getScore());
    }

    System.out.println(conn.type("zset1"));//zset

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值