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();
    }


}


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