IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 七天玩转Redis | Day5、Java操作Redis -> 正文阅读

[大数据]七天玩转Redis | Day5、Java操作Redis

号外号外🎉🎉🎉:小猿和CSDN联合推出的“七天玩转Redis,打卡还能领周边”活动开始啦!点击查看👉🏻报名及活动细则👈🏻,轻轻松松和小伙伴们一起拿奖励吧!

PS:零基础也能入门Redis哟,快去一起参与拿周边吧!

博主简介👨🏼???:国内某一线互联网公司Java工程师👨🏼?💻,业余自媒体创作者💻,CSDN博客专家🏆,Java领域优质创作者📕,华为云享专家🥇,华为HDZ核心成员👨?💼,曾发表并出版ISEAE信息科学国际论文,全网累计发表技术博客60余万📒,公众号【码猿编程日记】作者,坚信每一次敲动键盘都能让生活变得更智能,世界变得更有趣!

课前答疑:很多小伙伴问我零基础或者根本没有使用过Redis,可以学习嘛?当然是可以的!充分考虑到小伙伴们的学习程度有所不同,所以本次课程的所有操作都是在Windows环境下进行的,不会依赖太多的环境配置,且上手容易。已经学习过Redis的小伙伴们同样可以再学习一遍,温故而知新,还能拿CSDN定制周边!何乐而不为呢😀

今日学习内容

在前四天的课程中,我们从最开始的认识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"));


        /**
         * 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"));

        /**
         * 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"));

        /**
         * 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"));


        /**
         * Hash类型
         */
        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"));

        /**
         * 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"));


        /**
         *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"));

    }

运行结果:

redis连接测试:PONG
判断某个键是否存在:true
[mykey2, mynum3, mykey1]
删除键1
得到的数值为:myValue2
获取多个键值对:[myValue1, myValue2, myValue3]
获取mykey1的数据的长度:8
返回key中字符串值的子串:yValu
字符串追加:13
获取到mykey3的值:myValue3hello
设置一个Hash数据OK
获取指定哈希表中所有的字段和值:{name=huixiaoyuan, age=3, sex=男}
获取存储在哈希表中指定字段的值:huixiaoyuan
删除一个或多个哈希表字段:1
获取哈希表中字段的数量:2
将一个或多个元素插入列表表头:5
将一个或多个元素插入列表尾部:6
获取列表长度:6
通过索引获取列表中的元素:l1
移除并获取列表第一个元素:l3
移除并获取列表最后一个元素:l4
设置一个Hash数据OK
获取指定哈希表中所有的字段和值:{name=huixiaoyuan, age=3, sex=男}
获取存储在哈希表中指定字段的值:huixiaoyuan
删除一个或多个哈希表字段:1
获取哈希表中字段的数量:2
向集合中添加一个或多个成员:3
向集合中添加一个或多个成员:3
获取集合中成员的个数:3
返回第一个集合与其他集合之间的差异:[s1, s2]
返回集合中的所有元素:[s2, s3, s1]
向有序集合中添加一个或多个成员:1
向有序集合中添加一个或多个成员:1
向有序集合中添加一个或多个成员:1
获取有序集合的成员数:3
计算有序集合中指定区间分数的成员数:2
移除有序集合中的一个或多个元素:1

二、RedisTempate类详解

RedisTempate类也是在Java中操作Redis的常用类,但是使用Jedis类和使用RedisTempate类有什么不同呢?

首先,Jedis是Redis官方推荐的面向Java的操作Redis的客户端,而RedisTemplate是SpringDataRedis中对JedisApi的高度封装。SpringDataRedis相对于Jedis来说可以方便地更换Redis的Java客户端,比Jedis多了自动管理连接池的特性,方便与其他Spring系列框架进行搭配使用,

所以Jedis一般可以用于没有使用spring系列框架的场景,而RedisTempate则多用于企业利用框架的实际开发中。

对于还没有接触到spring系列框架的小伙伴,可以先使用Jedis类进行操作,RedisTempate则作为了解。

(1)RedisTempate驱动下载

RedisTempate驱动下载和Jedis是一样的,如果是Maven项目,可以直接在pom文件中导入链接中的依赖。

RedisTempate驱动下载地址https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis/2.6.3

(2)RedisTempate类使用

我在这里先给大家讲一下RedisTemplate类中的常用方法,关于如何在springboot类中进行使用和集成,我们在下一篇文章中讲解,

RedisTemplate提供了五种操作数据类型的方法,分别对应了Redis的五种数据类型,

  • redisTemplate.opsForValue();? 对应String类型操作
  • redisTemplate.opsForHash();? 对应Hash类型操作
  • redisTemplate.opsForList();?? 对应List类型操作
  • redisTemplate.opsForSet();? 对应Set类型操作
  • redisTemplate.opsForZSet();? 对应ZSet类型操作

而每种方法下面就对应着这个数据类型的其他操作,

我们以redisTemplate.opsForValue();? 操作String类型为例,在Redis中增加一个键值对

        ValueOperations valueOperations = redisTemplate.opsForValue();
//        设置键值对
        valueOperations.set("mykey","value1");
//        根据索引获取值
        valueOperations.get("myKey");

他们的操作也是一样的,小伙伴们可以以此类推!我就不在这里赘述啦!

三、StringRedisTemplate类详解

上面我们讲了在spring系列框架中,可以使用RedisTemplate来操作Redis,但是还有一个相似的类StringRedisTemplate也是比较常用的,它主要用于操作字符串类型数据。

RedisTemplate和StringRedisTemplate有以下的区别:

  1. StringRedisTemplate继承自RedisTemplate。
  2. 两者的数据是不共通的;也就是说StringRedisTemplate只能管理StringRedisTemplate里面的数据,RedisTemplate只能管理RedisTemplate中的数据。
  3. ?SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略。
    1. StringRedisTemplate默认采用的是String的序列化策略,保存的key和value都是采用此策略序列化保存的。
    2. RedisTemplate默认采用的是JDK的序列化策略,保存的key和value都是采用此策略序列化保存的。

那么应该在什么时候使用RedisTemplate,什么时候使用StringRedisTemplate呢?

当你的redis数据库里面本来存的就是字符串数据或者你要存取的数据就是字符串类型数据的时候,那么你就使用StringRedisTemplate即可。

但是如果你的数据是复杂的对象类型,而取出的时候又不想做任何的数据转换,直接从Redis里面取出一个对象,那么使用RedisTemplate是更好的选择。

除此之外两者在操作上都是一样的,StringRedisTemplate对应了操作五种数据类型的方法,而且操作和stringRedis一样,

  • stringRedisTemplate.opsForValue();? 对应String类型操作
  • stringRedisTemplate.opsForHash();? 对应Hash类型操作
  • stringRedisTemplate.opsForList();?? 对应List类型操作
  • stringRedisTemplate.opsForSet();? 对应Set类型操作
  • stringRedisTemplate.opsForZSet();? 对应ZSet类型操作

今日总结

今天主要讲解了在Java中如何去操作Redis,总结一下三种工具类的使用场景;

  • Jedis适合在没有spring系列框架的普通Java工程中使用
  • RedisTemplate适合在多种数据类型的项目,且希望自动进行数据转换的情况下使用
  • StringRedisTemplate适合在只有字符串处理的情况下使用

因为在Redis中的命令和Java中的操作方法基本同名,所以这几个工具类不需要额外的去记忆,知道命令的作用就好了!

最后别忘记今天的总结打卡哟!【第五天打卡贴地址

在学习中存在任何问题的,大家都可以添加我的微信huixiaoyuan1030,(因为微信群二维码有效期只有七天😝),加入我们的“打卡答疑交流群”一起抱团、一起进步!

点击下方卡片可以找到我的微信二维码👇🏻👇🏻👇🏻

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:39:53  更:2022-01-25 10:40:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/20 6:08:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码