Redis基础---Java客户端应用

目录

一、介绍

二、Jedis的使用

 三、SpringDataRedis的使用

        创建:


一、介绍

        在Redis官网,提供了多种编程语言的客户端,如Java、C++等,官网地址:Clients | Redis

        而对于Java的客户端有很多,但是用的最多的就是下图的前两个:

二、Jedis的使用

        创建一个普通javamaven项目:

        在pom.xml文件中引入依赖:

    <dependencies><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

        建立连接:

                创建测试类:

package com.jedis.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;@RunWith(JUnit4.class)
public class JedisTest {private Jedis jedis;@Testpublic void run(){jedis=new Jedis("127.0.0.1",6379);jedis.select(0);String jedisTest = jedis.set("jedisTest", "123");System.out.println(jedisTest);String s = jedis.get("jedisTest");System.out.println(s);if(jedis!=null){jedis.close();}}
}

        运行结果:

        jedis提供的方法和指令名称是相同的,因此比较好上手。

        通过上述操作,我们可以看出jedis的使用,还是非常方便的,只需要三步就可以实现:

                1、导入依赖。

                2、建立连接。

                3、执行方法(和命令同名)。

        jedis本身是线程不安全的,并且频繁的创建和销毁连接会有性能损耗,因此,我们使用jedis连接池来代替上述这种直连的方式。

package com.jedis.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;@RunWith(JUnit4.class)
public class JedisTest {private JedisPool jedisPool;@Testpublic void run2(){JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();//最大连接jedisPoolConfig.setMaxTotal(8);//最大空闲连接jedisPoolConfig.setMaxIdle(8);//最小空闲连接数量jedisPoolConfig.setMinIdle(0);//设置最长等待时间jedisPoolConfig.setMaxWaitMillis(200);jedisPool=new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000);//通过连接池获取连接Jedis resource = jedisPool.getResource();String myTest = resource.set("myTest", "1234");System.out.println(myTest);String s = resource.get("myTest");System.out.println(s);}
}

        输出结果:

 三、SpringDataRedis的使用

        SpringData是Spring中数据操作的模块,官网地址:Spring Data Redis
        包含对各种数据库的集成,其中对Redis的集成模块就叫做SpringDataRedis

                提供了对不同Redis客户端的整合(Lettuce和Jedis)

                提供了RedisTemplate统一API来操作Redis

                支持Redis的发布订阅模型

                支持Redis哨兵和Redis集群

                支持基于Lettuce的响应式编程

                支持基于JDK、JSON、字符串、Spring对象的数据序列化及反序列化支持基于Redis的JDKCollection实现

        SpringDataRedis中提供了RedisTemplate工具类,其中封装了各种对Redis的操作。RedisTemplate,是根据命令种类来分类的方法。并且将不同数据类型的操作API封装到了不同的类型中:

        创建:

        SpringBoot已经提供了对SpringDataRedis的支持,使用非常简单。

        首先,创建SpringBoot项目:

        导入相关依赖:

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 连接池依赖 --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>

        在resource目录下创建application.yaml文件:

        并填充内容:

spring:redis:host: 127.0.0.1port: 6379lettuce:pool:max-active: 8max-idle: 8min-idle: 0max-wait: 100

        测试代码:

package com.example.springdataredistest;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
class SpringDataRedisTestApplicationTests {@Autowiredprivate RedisTemplate redisTemplate;@Testvoid contextLoads() {redisTemplate.opsForValue().set("redisTemplate","success");String o = (String) redisTemplate.opsForValue().get("redisTemplate");System.out.println(o);}
}

        运行结果:

        但是我们发现,Redis数据库中存入的并非我们所想的内容:

        这是因为采用了SpringDataRedis默认的序列化方式。
        RedisTemplate可以接收任意0bject作为值写入Redis,只不过写入前会把0bject序列化为字节形式,默认是采用IDK序列化,得到的结果是上面这样的。

        这种方式有很大的缺点:1、可读性差。2、内存占用大。

        因此,我们可以自定义序列化方式,来得到我们想要的结果。

        我们创建一个配置类:

package com.jedis.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;@RunWith(JUnit4.class)
public class JedisTest {private Jedis jedis;@Testpublic void run(){jedis=new Jedis("127.0.0.1",6379);jedis.select(0);String jedisTest = jedis.set("jedisTest", "123");System.out.println(jedisTest);String s = jedis.get("jedisTest");System.out.println(s);if(jedis!=null){jedis.close();}}private JedisPool jedisPool;@Testpublic void run2(){JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();//最大连接jedisPoolConfig.setMaxTotal(8);//最大空闲连接jedisPoolConfig.setMaxIdle(8);//最小空闲连接数量jedisPoolConfig.setMinIdle(0);//设置最长等待时间jedisPoolConfig.setMaxWaitMillis(200);jedisPool=new JedisPool(jedisPoolConfig,"127.0.0.1",6379,1000);//通过连接池获取连接Jedis resource = jedisPool.getResource();String myTest = resource.set("myTest", "1234");System.out.println(myTest);String s = resource.get("myTest");System.out.println(s);}
}

        导入依赖:

        <!--  Jackson依赖  --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>

        测试方法:

package com.example.springdataredistest;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.core.RedisTemplate;@SpringBootTest
public class Test2 {@Autowiredprivate RedisTemplate<String,Object> redisTemplate;@Testpublic void run(){redisTemplate.opsForValue().set("redisTemplateNew","successNew");String o = (String) redisTemplate.opsForValue().get("redisTemplateNew");System.out.println(o);}
}

        执行结果:

        数据库展示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/511710.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图说】电脑发展史

免责声明:文中有一些图片来源自网络,如有版权请通知我删除,谢谢! “结绳记事”是计算的开端 如果说“结绳记事”仅是计数,那么“算筹”就是真正的计算工具 算盘也是我们老祖宗的杰出发明,最擅长“加减乘除”,包括但不限于乘方、开方、对数等。还能进行开发智力的“珠心算…

【好书推荐】这本书太好了!150页就能让你上手大模型应用开发《大模型应用开发极简入门:基于GPT-4和ChatGPT》

如果问个问题&#xff1a;有哪些产品曾经创造了伟大的奇迹&#xff1f;ChatGPT 应该会当之无愧入选。仅仅发布 5 天&#xff0c;ChatGPT 就吸引了 100 万用户——当然&#xff0c;数据不是关键&#xff0c;关键是其背后的技术开启了新的 AI 狂潮&#xff0c;成为技术变革的点火…

【深度学习】脑部MRI图像分割

案例4&#xff1a;脑部MRI图像分割 相关知识点&#xff1a;语义分割、医学图像处理&#xff08;skimage, medpy&#xff09;、可视化&#xff08;matplotlib&#xff09; 1 任务目标 1.1 任务简介 本次案例将使用深度学习技术来完成脑部MRI(磁共振)图像分割任务&#xff0c…

网络学习:Vlan间路由

目录 一、vlan间路由实现的方法 二、精确匹配转发&#xff08;交换机&#xff09;流程 三、最长匹配转发&#xff08;路由器&#xff09; 四、交换机最长匹配转发 五、总结 一、vlan间路由实现的方法 方法1&#xff1a;使用路由器的物理接口 特点&#xff1a;在路由器上…

【LeetCode:98. 验证二叉搜索树 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【CV论文精读】【Faster RCNN】Fast R-CNN

0.论文摘要和作者信息 摘要 提出了一种基于区域的快速卷积网络&#xff08;Fast R-CNN&#xff09;目标检测方法。Fast R-CNN建立在以前的工作基础上&#xff0c;使用深度卷积网络有效地对目标候选框进行分类。与以前的工作相比&#xff0c;Fast R-CNN采用了几项创新来提高训…

springcloud:3.2测试超时机制

服务提供者 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 PaymentController【控制层】 /*** 测试超时机制** return*/GetMapping("/timeout")public String TimeOut() {try {TimeUnit.SECONDS.sleep(5);} catch (InterruptedException e) {…

数学建模【灰色关联分析】

一、灰色关联分析简介 一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素&#xff0c;多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中&#xff0c;哪些是主要因素&#xff0c;哪些是次要因素;哪些因素…

最短路径Floyd算法

第一题&#xff1a;[USACO08OPEN] Clear And Present Danger S #include<bits/stdc.h> using namespace std; int n,m; int g[105][105]; int arr[100005]; long long sum; int main() {scanf("%d%d",&n,&m);for(int i1;i<m;i){scanf("%d"…

关于 CTF 中 php 考点与绕过那些事的总结

关于 CTF 中常见 php 绕过的总结可以参考我之前的博客&#xff1a; CTF之PHP特性与绕过 PHP特性之CTF中常见的PHP绕过-CSDN博客 其中主要介绍了 md5()、sha1()、strcmp、switch、intval、$_SERVER 函数、三元运算符、strpos() 、数组、非法参数名传参等相关的绕过。 在此基础上…

CentOS 7操作系统安装教程

CentOS 7操作系统安装教程 CentOS 7是一款功能强大、稳定可靠的操作系统&#xff0c;适用于服务器、桌面等多种场景。下面将介绍CentOS 7的安装教程。 准备工作 下载CentOS 7镜像文件&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/centos/7/isos/x86_64/准备安装介质&am…

VUE3项目学习系列--项目配置(二)

在项目团队开发过程中&#xff0c;多人协同开发为保证项目格式书写格式统一标准化&#xff0c;因此需要进行代码格式化校验&#xff0c;包括在代码编写过程中以及代码提交前进行自动格式化&#xff0c;因此需要进行在项目中进行相关的配置使之代码格式一致。 一、eslint配置 …