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