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