一文带你了解如何在Java中操作Redis

news2024/12/23 18:03:40

文章目录

  • 前言
  • 一、 Redis客户端简介
    • 1. Redis客户端分类
    • 2. Spring 整合 Redis 的两种方式
  • 二、 使用 Jedis 操作 Redis
    • 1. Jedis的maven坐标
    • 2. 使用Jedis操作Redis的步骤
    • 3. Jedis 操作 Redis 示例
  • 三、 使用 Spring Data Redis 操作 Redis
    • 1. Spring Data Redis 的 maven 坐标
    • 2. spring Data Redis 中 operation 接口的分类
    • 3. Spring Data Redis 操作 Redis String 类型示例(ValueOperations ---- 简单K-V操作)
    • 4. Spring Data Redis 操作 Redis hash 类型示例(HashOperations ---- 针对map类型的数据操作)
    • 5. Spring Data Redis 操作 Redis list 类型示例(ListOperations ---- 针对list类型的数据操作)
    • 6. Spring Data Redis 操作 Redis set 类型示例( SetOperations ---- set类型数据操作)
    • 7. Spring Data Redis 操作 Redis Zset 类型示例(ZSetOperations ---- zset类型数据操作)
    • 8. Spring Data Redis 操作 Redis 通用操作
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

一、 Redis客户端简介

1. Redis客户端分类

Redis的Java 客户端很多,官方推荐的有三种

  1. Jedis
  2. Lettuce
  3. Redisson

2. Spring 整合 Redis 的两种方式

Spring 对 Redis 客户端进行了整合,提供了 Spring Data Redis,在spring Boot项目中还提供了对应的Starter,即spring-boot-starter-data-redis

二、 使用 Jedis 操作 Redis

1. Jedis的maven坐标

<dependency>
<groupld>redis.clients</groupld>
<artifactld>jedis</artifactld>
<version>2.8.0</version>
</dependency>

2. 使用Jedis操作Redis的步骤

  1. 获取连接
  2. 执行操作
  3. 关闭连接

3. Jedis 操作 Redis 示例

1. 新建maven工程,导入相关坐标

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.8.0</version>
        </dependency>

2. 编写测试方法

/**
 * 使用Jedis操作Redis
 */
public class JedisTest {

    @Test
    public void testRedis(){
        //1 获取连接
        Jedis jedis = new Jedis("localhost",6379);
        
        //2 执行具体的操作
        jedis.set("username","xiaoming");
        
        //输出打印
        String value = jedis.get("username");
        System.out.println(value);
        
        //删除操作
        //jedis.del("username");

        //哈希存储
        jedis.hset("myhash","addr","bj");
        //输出打印
        String hValue = jedis.hget("myhash", "addr");
        System.out.println(hValue);

        //keys * 输出打印
        Set<String> keys = jedis.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //3 关闭连接
        jedis.close();
    }
}

3. 启动redis服务(windows),连接客户端,测试获取 key username

在这里插入图片描述

4. 启动测试类,通过后再次获取key username

在这里插入图片描述

三、 使用 Spring Data Redis 操作 Redis

1. Spring Data Redis 的 maven 坐标

<dependency>
<groupld>org.springframework.boot</groupld>
<artifactld>spring-boot-starter-data-redis</artifactld>
</dependency>

2. spring Data Redis 中 operation 接口的分类

spring Data Redis中提供了一个高度封装的类RedisTemplate,针对iedis客户端中大量api进行了归类封装,将同一类型操作封装为operation接口,具体分类如下

  1. ValueOperations ---- 简单K-V操作
  2. SetOperations ---- set类型数据操作
  3. ZSetOperations ---- zset类型数据操作
  4. HashOperations ---- 针对map类型的数据操作
  5. ListOperations ---- 针对list类型的数据操作

3. Spring Data Redis 操作 Redis String 类型示例(ValueOperations ---- 简单K-V操作)

1. 新建 SpringBoot 工程,导入相关坐标

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2. yml 配置文件

spring:
  application:
    name: springdataredis_demo
  #Redis相关配置
  redis:
    host: localhost
    port: 6379
    #password: 123456
    database: 0 #默认操作的是0号数据库
    jedis:
      #Redis连接池配置
      pool:
        max-active: 8 #最大连接数
        max-wait: 1ms #连接池最大阻塞等待时间
        max-idle: 4 #连接池中的最大空闲连接
        min-idle: 0 #连接池中的最小空闲连接

3. 了解如何修改默认数据库数量(16)配置

在这里插入图片描述

4. 编写测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    //yml中配置支持RedisTemplate对象自动装配
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        //ValueOperations valueOperations = redisTemplate.opsForValue();
        redisTemplate.opsForValue().set("city","beijing");
    }
}

5. 运行并访问设置的 key 值

在这里插入图片描述

6. 设置配置类配置Redis序列化方式

/**
 * Redis配置类
 */

@Configuration
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        //默认的Key序列化器为:JdkSerializationRedisSerializer
        //String类型序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //hash类型序列化器
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setConnectionFactory(connectionFactory);

        return redisTemplate;
    }

}

7. 修改添加的 key 为 city123,再次运行测试类并访问新设置的 key

在这里插入图片描述

8. 其他测试

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    //yml中配置支持RedisTemplate对象自动装配
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 操作String类型数据
     */
    @Test
    public void testString(){
        //ValueOperations valueOperations = redisTemplate.opsForValue();
        redisTemplate.opsForValue().set("city123","beijing");

        //打印输出
        String value = (String) redisTemplate.opsForValue().get("city123");
        System.out.println(value);

        //设置超时时间
        redisTemplate.opsForValue().set("key1","value1",10l, TimeUnit.SECONDS);

        //当key不存在才设置value
        Boolean aBoolean = redisTemplate.opsForValue().setIfAbsent("city1234", "nanjing");
        System.out.println(aBoolean);
        
    }
}

4. Spring Data Redis 操作 Redis hash 类型示例(HashOperations ---- 针对map类型的数据操作)

1. 编写相关测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    
    /**
     * 操作Hash类型数据
     */
    @Test
    public void testHash(){
        HashOperations hashOperations = redisTemplate.opsForHash();

        //存值
        hashOperations.put("002","name","xiaoming");
        hashOperations.put("002","age","20");
        hashOperations.put("002","address","bj");

        //取值
        String age = (String) hashOperations.get("002", "age");
        System.out.println(age);

        //获得hash结构中的所有字段
        Set keys = hashOperations.keys("002");
        for (Object key : keys) {
            System.out.println(key);
        }

        //获得hash结构中的所有值
        List values = hashOperations.values("002");
        for (Object value : values) {
            System.out.println(value);
        }
    }
}

2. 运行测试类,观察结果

在这里插入图片描述

5. Spring Data Redis 操作 Redis list 类型示例(ListOperations ---- 针对list类型的数据操作)

1. 编写测试相关测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
       /**
     * 操作List类型的数据
     */
    @Test
    public void testList(){
        ListOperations listOperations = redisTemplate.opsForList();

        //存1个值
        listOperations.leftPush("mylist","a");
        //存多个值
        listOperations.leftPushAll("mylist","b","c","d");

        //取值
        List<String> mylist = listOperations.range("mylist", 0, -1);
        for (String value : mylist) {
            System.out.println(value);
        }

        //获得列表长度 llen
        Long size = listOperations.size("mylist");
        int lSize = size.intValue();
        for (int i = 0; i < lSize; i++) {
            //出队列
            String element = (String) listOperations.rightPop("mylist");
            System.out.println(element);
        }
    }
}

2. 运行测试方法,观察结果

在这里插入图片描述

6. Spring Data Redis 操作 Redis set 类型示例( SetOperations ---- set类型数据操作)

1. 编写相关测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 操作Set类型的数据
     */
    @Test
    public void testSet(){
        SetOperations setOperations = redisTemplate.opsForSet();

        //存值
        setOperations.add("myset","a","b","c","a");

        //取值
        Set<String> myset = setOperations.members("myset");
        for (String o : myset) {
            System.out.println(o);
        }

        //删除成员
        setOperations.remove("myset","a","b");

        //取值
        myset = setOperations.members("myset");
        for (String o : myset) {
           ![在这里插入图片描述](https://img-blog.csdnimg.cn/498ec17ed8744d25a0cd5ee96fc20b73.png)
 System.out.println(o);
        }

    }
}

2. 运行测试方法,观察结果

在这里插入图片描述

7. Spring Data Redis 操作 Redis Zset 类型示例(ZSetOperations ---- zset类型数据操作)

1. 编写相关测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
     /**
     * 操作ZSet类型的数据
     */
    @Test
    public void testZset(){
        ZSetOperations zSetOperations = redisTemplate.opsForZSet();

        //存值
        zSetOperations.add("myZset","a",10.0);
        zSetOperations.add("myZset","b",11.0);
        zSetOperations.add("myZset","c",12.0);
        zSetOperations.add("myZset","a",13.0);

        //取值
        Set<String> myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //修改分数
        zSetOperations.incrementScore("myZset","b",20.0);

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }

        //删除成员
        zSetOperations.remove("myZset","a","b");

        //取值
        myZset = zSetOperations.range("myZset", 0, -1);
        for (String s : myZset) {
            System.out.println(s);
        }
    }
}

2. 运行测试方法,观察结果

在这里插入图片描述

8. Spring Data Redis 操作 Redis 通用操作

1. 编写相关测试方法

@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataRedisTest {

    @Autowired
    private RedisTemplate redisTemplate;
    /**
     * 通用操作,针对不同的数据类型都可以操作
     */
    @Test
    public void testCommon(){
        //获取Redis中所有的key
        Set<String> keys = redisTemplate.keys("*");
        for (String key : keys) {
            System.out.println(key);
        }

        //判断某个key是否存在
        Boolean itcast = redisTemplate.hasKey("dongli");
        System.out.println(itcast);

        //删除指定key
        redisTemplate.delete("myZset");

        //获取指定key对应的value的数据类型
        DataType dataType = redisTemplate.type("myset");
        System.out.println(dataType.name());

    }
}

2. 运行测试方法,观察结果

在这里插入图片描述

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】写一个程序,输入数量不确定的【0,9】范围内的整数,统计每一种数字出现的次数,输入-1表示结束

题目 写一个程序&#xff0c;输入数量不确定的【0,9】范围内的整数&#xff0c;统计每一种数字出现的次数&#xff0c;输入-1表示结束 代码 #include<stdio.h> int main() {int x;int i;int a[10];for(i0; i<10; i){//初始化数组 a[i] 0;}scanf("%d",&am…

Unity VR:XR Interaction Toolkit 输入系统(Input System):获取手柄的输入

文章目录 &#x1f4d5;教程说明&#x1f4d5;Input System 和 XR Input Subsystem&#xff08;推荐 Input System&#xff09;&#x1f4d5;Input Action Asset⭐Actions Maps⭐Actions⭐Action Properties&#x1f50d;Action Type (Value, Button, Pass through) ⭐Binding …

ARM 配置晶振频率

文章目录 前言串口乱码问题定位内核修改晶振频率uboot 修改晶振频率番外篇 前言 上篇文章《ARM DIY 硬件调试》介绍了 DIY ARM 板的基础硬件焊接&#xff0c;包括电源、SOC、SD 卡座等&#xff0c;板子已经可以跑起来了。 但是发现串口乱码&#xff0c;今天就来解决串口乱码问…

Java-数组

什么是数组 数组&#xff1a;可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。 在java中&#xff0c; 数组中存放的元素其类型相同数组的空间是连在一起的每个空间有自己的编号&#xff0c;起始位置的编号为0&#xff0c;即数组的下标。 数组的创建及初始化 数…

FL Studio21最新版本升级中文语言教程

FL中文提供了跨版本升级&#xff0c;用户可以通过下载21入门版或其他非完整版的版本&#xff0c;升级为更高的版本&#xff0c;解锁更多的插件&#xff0c;下面为大家介绍在下载升级服务后&#xff0c;如何进行升级版本。 FL Studio 21 Win-安装包下载如下:https://wm.makeding…

CTF工具隐写分离神器Binwalk安装和详细使用方法

binwalk安装 1.Binwalk 介绍&#xff1a;2.Binwalk下载&#xff1a;3.Windows安装&#xff1a;4.Linux下载安装&#xff1a;5.Binwalk基本用法&#xff1a;6.Binwalk案例展示&#xff1a;7.Binwalk总结&#xff1a; 1.Binwalk 介绍&#xff1a; Binwalk 是用于搜索给定二进制镜…

Java之线程的状态

文章目录 一、线程状态二、代码演示1. Threadstate 类2. SleepUtils 类3. 运行示例 三、参考资料 一、线程状态 Java线程在运行的生命周期中可能处于下图所示的6种不同的状态,在给定的一个时刻线程只能处于其中的一个状态。 Java线程的状态 状态名称说明NEW初始状态&#xff0…

QCustomPlot的X轴是时间轴的曲线绘制

主要设置X轴的参数 SharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime); timeTicker->setTimeFormat("%h:%m:%s");demo如下 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);dataTimer …

53 个 CSS 特效 1

53 个 CSS 特效 1 预计是会跟着教程做完 53 个小项目10 个大型的 Responsive 项目&#xff0c;预览地址在http://www.goldenaarcher.com/html-css-js-proj/&#xff0c;git 地址&#xff1a;https://github.com/GoldenaArcher/html-css-js-proj 实用性有加备注&#xff0c;可…

漏洞指北-VulFocus靶场专栏-初级02

漏洞指北-VulFocus靶场02-初级 初级005 &#x1f338;phpunit 远程代码执行 (CVE-2017-9841)&#x1f338;step1&#xff1a;进入漏洞页step2&#xff1a; burpsuite 抓包,等待请求页&#xff0c;获得flag 初级006 &#x1f338;splunk 信息泄露 &#xff08;CVE-2018-11409&am…

【操作系统】24王道考研笔记——第三章 内存管理

第三章 内存管理 一、内存管理概念 1.基本概念 2.覆盖与交换 覆盖技术&#xff1a; 交换技术&#xff1a; 总结&#xff1a; 3.连续分配管理方式 单一连续分配 固定分区分配 动态分区分配 动态分区分配算法&#xff1a; 总结&#xff1a; 4.基本分页存储管理 定义&#xf…

基于空间的图卷积神经网络:GNN

目录 欧氏空间中神经网络发挥巨大最作用&#xff0c;DNA&#xff0c;知识图谱三维或者多维空间不行 邻接矩阵实现图结构的矩阵化表示&#xff1a;造梦师 局和操作实现层内消息传递&#xff1a;带线的连接机传递消息 GCN通过邻域聚合实现特征提取 SVM支持向量机 ​编辑 硬分…

浅析Java设计模式之四策略模式

title: 浅析Java设计模式之四策略模式 date: 2018-12-29 17:26:17 categories: 设计模式 description: 浅析Java设计模式之四策略模式 1. 目录 1. 目录2. 概念 2.1. 应用场景2.2. 优缺点 2.2.1. 优点2.2.2. 缺点 3. 模式结构4. 样例 4.1. 定义策略4.2. 定义具体策略4.3. 定义…

用 VB.net,VBA 两种方式 读取单元格内的 换行数据,并出力到 CSV文件

用 VB.net&#xff0c;VBA 两种方式 读取单元格内的 换行数据&#xff0c;并出力到 CSV文件 需求 如下图所示&#xff0c;为了生成csv文件导入数据库&#xff0c;需要将下图 的 1 和 2 拼接成 如下 3 所示的一行数据&#xff0c; 开头为 1 &#xff0c;往后为 2 的换行数据 将换…

整理mongodb文档:批量操作

个人博客 整理mongodb文档:批量操作 个人公众号&#xff0c;求关注&#xff0c;文章如有不明&#xff0c;请指出。 文章概叙 本文讲的是关于bulkwrite的用法&#xff0c;依旧是在shell下使用。 关于批量操作 Performs multiple write operations with controls for order …

Eureka:服务注册-信息配置-自我保护机制

首先在提供者服务下&#xff0c;添加一个依赖 <!-- Eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version><…

【模块系列】AHT10温湿度模块

前言 以下是AHT10模块官网介绍原话。还有就是官网已经显示停产了&#xff0c;不过淘宝还是有小模块玩玩的。 AHT10是一款高精度&#xff0c;完全校准&#xff0c;贴片封装的温湿度传感器&#xff0c;MEMS的制作工艺&#xff0c;确保产品具有极高的可靠性与卓越的长期稳定性。传…

【网络基础】数据链路层

【网络基础】数据链路层 文章目录 【网络基础】数据链路层1、对比网络层2、以太网2.1 基本概念2.2 类似技术2.3 以太网帧 3、MAC地址对比IP地址 4、MTU4.1 对IP协议影响4.2 对UDP协议影响4.3 对TCP协议影响4.4 地址、MTU查看 5、ARP协议5.1 协议作用5.2 协议工作流程5.3 数据报…

第一章:SpringBoot基础入门

第一章&#xff1a;SpringBoot基础入门 1.1&#xff1a;Spring与SpinrBoot Spring能做什么 Spring的能力 Spring的生态 网址&#xff1a;https://spring.io/projects/spring-boot 覆盖了&#xff1a;Web开发、数据访问、安全控制、分布式、消息服务、移动开发、批处理等。 …