Redis系列文章------8.使用Jedis操作Redis

原创:兜里的猫

本章目录

  • Jedis概述
  • Java中使用Jedis

1. Jedis概述

什么是Jedis?

Jedis是官方推荐的java连接redis开发工具,要在Java开发中使用Redis中间件,必须对Jedis熟悉才行。

2. Java中使用Jedis

第一步:

构建一个springboot项目,然后导入Jedis和fastjson依赖。

<!--Jedis-->
<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>3.2.0</version>
</dependency>

<!--fastJson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

第二步:

代码测试:

  • 连接redis数据库
  • 操作命令
  • 关闭连接
public class TestPing {
public static void main(String[] args) {
    // 1.创建Jedis对象(配置ip和端口)
    Jedis jedis = new Jedis("ip", port);
    // 有密码的需设置密码
    jedis.auth("pwd");
    // 2.jedis中所有的方法就是之前redis-cli操作的所有命令!几乎一样!

    // 打印返回PONG,则连接测试成功!
    System.out.println(jedis.ping());
}

}

jedis的基本方法:

public class TestKey {
public static void main(String[] args) {
    Jedis jedis = new Jedis("106.13.85.14", 6379);
    jedis.auth("myredis94");

    //System.out.println("清空数据:" + jedis.flushDB());
    System.out.println("判断某个key是否存在:" + jedis.exists("name"));
    System.out.println("新增键值对:" + jedis.set("name", "ethan"));
    System.out.println("新增键值对:" + jedis.set("pwd", "pwd"));
    System.out.println("查看系统中所有的key:" + jedis.keys("*"));
    System.out.println("删除key为pwd的:" + jedis.del("pwd"));
    System.out.println("判断pwd键是否存在:" + jedis.exists("pwd"));
    System.out.println("查看name键的存储类型:" + jedis.type("name"));
    System.out.println("随机返回key空间的一个:" + jedis.randomKey());
    System.out.println("重命名键name:" + jedis.rename("name", "account"));
    System.out.println("获取修改后的account:" + jedis.get("account"));
    System.out.println("按索引查询:" + jedis.select(0));
    System.out.println("获取当前数据库中key的数量:" + jedis.dbSize());
    // 关闭连接
    jedis.close();
}

}

输出内容:

判断某个key是否存在:false
新增键值对:OK
新增键值对:OK
查看系统中所有的key:[k3, name, money, pwd, k1, k2, out]
删除key为pwd的:1
判断pwd键是否存在:false
查看name键的存储类型:string
随机返回key空间的一个:k3
重命名键name:OK
获取修改后的account:ethan
按索引查询:OK
获取当前数据库中key的数量:6

对String类型的操作:

public class TestString {
public static void main(String[] args) {
    Jedis jedis = new Jedis("106.13.85.14", 6379);
    jedis.auth("myredis94");

    // 清空当前数据库
    jedis.flushDB();
    System.out.println("==============增加数据==============");
    System.out.println(jedis.set("k1", "v1"));
    System.out.println(jedis.set("k2", "v2"));
    System.out.println(jedis.set("k3", "v3"));
    System.out.println("删除键k2:" + jedis.del("k2"));
    System.out.println("获取键k2:" + jedis.get("k2"));
    System.out.println("修改k1:" + jedis.set("k1", "v1_changed"));
    System.out.println("获取k1的值:" + jedis.get("k1"));
    System.out.println("在k3后面加入值:" + jedis.append("k3", "_append"));
    System.out.println("获取k3的值:" + jedis.get("k3"));
    System.out.println("增加多个键值对:" + jedis.mset("k4", "v4", "k5", "v5"));
    System.out.println("获取多个键值对:" + jedis.mget("k4", "k5"));
    System.out.println("删除多个键值对:" + jedis.del("k4", "k5"));
    System.out.println("获取k4,k5的值:" + jedis.mget("k4", "k5"));

    jedis.flushDB();
    System.out.println("==============清空当前数据库,重新添加键值对==============");
    System.out.println(jedis.setnx("k1", "v1"));
    System.out.println(jedis.setnx("k2", "v2"));
    System.out.println(jedis.setnx("k2", "v2_new"));
    System.out.println(jedis.get("k1"));
    System.out.println(jedis.get("k2"));

    System.out.println("==============添加键值对,并设置有效时间==============");
    System.out.println(jedis.setex("k3", 5, "v3"));
    System.out.println(jedis.get("k3"));
    try {
        TimeUnit.SECONDS.sleep(5);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println(jedis.get("k3"));
    System.out.println("==============获取原始值,更新为新值==============");
    System.out.println(jedis.getSet("k2", "v2_get_set"));
    System.out.println(jedis.get("k2"));
    System.out.println("获取k2的值的指定字段:" + jedis.getrange("k2", 2, 4));
    // 关闭连接
    jedis.close();
}

}

输出内容:

==============增加数据==============
OK
OK
OK
删除键k2:1
获取键k2:null
修改k1:OK
获取k1的值:v1_changed
在k3后面加入值:9
获取k3的值:v3_append
增加多个键值对:OK
获取多个键值对:[v4, v5]
删除多个键值对:2
获取k4,k5的值:[null, null]
==============清空当前数据库,重新添加键值对==============
1
1
0
v1
v2
==============添加键值对,并设置有效时间==============
OK
v3
null
==============获取原始值,更新为新值==============
v2
v2_get_set
获取k2的值的指定字段:_ge

对List类型的操作:

public class TestList {
public static void main(String[] args) {
    Jedis jedis = new Jedis("106.13.85.14", 6379);
    jedis.auth("myredis94");

    // 清空当前数据库
    jedis.flushDB();
    System.out.println("==============增加一个list==============");
    jedis.lpush("user", "qq", "ww", "ee", "rr", "tt");
    jedis.lpush("user", "aa", "bb");
    jedis.lpush("user", "bb");
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("获取user的0-3区间的元素:" + jedis.lrange("user", 0, 3));
    // 删除列表指定的值,第二个参数为删除的个数(有重复时),后add进去的值先被删除,类似于出栈
    System.out.println("删除指定元素的个数:" + jedis.lrem("user", 2, "bb"));
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("删除下0-3区间之外的元素:" + jedis.ltrim("user", 0, 3));
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("user列表出栈(左端):" + jedis.lpop("user"));
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("user列表出栈(右端):" + jedis.rpop("user"));
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("user列表添加元素,从列表右端,与lpush相对应:" + jedis.rpush("user", "dd"));
    System.out.println("user的所有内容:" + jedis.lrange("user", 0, -1));
    System.out.println("修改user指定下标1的内容:" + jedis.lset("user", 1, "val_new"));
    System.out.println("获取user下标为1的元素值:" + jedis.lindex("user", 1));
    System.out.println("user的长度:" + jedis.llen("user"));
    System.out.println("增加另一个list:" + jedis.lpush("sortList", "3", "5", "6", "2", "0", "7", "4"));
    System.out.println("sortList列表排序前:" + jedis.lrange("sortList", 0, -1));
    System.out.println("sortList列表排序后:" + jedis.sort("sortList"));
    // 关闭连接
    jedis.close();
}

}

输出内容:

==============增加一个list==============
user的所有内容:[bb, bb, aa, tt, rr, ee, ww, qq]
获取user的0-3区间的元素:[bb, bb, aa, tt]
删除指定元素的个数:2
user的所有内容:[aa, tt, rr, ee, ww, qq]
删除下0-3区间之外的元素:OK
user的所有内容:[aa, tt, rr, ee]
user列表出栈(左端):aa
user的所有内容:[tt, rr, ee]
user列表出栈(右端):ee
user的所有内容:[tt, rr]
user列表添加元素,从列表右端,与lpush相对应:3
user的所有内容:[tt, rr, dd]
修改user指定下标1的内容:OK
获取user下标为1的元素值:val_new
user的长度:3
增加另一个list:7
sortList列表排序前:[4, 7, 0, 2, 6, 5, 3]
sortList列表排序后:[0, 2, 3, 4, 5, 6, 7]

对Set类型的操作:

public class TestSet {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("106.13.85.14", 6379);
        jedis.auth("myredis94");
    // 清空当前数据库
    jedis.flushDB();
    System.out.println("==============向set集合中添加元素(不重复)==============");
    System.out.println(jedis.sadd("mySet", "s0","s1","s2","s2","s3","s4","s5"));
    System.out.println("mySet中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("删除两个元素s0,s5:" + jedis.srem("mySet", "s0", "s5"));
    System.out.println("mySet中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("随机移除集合中的一个元素:" + jedis.spop("mySet"));
    System.out.println("随机移除集合中的一个元素:" + jedis.spop("mySet"));
    System.out.println("mySet中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("mySet中包含的元素个数:" + jedis.scard("mySet"));
    System.out.println("s1是否在mySet中:" + jedis.sismember("mySet", "s1"));
    System.out.println(jedis.sadd("mySet1", "s0","s1","s2","s3","s4","s5"));
    System.out.println(jedis.sadd("mySet2", "s0","s1","s2","s3"));
    System.out.println("将mySet1中的s0移动到新集合mySet3中:" + jedis.smove("mySet1", "mySet3", "s0"));
    System.out.println("mySet1中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("mySet3中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("==============集合运算==============");
    System.out.println("mySet1中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("mySet2中的所有元素:" + jedis.smembers("mySet"));
    System.out.println("mySet1和mySet2的交集:" + jedis.sinter("mySet1", "mySet2"));
    System.out.println("mySet1和mySet2的并集:" + jedis.sunion("mySet1", "mySet2"));
    System.out.println("mySet1和mySet2的差集(mySet1中有,mySet2中没有的):" + jedis.sdiff("mySet1", "mySet2"));
    System.out.println("求交集并将交集保存到mySet4集合中:" + jedis.sinterstore("mySet4", "mySet1", "mySet2"));
    System.out.println("mySet4中的所有元素:" + jedis.smembers("mySet4"));
    // 关闭连接
    jedis.close();
}

输出内容:

==============向set集合中添加元素(不重复)==============
6
mySet中的所有元素:[s3, s0, s1, s4, s2, s5]
删除两个元素s0,s5:2
mySet中的所有元素:[s4, s2, s3, s1]
随机移除集合中的一个元素:s4
随机移除集合中的一个元素:s3
mySet中的所有元素:[s2, s1]
mySet中包含的元素个数:2
s1是否在mySet中:true
6
4
将mySet1中的s0移动到新集合mySet3中:1
mySet1中的所有元素:[s2, s1]
mySet3中的所有元素:[s2, s1]
==============集合运算==============
mySet1中的所有元素:[s2, s1]
mySet2中的所有元素:[s2, s1]
mySet1和mySet2的交集:[s2, s3, s1]
mySet1和mySet2的并集:[s4, s2, s0, s3, s5, s1]
mySet1和mySet2的差集(mySet1中有,mySet2中没有的):[s5, s4]
求交集并将交集保存到mySet4集合中:3
mySet4中的所有元素:[s2, s3, s1]

对Hash类型的操作:

public class TestHash {
public static void main(String[] args) {
    Jedis jedis = new Jedis("106.13.85.14", 6379);
    jedis.auth("myredis94");

    // 清空当前数据库
    jedis.flushDB();
    Map&lt;String, String&gt; map = new HashMap&lt;&gt;();
    map.put("k1", "v1");
    map.put("k2", "v2");
    map.put("k3", "v3");
    map.put("k4", "v4");

    System.out.println("==============添加键值对==============");
    System.out.println(jedis.hmset("myHash", map));
    System.out.println(jedis.hset("myHash", "k5", "v5"));
    System.out.println("散列hash的所有键值对:" + jedis.hgetAll("myHash"));
    System.out.println("散列hash的所有键:" + jedis.hkeys("myHash"));
    System.out.println("散列hash的所有值:" + jedis.hvals("myHash"));
    System.out.println("将k6的值加上一个整数,若k6不存在则添加k6:" + jedis.hincrBy("myHash", "k6", 12));
    System.out.println("散列hash的所有键值对:" + jedis.hgetAll("myHash"));
    System.out.println("将k6的值加上一个整数,若k6不存在则添加k6:" + jedis.hincrBy("myHash", "k6", 12));
    System.out.println("散列hash的所有键值对:" + jedis.hgetAll("myHash"));
    System.out.println("删除一个或多个键值对:" + jedis.hdel("myHash", "k3"));
    System.out.println("散列hash的所有键值对:" + jedis.hgetAll("myHash"));
    System.out.println("散列hash的所有键值对个数:" + jedis.hlen("myHash"));
    System.out.println("判断myHash中是否存在k2:" + jedis.hexists("myHash", "k2"));
    System.out.println("获取myHash中的k3,k4的值:" + jedis.hmget("myHash", "k3", "k4"));
    // 关闭连接
    jedis.close();
}

}

输出内容:

==============添加键值对==============
OK
1
散列hash的所有键值对:{k3=v3, k4=v4, k5=v5, k1=v1, k2=v2}
散列hash的所有键:[k3, k4, k5, k1, k2]
散列hash的所有值:[v4, v1, v3, v2, v5]
将k6的值加上一个整数,若k6不存在则添加k6:12
散列hash的所有键值对:{k3=v3, k4=v4, k5=v5, k6=12, k1=v1, k2=v2}
将k6的值加上一个整数,若k6不存在则添加k6:24
散列hash的所有键值对:{k3=v3, k4=v4, k5=v5, k6=24, k1=v1, k2=v2}
删除一个或多个键值对:1
散列hash的所有键值对:{k4=v4, k5=v5, k6=24, k1=v1, k2=v2}
散列hash的所有键值对个数:5
判断myHash中是否存在k2:true
获取myHash中的k3,k4的值:[null, v4]

对Zset类型的操作:

public class TestZset {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("106.13.85.14", 6379);
        jedis.auth("myredis94");
    // 清空当前数据库
    jedis.flushDB();
    System.out.println("==============向zSet集合中添加元素==============");
    jedis.zadd("age", 20, "xiaobai");
    jedis.zadd("age", 21, "xiaohei");
    jedis.zadd("age", 24, "xiaohong");
    jedis.zadd("age", 18, "xiaolan");
    jedis.zadd("age", 22, "xiaozi");
    jedis.zadd("age", 23, "xiaolv");
    System.out.println("对age进行升序排序;" + jedis.zrangeByScore("age", 0, 100));
    System.out.println("对age进行升序排序并显示值;" + jedis.zrangeByScoreWithScores("age", 0, 100));
    System.out.println("对age进行降序排序;" + jedis.zrevrangeByScore("age", 100, 0));
    System.out.println("对age进行降序排序并显示值;" + jedis.zrevrangeByScoreWithScores("age", 100, 0));
    System.out.println("删除xiaolv这个元素:" + jedis.zrem("age", "xiaolv"));
    System.out.println("对age进行升序排序并显示值;" + jedis.zrangeByScoreWithScores("age", 0, 100));
    System.out.println("查看age中元素的个数:" + jedis.zcard("age"));
    System.out.println("查看age中在20-22区间的元素个数:" + jedis.zcount("age", 20, 22));
    // 关闭连接
    jedis.close();
}

}

输出内容:

==============向zSet集合中添加元素==============
对age进行升序排序;[xiaolan, xiaobai, xiaohei, xiaozi, xiaolv, xiaohong]
对age进行升序排序并显示值;[[xiaolan,18.0], [xiaobai,20.0], [xiaohei,21.0], [xiaozi,22.0], [xiaolv,23.0], [xiaohong,24.0]]
对age进行降序排序;[xiaohong, xiaolv, xiaozi, xiaohei, xiaobai, xiaolan]
对age进行降序排序并显示值;[[xiaohong,24.0], [xiaolv,23.0], [xiaozi,22.0], [xiaohei,21.0], [xiaobai,20.0], [xiaolan,18.0]]
删除xiaolv这个元素:1
对age进行升序排序并显示值;[[xiaolan,18.0], [xiaobai,20.0], [xiaohei,21.0], [xiaozi,22.0], [xiaohong,24.0]]
查看age中元素的个数:5
查看age中在20-22区间的元素个数:3
小程序码【兜里的猫】

小程序码

欢迎访问博客网页版:www.wldeer.com
关注公众号:(同步更新)【FreeWeb开发者】
# Redis 

评论

稻城 : 111
兜里的猫 : 是md
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×