Redis Java API操作

news2024/11/27 10:23:11

1、普通maven工程方式

Redis不仅可以通过命令行进行操作,也可以通过JavaAPI操作,通过使用Java API来对Redis数据库中的各种数据类型操作

导入POM依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.liming</groupId>
    <artifactId>JavaRedis305</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.14.3</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <!--    <verbal>true</verbal>-->
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

连接以及关闭redis客户端

因为后续测试都需要用到Redis连接,所以,我们先创建一个JedisPool用于获取Redis连接。此处,我们基于TestNG来测试各类的API。使用@BeforeTest在执行测试用例前,创建Redis连接池。使用@AfterTest在执行测试用例后,关闭连接池。

实现步骤:

1、创建JedisPoolConfig配置对象,指定最大空闲连接为10个、最大等待时间为3000毫秒、最大连接数为50、最小空闲连接5个

2、创建JedisPool

3、使用@Test注解,编写测试用例,查看Redis中所有的key

(a)从Redis连接池获取Redis连接

​ (b)调用keys方法获取所有的key

​ (c)遍历打印所有key

package com.liming.redis;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.Set;

/**
 * @author 黎明
 * @date 2023/5/16 18:40
 * @version 1.0
 */
public class RedisTest {

    private JedisPool jedisPool;

    @BeforeTest
    public void testBefore(){
        // JedisPoolConfig配置对象
        JedisPoolConfig config = new JedisPoolConfig();
        // 指定最大空闲连接为10个
        config.setMaxIdle(10);
        // 最小空闲连接5个
        config.setMinIdle(5);
        // 最大等待时间为3000毫秒
        config.setMaxWaitMillis(3000);
        // 最大连接数为50
        config.setMaxTotal(50);

        jedisPool = new JedisPool(config, "192.168.11.130", 6379);
    }

    @Test
    public void testKeys(){
        // 从Redis连接池获取Redis连接
        Jedis jedis = jedisPool.getResource();
        // 调用keys方法获取所有的key
        Set<String> keys = jedis.keys("*");
        // 遍历得到所有key
        for (String key : keys) {
            System.out.println(key);
        }
    }

    @AfterTest
    public void testAfter(){
        // 关闭连接池
        jedisPool.close();
    }
}

运行结果:

在这里插入图片描述

操作string类型数据

1、添加一个string类型数据,key为pv,用于保存pv的值,初始值为0
2、查询该key对应的数据
3、修改pv为1000
4、实现整形数据原子自增操作 +1
5、实现整形该数据原子自增操作 +1000

@Test
public void testString(){
    // 获取Jedis连接
    Jedis jedis = jedisPool.getResource();
    // 1、添加一个string类型数据,key为pv,用于保存pv的值,初始值为0
    jedis.set("pv","0");
    // 2、查询该key对应的数据
    String pv = jedis.get("pv");
    System.out.println("pv1:"+pv);
    // 3、修改pv为1000
    jedis.set("pv","1000");
    System.out.println("pv2:"+jedis.get("pv"));
    // 4、实现整形数据原子自增操作+1
    jedis.incr("pv");
    System.out.println("pv3:"+jedis.get("pv"));
    // 5、实现整形该数据原子自增操作+1000
    jedis.incrBy("pv",1000);
    System.out.println("pv4:"+jedis.get("pv"));

    // 将Jedis对象放回到连接池
    jedis.close();
}

运行结果:

在这里插入图片描述

操作hash列表类型数据

1、往Hash结构中添加以下商品库存

  • iphone11 => 10000
  • macbookpro => 9000

2、获取Hash中所有的商品
3、新增3000个macbookpro库存
4、删除整个Hash的数据

 @Test
public void testHash() {
    // 1、从池子里拿一个连接
    Jedis jedis = jedisPool.getResource();
    // 2、往Hash结构中添加以下商品库存 goods
    // iphone14 => 10000
    // macbookpro => 9000
    jedis.hset("goods","iphone14","10000");
    jedis.hset("goods","macbookpro","20000");
    // 3、获取Hash中所有的商品
    Set<String> goods = jedis.hkeys("goods");
    for (String good : goods) {
        System.out.println(good);
    }
    // 4、新增3000个macbookpro库存
    jedis.hincrBy("goods","macbookpro",3000);
    System.out.println(jedis.hget("goods","macbookpro"));

    // 5、删除整个Hash的数据
    jedis.del("goods");

    // 将Jedis对象放回到连接池
    jedis.close();
}

在这里插入图片描述

操作list类型数据

1、向list的左边插入以下三个手机号码:18511310002、18912301233、18123123314
2、从右边移除一个手机号码
3、获取list所有的值

@Test
public void testList(){
    // 获取Jedis连接
    Jedis jedis = jedisPool.getResource();
    // 1、向list的左边插入以下三个手机号码:18511310001、18912301231、18123123312
    jedis.lpush("tel_list","18511310001","18912301231","18123123312");
    // 2、从右边移除一个手机号码
    jedis.rpop("tel_list");
    // 3、获取所有的值
    List<String> telList = jedis.lrange("tel_list", 0, -1);
    for (String tel : telList) {
        System.out.println(tel);
    }

    // 释放资源
    jedis.close();
}

在这里插入图片描述

操作set类型的数据

使用set来保存uv值,为了方便计算,将用户名保存到uv中。

  • 往一个set中添加页面 page1 的uv,用户user1访问一次该页面
  • user2访问一次该页面
  • user1再次访问一次该页面
  • 最后获取 page1的uv值
 @Test
public void testSet(){
    // 获取Jedis连接
    Jedis jedis = jedisPool.getResource();
    // 1、往一个set中添加页面 page1 的uv,用户user1访问一次该页面
    jedis.sadd("uv","user1");
    // 2、user2访问一次该页面
    jedis.sadd("uv","user2");
    // 3、user1再次访问一次该页面
    jedis.sadd("uv","user1");
    // 4、最后获取 page1的uv值
    System.out.println("uv:"+jedis.scard("uv"));

    // 释放资源
    jedis.close();
}

在这里插入图片描述

2、SpringBoot方式

创建SpringBoot工程

在这里插入图片描述

选择对应的依赖

在这里插入图片描述

pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.liming</groupId>
    <artifactId>redis_boot</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.yml

spring:
  redis:
    host: 192.168.11.130
    port: 6379

测试类

package com.liming;

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;
/**
 * @author 黎明
 * @date 2023/5/16 20:24
 * @version 1.0
 */
@SpringBootTest
class RedisBootApplicationTests {
    @Autowired
    private RedisTemplate redisTemplate; // 模板帮我们建连接、关连接

    @Test
    void contextLoads() {
        // 两套api
        redisTemplate.opsForValue().set("a","b");
        redisTemplate.opsForHash().put("map","username","liming");
        System.out.println("a:"+redisTemplate.opsForValue().get("a"));
        System.out.println("map->username:"+redisTemplate.opsForHash().get("map","username"));

        redisTemplate.boundValueOps("c").set("d");
        redisTemplate.boundHashOps("map1").put("username","liming");
        System.out.println("c:"+redisTemplate.boundValueOps("c").get());
        System.out.println("map1->username:"+redisTemplate.boundHashOps("map1").get("username"));
    }

}

运行结果:

在这里插入图片描述

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

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

相关文章

【Linux Network】传输层协议——UDP

目录 传输层 端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) netstat pidof UDP协议 UDP协议端格式 UDP的特点 面向数据报 UDP的缓冲区 UDP使用注意事项 基于UDP的应用层协议 UDP详解&#x1f337; 传输层 在TCP/IP协议中可以把网络简单的划分为四个部分&#…

大数据如何助力营销(3)产品定位

在市场竞争日益激烈的环境下&#xff0c;产品定位是企业成功的关键因素之一。产品定位是指根据目标市场和目标消费者的需求、偏好和期望&#xff0c;确定产品的特性、功能、形象和价值&#xff0c;并与竞争对手的产品进行差异化的过程。产品定位不仅影响产品的设计、开发、生产…

全面讲解涂鸦PaaS2.0开发平台!物联网干货预警

之前我们有介绍过涂鸦 IoT PaaS&#xff08;点击查看往期介绍&#xff09;&#xff0c;面向开发生态&#xff0c;它集成了云开发、App 开发、硬件开发三大核心支撑能力&#xff0c;能够全方位助力开发者打造极具竞争力的个性化 IoT 解决方案&#xff0c;极大地降低 IoT 开发门槛…

Appium APP自动化环境搭建

1.下载安装 F:\android-sdk-windows F:\Appium-windows-1.21.0 F:\nodejs 2.创建一个bat文件&#xff0c;命名为appium.bat&#xff0c;并在其中写入如下内容&#xff1a; node Appium安装目录\resources\app\node_modules\appium\build\lib\main.js %* 注意&#xff1a;请…

从0到1开始,一步步搭建Web自动化测试框架

测试框架的设计有两种思路&#xff0c;一种是自底向上&#xff0c;从脚本逐步演变完善成框架&#xff0c;这种适合新手了解框架的演变过程。另一种则是自顶向下&#xff0c;直接设计框架结构和选取各种问题的解决方案&#xff0c;这种适合有较多框架事件经验的人。本章和下一张…

【zabbix】批量监控端口,自动发现规则

快速搞定端口批量监控 一、脚本及配置 1、&#xff08;文件名&#xff1a;check_port.py&#xff09;&#xff08;python2.7版本&#xff09; 存在路径&#xff1a;/etc/zabbix/zabbix_agentd.d/check_port.py 这个脚本有一部分内容是我从百度上找的&#xff0c;有一部分自己…

【C++】红黑树的实现

文章目录 &#x1f4d5; 概念特性 &#x1f4d5; 红黑树具体实现节点定义结构框架插入 &#x1f4d5; 概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个…

Python基础(四)

目录 一、程序的组织结构 1、前言 二、顺序结构 1、介绍 三、对象的布尔值 1、介绍 2、规定 四、分支结构 1、单分支if结构 1、语法语义 2、语法结构 3、案例 2、双分支if...else结构 1、语法语义 2、语法结构 3、案例 3、多分支if...elif...else结构 1、语…

Java语言---栈与队列

目录 一.栈 1.1栈的概念 1.2.栈的实现 1.2.1数组实现 栈 栈的创建 栈的基本方法实现 1.2.2链表实现 栈 栈的创建 栈的基本方法实现 二.队列 2.1队列的概念 2.2队列的实现 2.3代码实现 2.3.1队列代码的构建 2.3.2 队列 基础方法实现 总结 &#x1f63d;个人主页…

深入理解2D卷积和3D卷积

文章目录 卷积核的维度2D卷积单通道多通道代码example2d卷积操作后变化 3D卷积单通道多通道代码 在项目中用到了conv3但是对其背后的原理还有一些模糊的地方&#xff0c;conv2d与多通道的conv2d的区别在哪里&#xff1f;conv3d的思想理论是什么&#xff1f;对此进行探究和记录……

「AI之劫」:当机器超越人类底线,正在侵犯我们的创造力和道德

随着AI技术的不断发展&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已经成为数字娱乐、商业营销和学术研究等领域的热门话题。随着人工智能技术的不断发展越来越多的领域开始应用AI技术&#xff0c;其中之一就是内容生成领域。 AIGC全称为AI-Generated Content, 指基于生…

2023年5月广州/深圳制造业产品经理很适合考的证书-NPDP

产品经理国际资格认证NPDP是新产品开发方面的认证&#xff0c;集理论、方法与实践为一体的全方位的知识体系&#xff0c;为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会&#xff08;PDMA&#xff09;成立于1979年&#xff0c;是…

【利用AI让知识体系化】入门Egg框架(含实战)

思维导图 文章目录 思维导图第一章&#xff1a;概述1.1 Egg.js 简介1.2 Egg.js 的架构和优势1.3 Egg.js 的基本组件和插件 第二章&#xff1a;环境搭建2.1 Node.js 环境安装和配置2.2 Egg.js 应用创建和项目结构介绍2.3 Egg.js 应用部署和启动 第三章&#xff1a;基本开发3.1 路…

经纬恒润新产品系列 | 这款AR-HUD将颠覆你的认知

随着科技的发展与突破&#xff0c;智能化产品在汽车领域扮演了越来越重要的角色。本文即将介绍**经纬恒润新产品——AR-HUD&#xff08;增强现实抬头显示系统&#xff09;&#xff0c;**它可以将科幻电影中的驾驶场景变为现实——将信息投影在挡风玻璃上&#xff0c;基于此功能…

开发环境搭建和创建STM32工程

目录 一、开发环境搭建 1. STM32CubeMX 2.Keil安装 二、创建STM32工程 一、开发环境搭建 1. STM32CubeMX ST公司出品 工具链接 https://www.st.com/zh/development-tools/stm32cubemx.html STM32CubeMX是一种图形工具&#xff0c;通过分步过程可以非常轻松地配置STM32微控制器和…

coolshell 镜像备份站点

缅怀技术大佬做的一个镜像站点 - RIP 消息刚开始是在推特传开&#xff0c;后面得到了家人同事的证实。噩耗&#xff01; worldpeople2019 太意外了&#xff01;中年程序员&#xff0c;感觉年龄跟我差不多&#xff0c;怎么就这么突然去世了&#xff1f;&#xff01;诸位码农朋友…

Python爬虫进阶(1),Django+Selenium+Mysql+SimpleUI,从零开始搭建自己的爬虫后台管理系统

如果爬虫做完的话都会发现每个文件要么保存到csv或者是其他格式的文件中&#xff0c;这样做多少会有些麻烦&#xff0c;所以需要将这些内容保存起来方便自己管理和查看内容。 相对于flask而言Django有着相对成熟的一个后台管理系统配合上其他一些插件就可以做到即插即用的效果…

hive安装及配置

hive安装和部署 Hive地址 1&#xff0e;Hive官网地址 http://hive.apache.org/ 2&#xff0e;文档查看地址 https://cwiki.apache.org/confluence/display/Hive/GettingStarted 3&#xff0e;下载地址 http://archive.apache.org/dist/hive/ 4&#xff0e;github地址 http…

全新版本,手把手教你配置c\c++

上一篇图片多&#xff0c;语句乱&#xff0c;内容乱 这一篇采用全新的教程 这次在不删软件的前提下进行 老规矩先把之前看的教程残余删除 如果你有很多插件和设置这边建议先备份 打开c盘&#xff0c;在搜索栏里输入你的用户名 在箭头位置搜索你的用户名&#xff0c;就是你…

通过Python的wordcloud库将单词生成词云(心形形状)

文章目录 前言一、wordcloud库是什么&#xff1f;二、安装wordcloud库三、查看wordcloud库版本四、使用方法1.引入库2.定义图片路径3.定义需要分词的文本4.采用jieba搜索引擎模式分词5.加载心形图片6.创建词云对象7.生成词云8.保存词云图9.词云图效果 总结 前言 大家好&#xf…