首页 > 技术文章 > java操作redis

shujiying 2019-01-18 16:40 原文


static Jedis jedis=new Jedis("localhost");

/**
* 测试redis 字符串
*/
@Test
public void testString(){
jedis.flushDB();
jedis.set("str","");
jedis.incr("str");//自增 如果用户对一个不存在的键或一个保存了空串的键上执行自增或者自减操作,
// redis 在执行操作时会将这个键的值当作是0处理,
// 如果用户尝试对一个值无法被解释为整数或浮点数的字符串键执行自增或者自减操作,
// 那么redis将向用户返回一个错误
System.out.println("str 自增后的值:"+jedis.get("str"));
jedis.incrBy("str",5);
System.out.println("str 按照变量自增:"+jedis.get("str"));
jedis.set("javastring","value1");//增加数据
jedis.set("hello","world");
jedis.set("hello","worlds");//修改数据
System.out.println(jedis.get("hello"));//获取数据
System.out.println(jedis.del("hello"));//删除数据
System.out.println(jedis.append("hello"," ni hao")); //追加
System.out.println("增加多个值:"+jedis.mset("k1","v1","k2","v2"));
System.out.println("获取多个值:"+jedis.mget("k1","k2"));
System.out.println("删除多个值:"+jedis.del(new String[]{"k1","k2"}));
jedis.setnx("key1","kkk");//将 key 的值设为 value ,当且仅当 key 不存在
jedis.setex("key1",2,"sdsds"); //将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。
System.out.println(jedis.getSet("key1","newKey1")); //于设置指定 key 的值,并返回 key 的旧值

System.out.println(jedis.getrange("key1",1,2)); //截取字符串
jedis.setrange("key1",2,"ni");
System.out.println("setrange 之后的值:"+jedis.get("key1"));
System.out.println("获取字符串长度:"+jedis.strlen("key1"));
}

/**
* 测试redis list
*/
@Test
public void testList(){
jedis.flushDB();
jedis.del("javalist");
jedis.lpush("javalist","a");
jedis.lpush("javalist","b","c");
List<String> listOne=jedis.sort("javalist",new SortingParams().alpha().desc()); ////字符串降序排序
listOne.forEach(x->System.out.println(x));
/* List<String> list=jedis.lrange("javalist",0,-1); ////lange 获取list中的值 end为-1 代表查询全部
list.forEach(x->System.out.println(x));*/
//System.out.println("javalist 出栈(左端)"+jedis.lpop("javalist"));
//System.out.println("javalist 出栈(右端)"+jedis.rpop("javalist"));
// System.out.println(jedis.ltrim("javalist",0,1)); //只保留指定区间的数据
System.out.println("修改下标为0 的为k:"+jedis.lset("javalist",0,"k"));
System.out.println("javalist 的长度:"+jedis.llen("javalist"));
System.out.println("javalist 下标0 对应的元素为:"+jedis.lindex("javalist",0));
jedis.lrem("javalist",0,"abc"); //移除 count > 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
//count < 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
// count = 0 : 移除表中所有与 value 相等的值。
//阻塞操作
System.out.println(jedis.blpop(5,"javalist")); //在五秒之内阻塞并等待可弹出的元素出现,弹出元素
System.out.println(jedis.brpop(5,"javalist")); //在五秒之内阻塞并等待可弹出的元素出现,弹出元素
//jedis.rpoplpush("srckey","destkey"); 从srckey 列表中弹出位于最右端的元素,
// 并插入destkey 列表的左端,并向用户返回这个元素
//jedis.brpoplpush("srckey","destkey",5); rpoplpush的阻塞版
}

/**
* 测试redis set
*/
@Test
public void testSet(){
jedis.flushDB();
jedis.sadd("javaset","a","c","d","b");
System.out.println("javaset 所有元素为:"+jedis.smembers("javaset"));
System.out.println("javaset 中包含的元素个数:"+jedis.scard("javaset"));
System.out.println("javaset 中是否包含a:"+jedis.sismember("javaset","a"));
// System.out.println("javaset 中随机移除;"+jedis.spop("javaset"));
//System.out.println("javaset 中移除a,b:"+jedis.srem("javaset","a","b"));
System.out.println(jedis.smembers("javaset"));

jedis.sadd("javaset2","c","d","e","f");
System.out.println("javaset javaset2 的交集:"+jedis.sinter("javaset","javaset2"));
System.out.println("javaset javaset2 的并集:"+jedis.sunion("javaset","javaset2"));
System.out.println("javaset javaset2 的差集:"+jedis.sdiff("javaset","javaset2"));
jedis.sunionstore("javaset3","javaset","javaset2");//取javaset javaset3 的并集,并存于javaset3 类似的还有 sinterstore,sdiffstore
System.out.println("javaset3:"+jedis.smembers("javaset3"));

System.out.println("将javaset 中a删除 并移入javaset2中:"+jedis.smove("javaset","javaset2","a"));
jedis.smembers("javaset").forEach(x->System.out.println(x));
jedis.smembers("javaset2").forEach(x->System.out.println(x));
System.out.println("集合测试完毕");
System.out.println( jedis.srandmember("javaset"));
System.out.println( jedis.srandmember("javaset",-3)); //count >0 命令返回的随机数不会重复 当count为负数 返回的随机数可能会重复


}

/**
* 测试redis hash数据结构
*/
@Test
public void testHash(){
Map<String,String> map=new HashMap<String,String>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
map.put("key4","value4");
jedis.hmset("hash",map); //添加名称为hash 的元素
jedis.hset("hash","key5","value5");
System.out.println(jedis.hgetAll("hash"));//获取hash的所有值
System.out.println("keys:"+jedis.hkeys("hash"));//获取hash 对应的所有key
System.out.println("values:"+jedis.hvals("hash"));//获取hash 对应的所有value
System.out.println("将key6 保存的值加上一个整数,如果key6 不存在 则添加key6:"+jedis.hincrBy("hash","key6",6));
System.out.println("将key6 保存的值加上一个整数,如果key6 不存在 则添加key6:"+jedis.hincrBy("hash","key6",6));
System.out.println(jedis.hgetAll("hash"));

System.out.println("删除一个或多个键值对"+jedis.hdel("hash","key2","key3"));
System.out.println("hash 中的个数"+jedis.hlen("hash"));
System.out.println("判断hash中是否存在 key3:"+jedis.hexists("hash","key3"));
System.out.println("获取hash中的值:"+jedis.hmget("hash","key3","key4"));

}

/**
* 测试redis 有序集合
*/
@Test
public void testZSet(){
jedis.flushDB();
jedis.zadd("zset1",2d,"hello"); //添加
Map<String,Double> map=new HashMap<String,Double>();
map.put("wfassf",1d);
map.put("world",3d);
map.put("my",4d);
jedis.zadd("zset1",map);//添加
System.out.println(jedis.zrange("zset1",0,-1)); //zcard 获取长度 zrang 获取指定范围数据
System.out.println("zset1 长度为:"+jedis.zcard("zset1")); //zcard 获取长度
System.out.println(jedis.zincrby("zset1",5,"my")); //将member 成员分值加上score
System.out.println("zrange:"+jedis.zrange("zset1",0,-1));
System.out.println("zcount:"+jedis.zcount("zset1",0,3)); //返回介于min max 之间的成员数量
System.out.println("zrank:"+jedis.zrank("zset1","world")); //memember 在有序集合中的排名
System.out.println("zscore:"+jedis.zscore("zset1","world")); //返回member的分值
//System.out.println("zrem:"+jedis.zrem("zset1","my"));//移除成员 并返回被移除成员的数量
System.out.println("zrevrank:"+jedis.zrevrank("zset1","world")); //返回member 的排名 成员按照分值从大到小
System.out.println("zrevange:"+jedis.zrevrange("zset1",0,-1)); //返回有序集合 给定排名范围内的成员 成员按照分值从大到小排列
System.out.println("zrevangebyscore;"+jedis.zrangeByScore("zset1",2,3)); //返回有序集合中 分值介于min max 之间的所有成员,闭区间
System.out.println("zrevrangeByScore:"+jedis.zrevrangeByScore("zset1",2,3));//返回有序集合中 分值介于min max 之间的所有成员,闭区间
System.out.println("zremrangeByRank:"+jedis.zremrangeByRank("zset1",9,10));//移除有序集合中排名在start 到end 之间的成员
System.out.println("zremrangeByScore:"+jedis.zremrangeByScore("zset1",9,10));//移除有序集合中分数在start 到end之间的成员
jedis.zinterstore("zset2","zset1");//对给定的有序集合执行类似于集合的交集运算
jedis.zunionstore("zset3","zset1");//对给定的有序集合执行类似于集合的并集运算

Set<Tuple> set= jedis.zrangeWithScores("zset1",0,-1);
for(Tuple tuple:set){
System.out.println(tuple.getElement()+":"+tuple.getScore());
}
System.out.println("zrangeByLex:"+jedis.zrangeByLex("zset1","-","+")); //合法的 min 和 max 参数必须包含 ( 或者 [ , 其中 ( 表示开区间(指定的值不会被包含在范围之内), 而 [ 则表示闭区间(指定的值会被包含在范围之内)。
System.out.println("zrangeByLex:"+jedis.zrangeByLex("zset1","[world","[worlds",0,5));
}

 

推荐阅读