import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ZParams;
import redis.clients.jedis.ZParams.Aggregate;
public class MyStudy {
static Jedis conn = new Jedis("127.0.0.1",6379);
public static void main(String[] args) {
//字符串
System.out.println("\n***************\ndemo1:");
demo1();
System.out.println("\n***************\ndemo2:");
demo2();
//列表
System.out.println("\n***************\ndemo3:");
demo3();
System.out.println("\n***************\ndemo4:");
demo4();
//集合
System.out.println("\n***************\ndemo5:");
demo5();
System.out.println("\n***************\ndemo6:");
demo6();
//散列
System.out.println("\n***************\ndemo7:");
demo7();
//有序集合
System.out.println("\n***************\ndemo8:");
demo8();
System.out.println("\n***************\ndemo9:");
demo9();
}
/*
* incr和decr
* */
public static void demo1(){
String key;
conn.del("key");//测试,每次都删除掉变量key
System.out.println(conn.get("key"));//不存在,则null
System.out.println("——————————————");
conn.incr("key");//不存在,但是自增1,用incr,结果是0+1
System.out.println(conn.get("key"));
System.out.println("——————————————");
conn.incrBy("key", 15);//增加某个数,用incurBy,结果是1+15=16
conn.decrBy("key", 5);//减去某个数,用decrBy,结果是16-5=11
System.out.println(conn.get("key"));
}
/*
* append, getrange, setrange,
* getbit, setbit, 同理替换某个二进制位为0或1
* bitcount, bitop
* */
public static void demo2(){
String string_key;
conn.del("string_key");
System.out.println(conn.get("string_key"));
System.out.println("——————————————");
conn.append("string_key", "hello ");//追加字符串,虽本身不存在
conn.append("string_key", "world!");//共12个字符
System.out.println(conn.get("string_key"));
System.out.println("——————————————");
System.out.println(conn.getrange("string_key", 3, 7));//0开始的偏移,获取字符串,同substr
conn.setrange("string_key", 0, "H");//替换某个位置字符
conn.setrange("string_key", 6, "W");
System.out.println(conn.get("string_key"));
System.out.println("——————————————");
conn.setrange("string_key", 11, ", how are you?");//可增长某个位置字符串
System.out.println(conn.get("string_key"));
}
/*
* rpush, lpush, rpop, lpop, lindex, lrange, ltrim
* 列表允许从序列的两端推入或弹出元素,相当于双端队列
* */
public static void demo3(){
String list_key;
conn.del("list_key");
conn.rpush("list_key", "2");//右推
conn.lpush("list_key", "1");//左推
conn.rpush("list_key", "3");
System.out.println(conn.lrange("list_key", 0, -1)); //-1表结尾
System.out.println("——————————————");
System.out.println(conn.lpop("list_key"));//左弹出
System.out.println(conn.lpop("list_key"));
System.out.println(conn.lrange("list_key", 0, -1));
System.out.println("——————————————");
conn.rpush("list_key", "4","5","6");
System.out.println(conn.lrange("list_key", 0, -1));
System.out.println("——————————————");
conn.ltrim("list_key", 2, -1);//修剪,意义是保留偏移为2到结尾的元素
System.out.println(conn.lrange("list_key", 0, -1));
}
/*
* 阻塞式的列表弹出命令
* blpop, brpop, rpoplpush, brpoplpush
* 可以加参数timeout,在timeout秒之内阻塞并等待可弹出的元素出现
* */
public static void demo4(){
conn.del("list","list2");
conn.rpush("list", "1");
conn.rpush("list", "2");
System.out.println(conn.lrange("list", 0, -1));
System.out.println("——————————————");
conn.rpush("list2", "3");
System.out.println(conn.lrange("list2", 0, -1));
System.out.println("——————————————");
conn.brpoplpush("list2", "list", 1);//list2右弹出并左推入到list中,1是1秒阻塞时间
System.out.println(conn.lrange("list", 0, -1));
System.out.println(conn.lrange("list2", 0, -1));
System.out.println("——————————————");
System.out.println(conn.brpoplpush("list2", "list", 1));//list2已经没有元素,则无论阻塞的1秒内是否有值进入,都是在1秒后返回空(这个空值已经被记录)
conn.brpoplpush("list", "list2", 1);//list右弹出并左推入到list2中
System.out.println(conn.lrange("list", 0, -1));
System.out.println(conn.lrange("list2", 0, -1));
System.out.println("——————————————");
conn.blpop(1, "list","list2");//从list和list2中逐个遍历,左弹出元素
conn.blpop(1, "list","list2");
conn.blpop(1, "list","list2");
System.out.println(conn.lrange("list", 0, -1));
System.out.println(conn.lrange("list2", 0, -1));
}
/*
* 集合:以无序的方式来存储多个各不相同的元素
* sadd, srem, sismember(是否在集合内), scard, smembers,
* srandmember, spop(随机移除一个元素), smove
* */
public static void demo5(){
conn.del("set_key");
HashSet<String> hs;
conn.sadd("set_key", "a", "b", "c");
System.out.println(conn.srem("set_key", "c", "d"));//d不存在的,所以只删除了c,返回删除的个数
System.out.println(conn.scard("set_key"));//返回元素的个数
System.out.println("——————————————");
hs = (HashSet<String>) conn.smembers("set_key");
printSet(hs);
System.out.println("——————————————");
conn.smove("set_key", "set_key2", "b");//把一个元素移动到另一个集合中
hs = (HashSet<String>) conn.smembers("set_key");
printSet(hs);
hs = (HashSet<String>) conn.smembers("set_key2");
printSet(hs);
}
public static void printSet(HashSet<String> hs){
Iterator<String> it = hs.iterator();
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
}
/*
* 用于组合和处理多个集合
* sdiff(差集), sdiffstore, sinter, sinterstore, sunion, sunionstore
*
* */
public static void demo6(){
conn.del("skey1", "skey2", "skey");
HashSet<String> hs;
conn.sadd("skey1", "a", "b", "c", "d");
conn.sadd("skey2", "c", "d", "e", "f");
hs = (HashSet<String>)conn.sdiff("skey1", "skey2");//差集,存在于第一个集合而不在后面集合
printSet(hs);
System.out.println("——————————————");
conn.sinterstore("skey", "skey1", "skey2");//把交集存储在第一个参数skey集合中,返回交集的元素个数
hs = (HashSet<String>)conn.smembers("skey");
printSet(hs);
System.out.println("——————————————");
hs = (HashSet<String>)conn.sunion("skey1", "skey2");//并集
printSet(hs);
}
/*
* 散列:将多个键值对存储到一个redis键里面
* hset, hget
* hmset, hmget, hdel, hlen
* hexists, hkeys(获取所有键), hvals(获取所有值),
* hgetall(获取所有键值), hincrby(给某个值增加某数), hincrbyfloat
* */
public static void demo7(){
conn.del("hash_key");
Map<String, String> map = new HashMap<String,String>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
conn.hmset("hash_key", map);//hset和hget是单参数版,即一个一个set
ArrayList<String> list = (ArrayList<String>) conn.hmget("hash_key", "k1", "k2");
System.out.println(list.get(0) + " " + list.get(1));
HashSet<String> hs = (HashSet<String>) conn.hkeys("hash_key");//返回只有键的集合
printSet(hs);
System.out.println("——————————————");
System.out.println(conn.hlen("hash_key"));//键值对个数
System.out.println(conn.hexists("hash_key", "k1"));//存在k1键
System.out.println(conn.hexists("hash_key", "num"));//不存在num键
conn.hincrBy("hash_key", "num", 10);//给num键增加10
System.out.println(conn.hget("hash_key", "num"));
System.out.println("——————————————");
conn.hdel("hash_key", "k1", "k3");//删除某键值对
hs = (HashSet<String>) conn.hkeys("hash_key");//返回只有键的集合
printSet(hs);
}
public static void demo8(){
conn.del("zkey");
conn.zadd("zkey", 1, "a");//可以单个添加
Map<String, Double> map = new HashMap();
map.put("b", (double) 2);
map.put("c", (double) 3);
conn.zadd("zkey", map);//也可以多个添加
System.out.println(conn.zcard("zkey"));//键值对个数
conn.zincrby("zkey", 1, "c");//对值增加某数
System.out.println(conn.zscore("zkey", "c"));//获取某个键的值
System.out.println(conn.zrank("zkey", "a"));//获取排名,从0开始,按升序
System.out.println(conn.zcount("zkey", 0, 3));//获取值范围是0到3之间的个数
System.out.println("——————————————");
conn.zrem("zkey", "b");//移除
HashSet<String> hs = (HashSet<String>) conn.zrange("zkey", 0, -1);//获取有序集合的所有元素的键,似乎不能获取键值对
printSet(hs);
}
public static void demo9(){
conn.del("zset-1", "zset-2", "zseti", "zsetu");
conn.zadd("zset-1", 1, "a");
conn.zadd("zset-1", 2, "b");
conn.zadd("zset-1", 3, "c");
conn.zadd("zset-2", 4, "b");
conn.zadd("zset-2", 1, "c");
conn.zadd("zset-2", 0, "d");
conn.zinterstore("zseti", "zset-1", "zset-2");//交集
HashSet<String> hs = (HashSet<String>) conn.zrange("zseti", 0, -1);//交集并默认把数值相加,可以设置交集的数sum,min,max
printSet(hs);
System.out.println(conn.zscore("zseti", "c") + " " + conn.zscore("zseti", "b"));
System.out.println("——————————————");
ZParams zp = new ZParams().aggregate(Aggregate.MIN);//把相交的数取小数
conn.zunionstore("zsetu", zp, "zset-1", "zset-2");//并集
hs = (HashSet<String>) conn.zrange("zsetu", 0, -1);//并集并把相交的数取小数
printSet(hs);
System.out.print(conn.zscore("zsetu", "d") + " " + conn.zscore("zsetu", "a") + " ");
System.out.println(conn.zscore("zsetu", "c") + " " + conn.zscore("zsetu", "b"));
}
执行结果:
***************
demo1:
null
——————————————
1
——————————————
11
***************
demo2:
null
——————————————
hello world!
——————————————
lo wo
Hello World!
——————————————
Hello World, how are you?
***************
demo3:
[1, 2, 3]
——————————————
1
2
[3]
——————————————
[3, 4, 5, 6]
——————————————
[5, 6]
***************
demo4:
[1, 2]
——————————————
[3]
——————————————
[3, 1, 2]
[]
——————————————
null
[3, 1]
[2]
——————————————
[]
[]
***************
demo5:
1
2
——————————————
a b
——————————————
a
b
***************
demo6:
a b
——————————————
c d
——————————————
a b c d e f
***************
demo7:
v1 v2
k3 k1 k2
——————————————
3
true
false
10
——————————————
k2 num
***************
demo8:
3
4.0
0
2
——————————————
a c
***************
demo9:
c b
4.0 6.0
——————————————
d a c b
0.0 1.0 1.0 2.0