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;
    @Test
    public 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;
    @Test
    public 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.1
    port: 6379
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0
        max-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 {

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    void 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;
    @Test
    public 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;
    @Test
    public 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 {
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Test
    public void run(){
        redisTemplate.opsForValue().set("redisTemplateNew","successNew");
        String o = (String) redisTemplate.opsForValue().get("redisTemplateNew");
        System.out.println(o);
    }
}

        执行结果:

        数据库展示:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

判定MySQL是否开机自启

在Linux系统中&#xff0c;判断MySQL是否设置为开机自动启动&#xff0c;可以通过以下几种方式来确认&#xff1a; 使用systemd&#xff1a; 如果你的Linux发行版使用systemd作为其初始化系统&#xff08;大多数现代Linux发行版如Ubuntu、CentOS 7&#xff09;&#xff0c;可以…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用&#xff1a; 为网页提供结构&#xff…

自动驾驶感知面试-coding应用题

感知面试手撕代码&#xff1a;这个博主总结的很好&#xff0c;尤其是关于叉积的计算 双线性插值 双线性插值公式记忆方法和Python实现 NMS算法 #include<iostream> #include<vector> #include<algorithm>using namespace std; struct Box {int x1,x2,y1,…

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图&#xff0c;让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的&#xff0c;使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

什么是Vue的服务端渲染(SSR)?它有什么作用?

Vue的服务端渲染&#xff08;SSR&#xff09;是指将Vue组件在服务器端进行渲染&#xff0c;然后将已经渲染好的页面返回给浏览器&#xff0c;相比于传统的客户端渲染&#xff0c;SSR可以更好地优化SEO和加速首屏加载速度。在传统的客户端渲染中&#xff0c;浏览器需要加载所有的…

【Spring云原生】Spring官宣,干掉原生JVM,推出 Spring Native!整体提升性能!Native镜像技术在Spring中的应用

&#x1f389;&#x1f389;欢迎光临&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;特别推荐给大家我的最新专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &#x1f680; 本…

Linux——MySQL主从复制与读写分离

实验环境 虚拟机 3台 centos7.9 网卡NAT模式 数量 1 组件包mysql-5.6.36.tar.gz cmake-2.8.6.tar.gz 设备 IP 备注 Centos01 192.168.223.123 Amoeba Centos02 192.168.223.124 Master Centos03 192.168.223.125 Slave MySQL安装 主从同时操作 安装所需要的…

【探索AI】二十二 深度学习之第5周:生成对抗网络(GAN)

生成对抗网络&#xff08;GAN&#xff09; GAN的基本原理与结构常见的GAN模型&#xff08;如DCGAN、StyleGAN等&#xff09;图像生成与风格迁移任务实践&#xff1a;使用GAN进行图像生成或风格迁移任务 GAN的基本原理与结构 生成对抗网络&#xff08;GAN&#xff09;的基本原理…

【经验】f-string 的一些点

【经验】f-string 的一些点 省几个字别数错了对齐它现在几点 省几个字 让 f-string 给你写表达式&#xff0c;在 f-string 中使用 来自动打印表达式 a 10 b 25 print(f"{a b }") >>> a b 35别数错了 对于过大的数字难以一眼看出来它的数量级&#xf…

Android 中get请求网络数据 详细举例

请求链接 https://api.bilibili.com/x/web-interface/ranking 1.添加网络权限 依赖等 implementation com.squareup.okhttp3:okhttp:4.9.3 implementation com.google.code.gson:gson:2.8.92.写请求类network package com.example.myapplication;import android.graphics.Bi…

现代信号处理学习笔记(三)信号检测

通过观测数据判断信号是否存在&#xff0c;这一问题称为信号检测。 目录 前言 一、统计假设检验 1、信号检测的基本概念 2、信号检测理论测度 比率测度 概率测度 3、决策理论空间 二、概率密度函数与误差函数 1、概率密度函数 2、误差函数与补余误差函数 三、检测概…

TypeError: the JSON object must be str, bytes or bytearray, not dict

参考文章&#xff1a;https://blog.csdn.net/yuan2019035055/article/details/124934362 Python基础系列&#xff08;一&#xff09;搞懂json数据解析与字典之间的关系 代码&#xff1a; 报错信息: TypeError: the JSON object must be str, bytes or bytearray, not dict …

Python字符串中%d,%.f的用法

在字符串中&#xff0c;我们经常需要改变其中的一些几个字符&#xff0c;比如 第一个d%就是epoch1&#xff0c;会随着epoch的变化而变化。同理&#xff0c;后面的也是。打印出的结果就是 其中&#xff0c;epoch迭代了3次&#xff0c;从0开始。会发现 d%&#xff0c;是整数&…

.NET高级面试指南专题十四【 观察者模式介绍,最常用的设计模式之一】

简介&#xff1a; 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;其目的是定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。 原理&#xff1a; 在观察者模式中…

002-CSS-三角形

三角形 普通三角形带阴影的三角形&#xff1a;box-shadow带阴影的三角形&#xff1a;filter 普通三角形 &#x1f4a1; Tips&#xff1a;设置 div 盒子宽高为零&#xff0c;使用单边框实现 .triangle {width: 0;height: 0;border: 20px solid transparent;border-top-color: …

把python完全卸载干净

1.winR&#xff0c;输入control回车&#xff0c;点击程序和功能&#xff0c;在搜索框输入python&#xff0c;右键点击卸载 2、找到Python安装路径&#xff0c;把所有文件全部删除。 安装路径可以打开CMD输入&#xff1a;where python 3、强制删除Python.exe 打开cmd&#xff…

使用Java生成JWT(JSON Web Token)的详细指南

介绍 在现代应用程序中&#xff0c;身份验证和授权是至关重要的。JSON Web Token&#xff08;JWT&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式用于在各方之间安全地传输信息。在本文中&#xff0c;我们将学习如何使…

大厂报价查询系统性能优化之道!

0 前言 机票查询系统&#xff0c;日均亿级流量&#xff0c;要求高吞吐&#xff0c;低延迟架构设计。提升缓存的效率以及实时计算模块长尾延迟&#xff0c;成为制约机票查询系统性能关键。本文介绍机票查询系统在缓存和实时计算两个领域的架构提升。 1 机票搜索服务概述 1.1 …

在k8s上部署dolphinscheduler

&#xff08;作者&#xff1a;陈玓玏&#xff09; 一、 前提条件 已部署k8s&#xff0c;版本信息如下&#xff1a; k8s为单机部署&#xff1b;已部署nfs&#xff0c;版本如下&#xff1b; 二、 部署helm 以下步骤安装的是二进制版本&#xff0c;如果通过脚本安装&#…

Bert Encoder和Transformer Encoder有什么不同

前言&#xff1a;本篇文章主要从代码实现角度研究 Bert Encoder和Transformer Encoder 有什么不同&#xff1f;应该可以帮助你&#xff1a; 深入了解Bert Encoder 的结构实现深入了解Transformer Encoder的结构实现 本篇文章不涉及对注意力机制实现的代码研究。 注&#xff1a;…