这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战
今日学习内容
在前几篇文章中,我们从最开始的认识Redis、安装Redis、五大数据类型、三大特殊数据类型以及到最后事务操作,已经完完整整的将Redis的所有使用方法基本都过了一遍,到这里你已经称得上算是一名合格的Redis选手了,
但是之前我们的所有操作都是在Redis客户端的命令行中操作的,很多同学操作起来肯定也会觉得不是很方便,而且在实际的开发中,面对大量的数据,我们总不能一个命令一个命令的在命令行中操作对吧,所以今天我们就来讲一下,在实际的开发中,如何使用和操作Redis,并且讲一下Redis常用的几个类是如何操作的。
因为Redis最多的时候也是和Java语言整合操作,所以我们采用Java语言来实践操作Redis。没有学过Java的小伙伴可以先了解一下其使用。收藏文章之后慢慢学习!
我的开发环境是JDK1.8,IDEA2020.1版本,如果有其他Java开发环境的也完全可以!
注意:我们接下来的所有操作,都需要保证Redis服务器的命令窗口处于打开状态,否则就会出现连接失败或者拒绝的情况!
一、Jedis类详解
在Java中想要操作Redis,最基本的一个类是jedis类,我们上面学习到的所有命令,在该类中都有同名的封装,我们到时候直接调用即可!
(1)导入所需jar包
想要使用Jedis类,我们需要在Java工程中导入所需jar包,
Jedis类驱动jar包,最新版4.0.1版下载地址https://mvnrepository.com/artifact/redis.clients/jedis/4.0.1我们的jar包是在Maven仓库中下载的,这里涵盖了Java开发几乎所有的jar包和版本,所以在其他开发需要导入jar包的时候可以在这里下载使用,点开下载链接之后显示如下,点击下载对应的jar包即可!
下载完成之后,将jar包导入你的Java工程,就能使用Jedis类了!
(2)Jedis类使用
Redis连接测试
首先我们来测试一下Redis的连接是否正常,新建一个Jedis类并调用ping()方法
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 测试Redis连接
System.out.println("redis连接测试:" + jedis.ping());
}
运行结果如下:
redis连接测试:PONG
Redis数据操作
在Jedis类中数据的操作方法基本上和命令是同名的,返回值类型也是一样的,我们直接调用即可,
我在这里给大家例举一个常见的操作作为示例,其他直接调用即可!
基本连接测试
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
// 测试Redis连接
System.out.println("redis连接测试:" + jedis.ping());
// 判断某个键是否存在
System.out.println("判断某个键是否存在:" + jedis.exists("mykey"));
// 获取所有的键
Set<String> keys = jedis.keys("*");
System.out.println(keys);
// 根据key去删除键值对
System.out.println("删除键" + jedis.del("mykey"));
}
运行结果:
redis连接测试:PONG
判断某个键是否存在:true
[mykey2, mynum3, mykey1]
删除键1
String类型操作
```
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
/**
* String类型
*/
// 设置一个键值对
jedis.set("mykey1", "myValue1");
jedis.set("mykey2", "myValue2");
jedis.set("mykey3", "myValue3");
// 根据索引获取一个数据的值
System.out.println("得到的数值为:" + jedis.get("mykey2"));
System.out.println("获取多个键值对:" + jedis.mget("mykey1", "mykey2", "mykey3"));
System.out.println("获取mykey1的数据的长度:" + jedis.strlen("mykey1"));
System.out.println("返回key中字符串值的子串:" + jedis.getrange("mykey2", 1, 5));
System.out.println("字符串追加:" + jedis.append("mykey3", "hello"));
System.out.println("获取到mykey3的值:" + jedis.get("mykey3"));
}
运行结果:
得到的数值为:myValue2
获取多个键值对:[myValue1, myValue2, myValue3]
获取mykey1的数据的长度:8
返回key中字符串值的子串:yValu
字符串追加:13
获取到mykey3的值:myValue3hello\
Hash类型擦操作
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
/**
* Hash类型
*/
// 设置一个Hash数据
Map<String, String> valueMap = new HashMap<>();
valueMap.put("name", "huixiaoyuan");
valueMap.put("sex", "男");
valueMap.put("age", "3");
System.out.println("设置一个Hash数据" + jedis.hmset("myHash", valueMap));
System.out.println("获取指定哈希表中所有的字段和值:" + jedis.hgetAll("myHash"));
System.out.println("获取存储在哈希表中指定字段的值:" + jedis.hget("myHash", "name"));
System.out.println("删除一个或多个哈希表字段:" + jedis.hdel("myHash", "sex"));
System.out.println("获取哈希表中字段的数量:" + jedis.hlen("myHash"));
}
运行结果:
设置一个Hash数据OK
获取指定哈希表中所有的字段和值:{name=huixiaoyuan, age=3, sex=男}
获取存储在哈希表中指定字段的值:huixiaoyuan
删除一个或多个哈希表字段:1
获取哈希表中字段的数量:2\
List类型操作
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
/**
* List类型
*/
System.out.println("将一个或多个元素插入列表表头:" + jedis.lpush("myList", "l1", "l2", "l3"));
System.out.println("将一个或多个元素插入列表尾部:" + jedis.rpush("myList", "l4"));
System.out.println("获取列表长度:" + jedis.llen("myList"));
System.out.println("通过索引获取列表中的元素:" + jedis.lindex("myList", 2));
System.out.println("移除并获取列表第一个元素:" + jedis.lpop("myList"));
System.out.println("移除并获取列表最后一个元素:" + jedis.rpop("myList"));
}
运行结果:
将一个或多个元素插入列表表头:5
将一个或多个元素插入列表尾部:6
获取列表长度:6
通过索引获取列表中的元素:l1
移除并获取列表第一个元素:l3
移除并获取列表最后一个元素:l4\
Set类型操作
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
/**
* Set类型
*/
System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet","s1","s2","s3"));
System.out.println("向集合中添加一个或多个成员:" + jedis.sadd("mySet2","s3","s4","s5"));
System.out.println("获取集合中成员的个数:" + jedis.scard("mySet"));
System.out.println("返回第一个集合与其他集合之间的差异:" + jedis.sdiff("mySet","mySet2"));
System.out.println("返回集合中的所有元素:" + jedis.smembers("mySet"));
}
运行结果:
向集合中添加一个或多个成员:3
向集合中添加一个或多个成员:3
获取集合中成员的个数:3
返回第一个集合与其他集合之间的差异:[s1, s2]
返回集合中的所有元素:[s2, s3, s1]\
ZSet类型操作
public static void main(String[] args) throws InterruptedException {
// 新建Jedis类对象
Jedis jedis = new Jedis("127.0.0.1", 6379);
/**
*ZSet类型
*/
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",1,"m1"));
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",2,"m2"));
System.out.println("向有序集合中添加一个或多个成员:" + jedis.zadd("myZset",3,"m3"));
System.out.println("获取有序集合的成员数:" + jedis.zcard("myZset"));
System.out.println("计算有序集合中指定区间分数的成员数:" + jedis.zcount("myZset",0,2));
System.out.println("移除有序集合中的一个或多个元素:" + jedis.zrem("myZset","m2"));
}
运行结果:
向有序集合中添加一个或多个成员:1
向有序集合中添加一个或多个成员:1
向有序集合中添加一个或多个成员:1
获取有序集合的成员数:3
计算有序集合中指定区间分数的成员数:2
移除有序集合中的一个或多个元素:1
以上就是在Java中使用jedis类操作Redis的一些基本操作,但是在实际的开发过程中一般使用的是RedisTemplate类来操作,这主要是由于该工具类可以集成spring框架操作,下一篇文章我们将讲解他的实际使用!
我是灰小猿,我们下期见!