Redis学习笔记13、Jedis基础编程的实践案例Zset、Set

1、Java 操作set

package com.example.actuatordemo.redis;

import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;

/**
 * @author haoxiansheng
 */
@Slf4j
public class RedisSetDemo {
    /**
     * redis 的set 集合是String 类型的无序集合
     * 集合成员是唯一的,集合中不能出现重复的元素
     * set集合是通过hash表实现的、添加、删除、查找复杂度都是O(1)
     *
     * @param args
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");
        jedis.del("set1");

        log.info("jedis.ping()=>{}", jedis.ping());
        log.info("jedis.type(\"set1\")=>{}", jedis.type("set1"));

        // sadd函数;向集合中添加元素
        jedis.sadd("set1", "user01", "user02", "user03");

        // smembers函数:遍历所有元素
        log.info("jedis.smembers(\"set1\")=>{}", jedis.smembers("set1"));

        // scard 函数:获取集合元素个数
        log.info("jedis.scard(\"set1\")=>{}", jedis.scard("set1"));

        // sismember判断是否是集合元素
        log.info("jedis.sismember(\"set1\",\"user04\")=>{}", jedis.sismember("set1", "user04"));

        // srem 函数 移除元素
        log.info("jedis.srem(\"set1\", \"user02\",\"user01\")=>{}", jedis.srem("set1", "user02", "user01"));

        // smembers函数:遍历所有元素
        log.info("jedis.smembers(\"set1\")=>{}", jedis.smembers("set1"));

        jedis.close();
    }


}


2、Java 操作 Zset

package com.example.actuatordemo.redis;

import lombok.extern.slf4j.Slf4j;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Tuple;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author haoxiansheng
 */
@Slf4j
public class RedisZsetDemo {

    /**
     * 1、Zset有序集合和Set 集合都是String 类型元素的集合,企且不允许有重复的元素
     * 2、不同的是Zset 的每一个元素都会关联一个double类型的分数,用于从小到大进行排序
     * 3、集合通过哈希表实现,添加、删除、查找的时间复杂度O(1)
     * 4、集合中最大的成员数为2^32-1=4294967295,每个集合可以存40多亿个元素
     *
     * @param args
     */
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost");

        log.info("jedis.ping()=>{}", jedis.ping());
        jedis.del("salary");

        Map<String, Double> members = new HashMap<>();
        members.put("u01", 1000.0);
        members.put("u02", 2000.0);
        members.put("u03", 3000.0);
        members.put("u04", 4000.0);
        members.put("u05", 5000.0);

        // 批量添加元素 类型为java map 映射表
        jedis.zadd("salary", members);

        // 获取类型
        log.info("jedis.type(\"salary\")=>{}", jedis.type("salary"));

        // 获取集合元素的个数
        log.info("jedis.zcard(\"salary\")=>{}", jedis.zcard("salary"));

        // 按照下标 [起, 止] 遍历元素
        log.info("jedis.zrange(\"salary\", 0, -1)=>{}", jedis.zrange("salary", 0, -1));

        // 按照下标 [起, 止] 倒序遍历元素
        log.info("jedis.zrevrange(\"salary\", 0, -1)=>{}", jedis.zrevrange("salary", 0, -1));

        // 按照分数(薪资) [起,止] 遍历元素
        log.info(" jedis.zrangeByScore=>{}", jedis.zrangeByScore("salary", 1000, 10000));

        // 按照薪资 [起,止] 遍历元素 带分数返回
        Set<Tuple> tuples = jedis.zrangeByScoreWithScores("salary", 1000, 10000);
        tuples.forEach(x -> log.info("element=>{}, score=>{}", x.getElement(), x.getScore()));

        //  按照分数 [起,止] 倒序遍历元素
        log.info("jedis.zrevrangeByScore=>{}", jedis.zrevrangeByScore("salary", 1000, 4000));

        // 获取[起, 止] 分数区间的元素数量
        log.info("jedis.zcount=>{}", jedis.zcount("salary", 1000, 4000));

        // 获取元素score 值:薪资
        log.info("jedis.zscore=>{}", jedis.zscore("salary", "u01"));

        // 获取元素下标
        log.info("jedis.zrank=>{}", jedis.zrank("salary", "u01"));

        // 倒序获取元素的下标
        log.info("jedis.zrevrank=>{}", jedis.zrevrank("salary", "u01"));

        // 删除元素
        log.info("jedis.zrem=>{}", jedis.zrem("salary", "u01", "u02"));

        // 删除元素 通过下标范围
        log.info("jedis.zremrangeByRank=>{}", jedis.zremrangeByRank("salary", 0, 1));

        // 删除元素 通过分数范围
        log.info("jedis.zremrangeByScore=>{}", jedis.zremrangeByScore("salary", 1000, 3000));

        // 按照下标 [起, 止] 遍历元素
        log.info("jedis.zrange(\"salary\", 0, -1)=>{}", jedis.zrange("salary", 0, -1));

        Map<String, Double> members2 = new HashMap<>();
        members2.put("u11", 100.0);
        members2.put("u12", 200.0);
        members2.put("u13", 300.0);
        members2.put("u14", 400.0);

        // 批量添加元素
        jedis.zadd("salary", members2);

        // 增加指定分数
        log.info("jedis.zincrby=>{}", jedis.zincrby("salary", 10000, "u12"));

        // 按照下标 [起, 止] 遍历元素
        log.info("jedis.zrange(\"salary\", 0, -1)=>{}", jedis.zrange("salary", 0, -1));

        jedis.close();
    }


}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章