java实现redis的基本命令

博客展示了多个demo的执行结果,涉及不同类型的数据,如null、字符串、数组等。推测这些结果可能是基于Java和Redis相关操作得出,体现了不同操作下的数据输出情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


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 
——————————————

***************
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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值