JAVA如何连接redis以及Springboot整合redis详解

2023-11-18

1. java连接redis

1.1 java连接单机redis

首先创建一个普通的maven工程

 (1)引入依赖

<dependencies>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.8.0</version>
        </dependency>
    </dependencies>

(2)测试

public class demo1 {
    public static void main(String[] args) {
        //String数据类型
//        redisString();

        //hash数据类型
//        redisHash();

        //List<列表>数据类型
        Jedis jedis = new Jedis("172.16.7.220",6379);


    }

    private static void redisHash() {
        Jedis jedis = new Jedis("172.16.7.220",6379);
        jedis.select(1);
        jedis.hset("k1","name","syf");

        HashMap<String,String> map = new HashMap<>();
        map.put("name","ljh");
        map.put("age","18");
        map.put("address","shanghai");
        Long k2 = jedis.hset("k2", map);//将哈希表 key 中的字段 field 的值设为 value hget key field: 获取存储在哈希表中指定字段的值。
        Map<String, String> all = jedis.hgetAll("k2");//获取在哈希表中指定 key 的所有字段和值
        Set<String> k21 = jedis.hkeys("k2");//获取所有哈希表中的字段
        Long k1 = jedis.hdel("k2","name");//删除一个或多个哈希表字段
        System.out.println(k1);
    }

    private static void redisString() {
        //把所有关于对redis的操作都封装到一个类中Jedis
        //Jedis jedis = new Jedis();//无参构造函数,默认连接的是本地的redis,而且端口6379
        Jedis jedis = new Jedis("172.16.7.220",6379);
//        System.out.println(jedis.ping());//测试连通性   pong则为连通

        //String类型的redis数据测试
//        String s = jedis.flushAll();     //清空当前redis库的数据
//        String select = jedis.select(0);      //切换redis的数据库
        String set = jedis.set("k1", "v1");   //设置k1,v1
        String mset = jedis.mset("k1","v2","k2","v2","k4","4");  //设置多个k1,v1
        Long setnx = jedis.setnx("k1", "v1");//判断如果k1不存在的添加返回1,存在不添加返回0
        Set<String> keys = jedis.keys("*"); //获取所有的key
        String setex = jedis.setex("k3", 5L, "v3");//设置过期时间
//        Long del = jedis.del("k1", "k2");//删除key
        String k1 = jedis.get("k1");//获取k1的值
        Long k4 = jedis.incr("k4");//对指定的key的value值进行递增。key对应的value必须为整型字符串
        Long decr = jedis.decrBy("k4", 2L);//按照number值进行递增
        System.out.println(decr);
        jedis.close();
    }
}

特点: Jedis把对redis的操作都封装到Jedis类对象中了,而每个命令封装了一个对应的方法。

1.2 java通过连接池连接redis

连接池的作用: 减少频繁创建和销毁连接对象。

public class demo2 {
    public static void main(String[] args) {
        //配置连接对象信息
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMinIdle(5);//设置最小的空闲数
        poolConfig.setMaxIdle(10);//当没人连接redis服务器是,该池子最多能空闲几个连接对象
        poolConfig.setMaxTotal(15);//当有人连接redis服务时,最大能生成多少个连接对象

        //创建连接池对象
        JedisPool jedisPool = new JedisPool(poolConfig,"172.16.7.220",6379);
        long start = System.currentTimeMillis();

        //从连接池获取连接对象
        for (int i = 0; i < 1000; i++) {
            Jedis jedis = jedisPool.getResource();
            jedis.ping();
            jedis.close();
        }
        long end = System.currentTimeMillis();
        System.out.println(end-start);
    }
}

1.3 java连接redis集群

public class demo4 {
    public static void main(String[] args) {
        HostAndPort hostAndPort1=new HostAndPort("172.16.7.220",7001);
        HostAndPort hostAndPort2=new HostAndPort("172.16.7.220",7002);
        HostAndPort hostAndPort3=new HostAndPort("172.16.7.220",7003);
        HostAndPort hostAndPort4=new HostAndPort("172.16.7.220",7004);
        HostAndPort hostAndPort5=new HostAndPort("172.16.7.220",7005);
        HostAndPort hostAndPort6=new HostAndPort("172.16.7.220",7006);
        Set<HostAndPort> sets=new HashSet<>();
        sets.add(hostAndPort1);
        sets.add(hostAndPort2);
        sets.add(hostAndPort3);
        sets.add(hostAndPort4);
        sets.add(hostAndPort5);
        sets.add(hostAndPort6);
        JedisCluster jedisCluster=new JedisCluster(sets);
        jedisCluster.set("k1","v1");
        jedisCluster.set("k2","v2");
        jedisCluster.set("k3","v3");
        jedisCluster.set("k4","v4");
        jedisCluster.set("k5","v5");
        jedisCluster.set("k6","v6");
        jedisCluster.set("k7","v7");

        jedisCluster.close();
    }
}

2. springboot整合redis.

springboot对redis的操作封装到模板类中RedisTemplate和StringRedisTemplate。StringRedisTemplate是Redistemplate的子类,它只能往redis中存放字符串类型。

(1)创建一个Springboot工程

(2)引入依赖

<?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.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.aaa</groupId>
    <artifactId>redis-springboot-01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>redis-springboot-01</name>
    <description>redis-springboot-01</description>
    <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-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </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>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

(2)配置信息


#redis的配置信息--单机
spring.redis.host=192.168.223.147
spring.redis.port=6379

(3)测试

@SpringBootTest
class RedisSpringboot01ApplicationTests {

    //springboot 创建好该类对象 并交于IOC容器管理
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Test
    void contextLoads() {
//        Boolean k1 = redisTemplate.hasKey("k1");//判断k存不存在
//        System.out.println("判断k1是否存在:"+k1);
//        Boolean k2 = redisTemplate.delete("k2");//删除指定的k
//        System.out.println("k2是否删除成功:"+k2);
//        Set<String> keys = redisTemplate.keys("*");//得到所有的k
//        System.out.println(keys);

        //字符串的操作--redisTemplate类中对于每一种数据类型的操作,单独封装了响应的类
        ValueOperations<String, String> forValue = redisTemplate.opsForValue();
//        Integer append = forValue.append("k1", "v5");//追加字符串功能
//        forValue.set("k8","v8");//设置值
//        String k8 = forValue.get("k8");//获取k对应的value
//        Boolean absent = forValue.setIfAbsent("k9", "v9");//如果k不存在则添加,存在则返回false
//        Boolean k9 = forValue.setIfPresent("k9","v100");//如果k存在就覆盖,不存在就添加
//        HashMap<String, String> map = new HashMap<>();
//        map.put("k6","v6");
//        map.put("k7","v7");
//        map.put("k8","v8");
//        map.put("k9","v9");
//        forValue.multiSet(map);
//        ArrayList<String> list = new ArrayList<>();
//        list.add("k6");
//        list.add("k7");
//        list.add("k8");
//        list.add("k9");
//        List<String> strings = forValue.multiGet(list);
//        System.out.println(strings);

        //hash类型操作
        HashOperations<String, Object, Object> opsForHash = redisTemplate.opsForHash();
        Object o = opsForHash.get("k1", "name");//获取字段的值
        opsForHash.put("k3","name","yuhail");//存放数据
        Set<Object> set = opsForHash.keys("k2");//获取k的所有字段
        Map<Object, Object> k2 = opsForHash.entries("k2");//获取所有的字段和value值
        System.out.println(set);
        System.out.println(k2);
        HashMap<String, String> map = new HashMap<>();//批量添加hash数据
        map.put("name","asfd");
        map.put("addr","v7");
        map.put("age","v8");
        map.put("sex","v9");
        opsForHash.putAll("k4",map);

    }

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA如何连接redis以及Springboot整合redis详解 的相关文章

  • 枚举的子类化

    有没有一种简单的方法来子类化Javaenum 我问这个问题是因为我有大约 10 个实现相同接口的对象 但它们对某些方法也有相同的实现 因此我想通过将所有相同的实现放置在扩展的中间对象中来重用代码Enum它也是我需要的所有其他类的超类 或许事
  • Java将字符串解析为double

    如何解析字符串中的这个 Double 00034800 变成 Double 值 最后两位数字实际上是小数点 所以我正在寻找的结果是348 00 是否有这样的格式可以与十进制格式一起使用 Well String s 00034800 doub
  • Android:如何暂停和恢复可运行线程?

    我正在使用 postDelayed 可运行线程 当我按下按钮时 我需要暂停并恢复该线程 请任何人帮助我 这是我的主题 protected void animation music6 music4 postDelayed new Runnab
  • 在Windows Server 2003下如何在本地系统帐户下运行jvisualvm.exe?

    我在带有 Java 1 6 u 20 的 Windows Server 2003 下将 GlassFish 3 0 1 作为 Windows 服务运行 总体上我很满意 我希望能够在这个 JVM 上使用 VisualVM 并使用无法在 Tom
  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 为什么在 10 个 Java 线程中递增一个数字不会得到 10 的值?

    我不明白 a 的值为0 为什么 a 不是10 那段代码的运行过程是怎样的 是否需要从Java内存模型来分析 这是我的测试代码 package com study concurrent demo import lombok extern sl
  • 查看Java Agent修改的Java类的源代码

    我需要了解 Java 代理如何修改我的初始类 以便我能够理解代码的作用 build gradle configurations jar archiveName agent2 jar jar manifest attributes Prema
  • 我对线程失去了理智

    我想要这个类的对象 public class Chromosome implements Runnable Comparable
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 2^31 次方的 Java 指数错误 [重复]

    这个问题在这里已经有答案了 我正在编写一个java程序来输出2的指数幂 顺便说一句 我不能使用Math pow 但是在 2 31 和 2 32 处我得到了其他东西 另外 我不打算接受负整数 My code class PrintPowers
  • 使用 JDBC 连接到 PostgreSql 的本地实例

    我在 Linux 机器上有一个正在运行的 PostgreSql 本地实例 当我使用psql来自 shell 的命令我成功登录 没有任何问题 我需要通过 JDBC 连接到 PostgreSql 但我不知道我到底应该传递什么url参数为Driv
  • Android - 存储对ApplicationContext的引用

    我有一个静态 Preferences 类 其中包含一些应用程序首选项和类似的内容 可以在那里存储对 ApplicationContext 的引用吗 我需要该引用 以便我可以在不继承 Activity 的类中获取缓存文件夹和类似内容 你使用的
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • 在 Java 中通过 D-Bus MPRIS 访问 Clementine 实例

    我使用 Clementine 作为音乐播放器 它可以通过 D Bus 命令进行控制 在命令行上 使用 qdbus 我可以 Start Stop 暂停播放器 强制它跳过播放列表中的歌曲 检查播放列表的长度 检查播放列表中当前播放的曲目及其元数
  • Android ScrollView,检查当前是否滚动

    有没有办法检查标准 ScrollView 当前是否正在滚动 方向是向上还是向下并不重要 我只需要检查它当前是否正在滚动 ScrollView当前形式不提供用于检测滚动事件的回调 有两种解决方法可用 1 Use a ListView并实施On
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • Java 的“&&”与“&”运算符

    我使用的示例来自 Java Herbert Schildt 的完整参考文献 第 12 版 Java 是 14 他给出了以下 2 个示例 如果阻止 第一个是好的 第二个是错误的 因此发表评论 public class PatternMatch
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ

随机推荐

  • 图解laravel的生命周期

    先来张图大致理解下laravel的生命周期 下面对应相应的代码 解释上图 文件路径 laravel public index php laravel的启动时间 define LARAVEL START microtime true 加载项目
  • 2024王道408数据结构 P92 T3

    2024王道408数据结构 P92 T3 思考过程 这题比较复杂做的我好 累 首先我们还是先看懂题目 让我们用一个栈来实现递归函数的非递归计算 我们先剖析一下这个表达式 式子展开变成图上这样 那既然让我们用非递归来计算 那我们顺理成章就想到
  • [Qt]控件

    文章摘于 爱编程的大丙 文章目录 1 按钮类型控件 1 1 按钮基类 QAbstractButton 1 1 1 标题和图标 1 1 2 按钮的 Check 属性 1 1 3 信号 1 1 4 槽函数 1 2 QPushButton 1 2
  • 蓝桥杯单片机14届省赛解析(个人)

    下面记录一下自己这届省赛比赛时的思路 不太会写作文 比较口语化 而且一些看法仅仅是我个人观点 赛后我还没有看过任何讲解或例程 可能会有很多理解不对的地方希望大家能够指出一起交流 一 硬件框图 往届省赛基本上都是考两个外设 这次一看硬件框图就
  • vue 集成高德地图

    准备工作 高德地图官网 https lbs amap com 高德地图JS API 2 0 教程 https lbs amap com api jsapi v2 summary 高德地图JS API 2 0 参考手册 https lbs a
  • python中sqlite3对数据库的增删改查

    1 python API的介绍 1 connection 数据库连接对象 连接对象 建立python客户端与数据库的网络连接 创建方法 sqlite3 connect 参数 2 cursor 游标对象 2 增删改查的流程 select语句
  • C++代码审查工具Cppcheck和TscanCode

    cppcheck简介 cppcheck 是一个静态代码检查工具 支持c c 代码 作为编译器的一种补充检查 cppcheck对源代码执行严格的逻辑检查 助力开发与测试工程师从代码层面挖掘问题 聚焦于包括逻辑错误 可疑的代码 运算错误 空指针
  • stm32通过spi连接esp8266的hspi 开发

    stm32通过spi连接esp8266的hspi 开发 刚刚做了stm32通过spi连接esp8266的开发 目前已经解决了遇到的大多数问题 基本可以交付使用了 写一篇文章留作记录 也可以给以后做这个的朋友做为参考 esp8266模块本身发
  • Nand Flash基础知识

    1 Nand Flash组织架构 Device Package 就是封装好的nand flash单元 包含了一个或者多个target 一个target包含了一个或者多个LUN 一个target的一个或者多个LUN共享一组数据信号 每个tar
  • 一个迷惑性很高的生产故障-Elasticsearch日志rotate导致节点CPU激增

    背景 Elasticsearch CPU很高的场景很常见 优化读写以及扩容即可解决问题 如果只有一个节点CPU高 那可能的情况就比较多了 节点机器异常 读写不均匀 GC过高 forcemerge 这里描述一个极具迷惑性的case 问题 收到
  • 电机专题2:直流有刷电机工作原理

    直流有刷电机的工作原理 直流有刷电机 其实就是直接最简单的方式利用安培力 给导线通电 然后在磁场中运动 在上面的电流电机物理模型中 电刷和主磁铁是固定不动的 是电机的定子 绕组线圈和换向片连接到一起 为转子 电机的工作过程 这种是直流有刷电
  • diskmark使用教程

    raid盘测速 首先说明一下软件各个参数的意义 1 9 测试次数 50MB 4000MB 测试规模 C D E F选择测试对象 ALL 测试以下所有 第一行代表你硬盘的读写速度 第二行代表你硬盘4K文件多线程读写速度 第三行代表你硬盘的连续
  • 计算机概论易错题总结:概念类

    为期末考试 冲鸭 文字类 1 在计算机运行时 把程序和数据一样存放在内存中 这是1946年由 领导的研究小组 正式提出并论证的 冯 诺依曼 2 被誉为第一位程序员的是 Augusta 3 我国自行设计研制的天河2号计算机是 巨型机 记法 天
  • JSP动态网页设计——tomcat配置、第一个动态工程

    默认设置 已完成eclipse安装 JDK安装 环境配置 下载tomcat压缩包 已上传至资源 并解压好 启动tomcat 在此文件夹下找到bin文件 在bin目录下点击startup bat 启动标志 双击弹出黑框 若出现以下图片 则已启
  • STL之Set基本用法

    单独说一下Set是因为这个工具以前很少用 因为接触不多 后来发现功能太强大了 本来很多题目用Set可以快速通过 但无奈之前都没有使用set的习惯 导致吃了不少亏 set功能非常强大 原因在于Set就是一棵二叉搜索树 我们在很多题目中经常遇到
  • 在Android下初始化Native OpenGL ES

    在上一篇文章中 介绍了在Android Native层初始化EGL及OpenGL ES的方法 其中 大量代码花费在EGL的初始化上面 非常的麻烦 在本文中 将展示利用GLSurfaceView来代替我们手动初始化EGL的过程 用GLSurf
  • 数据分析 告诉你《飞驰人生》为什么这么燃?

    数据分析 飞驰人生 为什么这么燃 2019年贺岁电影 飞驰人生 在豆瓣排名和猫眼排名中都排名第二的位置 我们这里爬取了豆瓣500条的评论数据来 分析一下 飞驰人生 为何这么燃 这里说明一下 之所以获取这么点数据 是豆瓣的 的反爬限制 非登录
  • Vue 0基础学习路线(24)—— 图解深度详述vue的路由动画效果的使用及详细案例(附详细案例代码解析过程及版本迭代过程)

    文章目录 1 路由动画效果 2 实例 2 1 example01 1 路由动画效果 路由动画 gt 利用 transition 组件 我们还可以给路由导航加上动效 App vue
  • TCP/IP协议:传输层之UDP

    一 UDP用户数据报协议 它是一个无连接的 面向数据报的协议 它不提供可靠性但传输速度比TCP要快 UDP数据报中的 UDP长度 为两个字节 所以我们要发送的UDP数据最多支持65507大约68K的数据 超过该大小的话需要自己来分割发送 使
  • JAVA如何连接redis以及Springboot整合redis详解

    1 java连接redis 1 1 java连接单机redis 首先创建一个普通的maven工程 1 引入依赖