Java 操作 Redis客户端

news2024/11/16 9:45:37

目录

1.渐进式遍历

2.Java 操作 Redis 客户端

2.1 引入依赖

2.2 配置端口转发

2.3 连接Redis Server

3.基础操作

3.1 set 和 get

3.2  exists 和 del

3.3 keys 

3.4 expire 和 ttl

3.5 type

4.字符串操作

4.1 mget 和 mset

4.2 append 

4.3 getrange 和 setrange

4.4 incr 和 decr

5.列表操作 

5.1 lpush 和 lpop 和 lrange

5.2 rpush 和 rpop

5.3 blpop 和 brpop

5.4 llen

6.哈希表操作 

6.1 hset 和 hget

6.2 hexists 和 hdel  

6.3 hkeys 和 hvals

7.集合操作

7.1 sadd 和 smembers

7.2 srem 和 sismember

7.3 scard 和 spop

7.4 sinter 和 sinterstore

8.有序集合操作

8.1 zadd 和 zrange

8.2 zrem 和 zcard 

8.3 zscore 和 zrank


1.渐进式遍历

在 Redis 中,keys * 可以护球所有的 key,但是直接使用 keys * 获取键时可能会出现阻塞的问题,Redis 使用 scan 命令可以进行渐进式遍历键,每次 scan 命令的时间复杂度是O(1),但是如果想要完整的遍历所有键,就需要执行多次 scan 

scan 命令渐进式遍历

1)首次 scan 从 0 开始

2)当 scan 返回的下次位置为 0 时,遍历结束

SCAN

以渐进式的方式进行键的遍历

语法:

SCAN cursor [MATCH pattern] [COUNT count] [TYPE type]

 count:限制这一次遍历能够获取到多个元素,默认是10

时间复杂度:O(1)

返回值:下一次 scan 的 cursor 以及本次得到的键

此处的 count 只是给 Redis 服务器一个提示,写入的 count 和实际返回的 key 的个数不一定完全相同,但是不会差太多

除了 scan 以外,Redis 面向哈希类型、集合类型、有序类型分别提供了 hscan、sscan、zscan命令,用法和 scan 基本类似

注意:

渐进式遍历 scan 虽然解决了阻塞问题,但是如果在遍历期间键有所变化(增加、修改、删除),可能导致遍历时键的重复或者遗漏

2.Java 操作 Redis 客户端

2.1 引入依赖

Java 操作 redis 的客户端有很多,这里使用 jedis,创建 maven 项目,引入 jedis 依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>4.3.2</version>
</dependency>

2.2 配置端口转发

在 xshell 中进行配置

1)右键云服务器的会话,选择属性

2)点击隧道—配置转移规则

3)使用该会话连接服务器

此时,访问本地的 8888 就相当于访问对应服务器的 6379

2.3 连接Redis Server

1)使用 JedisPool 描述 Redis 服务器的位置,使用 url 来表示

2)使用 getResource 和服务器建立连接 

3)连接使用完毕需要使用 close 关闭,可以直接使用 try 自动关闭

4)通过 ping 检测连接是否正确建立

public class Redis {
    public static void main(String[] args) {
        //连接到 Redis 服务器
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            //执行 Redis 命令
            String pong = jedis.ping();
            System.out.println(pong);
        }
    }
}

此时正确的建立的连接

3.基础操作

3.1 set 和 get

public class Redis {
    public static void test(Jedis jedis) {
        System.out.println("set 和 get 的使用");
        //清空数据库,避免上一组测试的残留数据影响下一组的数据
        jedis.flushAll();

        jedis.set("key1","111");
        String value = jedis.get("key1");
        System.out.println("value: " + value);
        SetParams params = new SetParams();
        params.ex(10);
        //xx表示存在才设置
        params.xx();
        jedis.set("key1","222",params);
        value = jedis.get("key1");
        System.out.println("value: " + value);
        value = jedis.get("key2");
        System.out.println("value: " + value);
    }
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test(jedis);
        }
    }
}

3.2  exists 和 del

public class Redis {
    public static void test2(Jedis jedis) {
        System.out.println("exists 和 del 的使用");
        jedis.flushAll();

        jedis.mset("key1","111","key2","222");
        boolean ret = jedis.exists("key1");
        System.out.println("ret: " + ret);
        ret = jedis.exists("key3");
        System.out.println("ret: " + ret);

    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test2(jedis);
        }
    }
}

del 可以删除多个 key,返回值是删除 key 的个数 

public class Redis {

    public static void test2(Jedis jedis) {
        System.out.println("exists 和 del 的使用");
        jedis.flushAll();

        jedis.mset("key1","111","key2","222");
        long ret = jedis.del("key1","key2");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test2(jedis);
        }
    }
}

3.3 keys 

public class Redis { 
    public static void test3(Jedis jedis) {
        System.out.println("keys 的使用");
        jedis.flushAll();

        jedis.mset("key1","111","key2","222");
        Set<String> ret = jedis.keys("key1");
        System.out.println("ret: " + ret);

        ret = jedis.keys("*");
        System.out.println("ret: " + ret);

        ret = jedis.keys("key3");
        System.out.println("ret: " + ret);
    }
    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test3(jedis);
        }
    }
}

3.4 expire 和 ttl

使用 setex 直接设置 key 的同时指定过期时间,单位为秒

public class Redis {
    public static void test4(Jedis jedis) {
        System.out.println("expire 和 ttl 的使用");
        jedis.flushAll();
        
        jedis.setex("key1",10,"111");
        long ret = jedis.ttl("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test4(jedis);
        }
    }
}

3.5 type

public class Redis {
    public static void test5(Jedis jedis) {
        System.out.println("type 的使用");
        jedis.flushAll();

        jedis.set("key1","111");
        System.out.println(jedis.type("key1"));

        jedis.lpush("key2","a","b","c");
        System.out.println(jedis.type("key2"));

        jedis.hset("key3","name","zhangsan");
        System.out.println(jedis.type("key3"));

        jedis.sadd("key4","a","a","a");
        System.out.println(jedis.type("key4"));

        jedis.zadd("key5",90,"zhangsan");
        System.out.println(jedis.type("key5"));
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");

        try (Jedis jedis = jedisPool.getResource()){
            test5(jedis);
        }
    }
}

4.字符串操作

4.1 mget 和 mset

public class RedisString {
    public static void test1(Jedis jedis) {
        System.out.println("mget 和 mset 的使用");
        jedis.flushAll();

        jedis.mset("key1","111","key2","222");
        List<String> ret = jedis.mget("key1","key2");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {

            test1(jedis);
        }
    }
}

4.2 append 

public class RedisString {
    public static void test2(Jedis jedis) {
        System.out.println("append 的使用");
        jedis.flushAll();

        jedis.set("key1","111");
        jedis.append("key1","aaa");

        String ret = jedis.get("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {

            test2(jedis);
        }
    }
}

4.3 getrange 和 setrange

public class RedisString {
    public static void test3(Jedis jedis) {
        System.out.println("getrange 和 setrange 的使用");
        jedis.flushAll();

        jedis.set("key1","abcdefg");
        String ret = jedis.getrange("key1",0,-1);
        System.out.println("ret: " + ret);

        jedis.setrange("key1",1,"111");
        ret = jedis.get("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {

            test3(jedis);
        }
    }
}

4.4 incr 和 decr

public class RedisString {
    public static void test4(Jedis jedis) {
        System.out.println("incr 和 decr 的使用");
        jedis.flushAll();

        jedis.set("key1","1");
        long ret = jedis.incr("key1");
        System.out.println("ret: " + ret);

        ret = jedis.decr("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {

            test4(jedis);
        }
    }
}

5.列表操作 

5.1 lpush 和 lpop 和 lrange

public class RedisList {
    public static void test1(Jedis jedis) {
        System.out.println("lpush 和 lpop 和 lrange 的使用");
        jedis.flushAll();

        jedis.lpush("key1","a","b","c");
        List<String> ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);

        String value = jedis.lpop("key1");
        System.out.println("value: "+ value);

        ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test1(jedis);
        }
    }

}

5.2 rpush 和 rpop

public class RedisList {
    public static void test2(Jedis jedis) {
        System.out.println("rpush 和 rpop  的使用");
        jedis.flushAll();

        jedis.rpush("key1","a","b","c");
        List<String> ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);

        String value = jedis.rpop("key1");
        System.out.println("value: "+ value);

        ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test2(jedis);
        }
    }

}

5.3 blpop 和 brpop

public class RedisList {
    public static void test3(Jedis jedis) {
        System.out.println("blpop 和 brpop 的使用");
        jedis.flushAll();

        jedis.lpush("key1","a","b","c");
        List<String> ret = jedis.blpop(0,"key1");
        System.out.println("ret: " + ret);

        ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);

        ret = jedis.brpop(0,"key1");
        System.out.println("ret: " + ret);

        ret = jedis.lrange("key1",0,-1);
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test3(jedis);
        }
    }

}

5.4 llen

public class RedisList {
    public static void test4(Jedis jedis) {
        System.out.println("llen 的使用");
        jedis.flushAll();

        jedis.lpush("key1","a","b","c");
        long ret = jedis.llen("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test4(jedis);
        }
    }
}

6.哈希表操作 

6.1 hset 和 hget

public class RedisHash {
    public static void test1(Jedis jedis) {
        System.out.println("hset 和 hget 的使用");
        jedis.flushAll();

        jedis.hset("key1","f1","111");
        HashMap<String,String> map = new HashMap<>();
        map.put("f2","222");
        map.put("f3","333");
        jedis.hset("key1",map);

        List<String> ret = jedis.hmget("key1","f1","f2","f3");
        System.out.println("ret: " + ret);

        String value = jedis.hget("key1","f4");
        System.out.println("value: " + value);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test1(jedis);
        }
    }
}

6.2 hexists 和 hdel  

public class RedisHash {
    public static void test2(Jedis jedis) {
        System.out.println("hexists 和 hdel 的使用");
        jedis.flushAll();

        jedis.hset("key1","f1","111");
        HashMap<String,String> map = new HashMap<>();
        map.put("f2","222");
        map.put("f3","333");
        jedis.hset("key1",map);

        boolean ret = jedis.hexists("key1","f1");
        System.out.println("ret: " + ret);

        jedis.hdel("key1","f1");
        ret = jedis.hexists("key1","f1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test2(jedis);
        }
    }
}

6.3 hkeys 和 hvals

public class RedisHash {
    public static void test3(Jedis jedis) {
        System.out.println("hkeys 和 hvals 的使用");
        jedis.flushAll();

        jedis.hset("key1","f1","111");
        HashMap<String,String> map = new HashMap<>();
        map.put("f2","222");
        map.put("f3","333");
        jedis.hset("key1",map);

        Set<String> ret = jedis.hkeys("key1");
        System.out.println("ret: " + ret);

        List<String> values = jedis.hvals("key1");
        System.out.println("values: " + values);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test3(jedis);
        }
    }
}

7.集合操作

7.1 sadd 和 smembers

public class RedisSet {
    public static void test1(Jedis jedis) {
        System.out.println("sadd 和 smembers 的使用");
        jedis.flushAll();

        jedis.sadd("key1","aaa","bbb","ccc");
        Set<String> ret = jedis.smembers("key1");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()) {
            test1(jedis);
        }
    }
}

7.2 srem 和 sismember

public class RedisSet {
    public static void test2(Jedis jedis) {
        System.out.println("srem 和 sismember 的使用");
        jedis.flushAll();

        jedis.sadd("key1","aaa","bbb","ccc");
        boolean ret = jedis.sismember("key1","aaa");
        System.out.println("ret: " + ret);

        jedis.srem("key1","aaa");
        ret = jedis.sismember("key1","aaa");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()) {
            test2(jedis);
        }
    }
}

7.3 scard 和 spop

public class RedisSet {
    public static void test3(Jedis jedis) {
        System.out.println("scard 和 spop 的使用");
        jedis.flushAll();

        jedis.sadd("key1","aaa","bbb","ccc");
        long ret = jedis.scard("key1");
        System.out.println("ret: " + ret);

        String value = jedis.spop("key1");
        System.out.println("value: " + value);

        Set<String> tmp = jedis.smembers("key1");
        System.out.println("tmp: " + tmp);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()) {
            test3(jedis);
        }
    }
}

7.4 sinter 和 sinterstore

public class RedisSet {
    public static void test4(Jedis jedis) {
        System.out.println("sinter 和 sinterstore 的使用");
        jedis.flushAll();

        jedis.sadd("key1","aaa","bbb","ccc");
        jedis.sadd("key2","aaa","bbb","ddd");
        Set<String> ret = jedis.sinter("key1","key2");
        System.out.println("ret: " + ret);

        jedis.sinterstore("key3","key1","key2");
        ret = jedis.smembers("key3");
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis = jedisPool.getResource()) {
            test4(jedis);
        }
    }
}

8.有序集合操作

8.1 zadd 和 zrange

public class RedisZset {
    public static void test1(Jedis jedis) {
        System.out.println("zadd 和 zrange 的使用");
        jedis.flushAll();

        jedis.zadd("key1",90,"zhangsan");
        jedis.zadd("key1",60,"lisi");
        jedis.zadd("key1",88,"wangwu");
        List<String> ret = jedis.zrange("key1",0,-1);
        System.out.println("ret: " + ret);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test1(jedis);
        }
    }
}

8.2 zrem 和 zcard 

public class RedisZset {
    public static void test2(Jedis jedis) {
        System.out.println("zrem 和 zcard 的使用");
        jedis.flushAll();

        jedis.zadd("key1",90,"zhangsan");
        jedis.zadd("key1",60,"lisi");
        jedis.zadd("key1",88,"wangwu");
        long ret = jedis.zcard("key1");
        System.out.println("ret: " + ret);

        ret = jedis.zrem("key1","zhangsan");
        System.out.println("ret: " + ret);

        List<Tuple> values = jedis.zrangeWithScores("key1",0,-1);
        System.out.println("values: " + values);
    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test2(jedis);
        }
    }
}

8.3 zscore 和 zrank

public class RedisZset {
    public static void test3(Jedis jedis) {
        System.out.println("zscore 和 zrank 的使用");
        jedis.flushAll();

        jedis.zadd("key1",90,"zhangsan");
        jedis.zadd("key1",60,"lisi");
        jedis.zadd("key1",88,"wangwu");
        double ret = jedis.zscore("key1","zhangsan");
        System.out.println("ret: " + ret);

        long values = jedis.zrank("key1","zhangsan");
        System.out.println("values: " + values);

    }

    public static void main(String[] args) {
        JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis = jedisPool.getResource()) {
            test3(jedis);
        }
    }
}

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

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

相关文章

如何大幅减少 Vue.js 中的包大小和加载时间,提升用户体验!

大家好,我是CodeQi! 一位热衷于技术分享的码仔。 你知道吗,根据Google 的一项研究,如果网站加载时间超过 3 秒,53% 的移动用户会离开该网站? 性能优化是一个经常讨论的话题,但很多开发人员并不关心提高应用的速度。 在前端开发中,优化包大小和加载时间对于提升用户体…

数据结构--二叉树相关题2(OJ)

1.比较对称二叉树&#xff08;镜像二叉树&#xff09; 二叉树相关题1中第二题的变形题。先去看1哦&#xff01; 左子树和右子树比较 bool _isSymmetric(struct TreeNode* p, struct TreeNode* q) {if (p NULL && q NULL)return true;//如果两个都为空则是相等的if …

【Arduino】XIAOFEIYU(TM)实验ESP32使用霍尔传感器(图文)

霍尔传感器是一种可以测量磁力变化的传感器&#xff0c;今天XIAOFEIYU就来测试一下ESP32使用霍尔传感器。 霍尔传感器&#xff1a;正负极加一个数据接口。 将传感器与ESP32进行电路连接&#xff1a; 编写程序&#xff1a; #define SIGNAL_PIN 33int value 0; // 存储传感…

【Spring Boot】关系映射开发(二):一对多映射

《JPA 从入门到精通》系列包含以下文章&#xff1a; Java 持久层 API&#xff1a;JPA认识 JPA 的接口JPA 的查询方式基于 JPA 开发的文章管理系统&#xff08;CRUD&#xff09;关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射关系映射开发&#xff08;二&#…

如何在Spring Boot中实现分布式任务调度?

文章目录 引言一、分布式任务调度的基本原理二、Spring Boot与分布式任务调度1. 使用Quartz实现分布式任务调度2. 使用Elastic-Job实现分布式任务调度 三、常见问题与解决方案结论 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;…

食品行业制氮机的应用范围解析

在食品行业中&#xff0c;保障食品的品质和安全性是每一个企业所追求的核心目标。制氮机作为一种重要的辅助设备&#xff0c;其在食品行业中的作用不容忽视。 一、保障食品质量与安全性 制氮机通过物理方法从空气中分离出高纯度氮气&#xff0c;为食品提供了一个无氧环境。这一…

C++模板元编程(二)——完美转发

完美转发指的是函数模板可以将自己的参数“完美”地转发给内部调用的其它函数。所谓完美&#xff0c;即不仅能准确地转发参数的值&#xff0c;还能保证被转发参数的左、右值属性不变。 文章目录 场景旧的方法新的方法内部实现参考文献 场景 思考下面的代码&#xff1a; templ…

哈喽GPT-4o,程序员如何通过GPT-4o提高工作效率

目录 一、编写代码Prompt&#xff1a;请用Java语言编写一个二分查找的样例 二、修正代码错误、代码优化Prompt&#xff1a;我们上传一张华为OD算法题的题目描述&#xff0c;再给它我的Java解题代码&#xff0c;问问它有什么问题&#xff1f; 三、解读代码功能、代码翻译Prompt&…

Qt 网络编程 网络信息获取操作

学习目标&#xff1a;网络信息获取操作 前置环境 运行环境:qt creator 4.12 学习内容 一、Qt 网络编程基础 Qt 直接提供了网络编程模块,包括基于 TCP/IP 的客户端和服务器相关类,如 QTcpSocket/QTcpServer 和 QUdpSocket,以及实现 HTTP、FTP 等协议的高级类,如 QNetworkRe…

flask缓存、信号的使用

【 一 】flask-ache ​ 它为 Flask 应用程序提供了缓存支持。缓存是 Web 应用程序中非常常见的做法&#xff0c;用于存储频繁访问但不太可能经常更改的数据&#xff0c;以减少对数据库或其他慢速存储系统的访问&#xff0c;从而提高应用程序的性能和响应速度。 ​ Flask-Cach…

程序员必知的 89 个操作系统核心概念

1. 操作系统&#xff08;Operating System&#xff0c;OS&#xff09;&#xff1a;是管理计算机硬件与软件资源的系统软件&#xff0c;同时也是计算机系统的内核与基石。操作系统需要处理管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系…

Stable Diffusion 【模型推荐】没有最强,只有更强!高清画质!电影光效版SD1.5人像摄影大模型《他和她 2》

今天带来了一款SD1.5大模型——《他和她 2》电影光效版SD1.5人像摄影大模型。该模型经过家叔马丁Mr_M大佬的优化升级后&#xff0c;把SD1.5的影像光效推上了全新的高度&#xff01;根据大佬的描述&#xff0c;该模型具有更强大的细节表现&#xff0c;更细腻的表面肌理&#xff…

揭秘SmartEDA:电路仿真软件如何贯穿课前课中课后,助力电子学习新纪元!

在电子设计与自动化的学习道路上&#xff0c;一款强大的电路仿真软件往往能为学生们带来事半功倍的效果。今天&#xff0c;我们就来深入探讨一下SmartEDA这款电路仿真软件在课前、课中、课后的全方位应用&#xff0c;看看它如何助力我们的电子学习步入新纪元&#xff01; 1、课…

水果商城系统 SpringBoot+Vue

1、技术栈 技术栈&#xff1a;SpringBootVueMybatis等使用环境&#xff1a;Windows10 谷歌浏览器开发环境&#xff1a;jdk1.8 Maven mysql Idea 数据库仅供学习参考 【已经答辩过的毕业设计】 项目源码地址 2、功能划分 3、效果演示

下载安装JavaFX及解决报错:缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序|Eclipse

目录 1.下载并解压 2.Eclipse配置 3.报错问题 解决方法1&#xff1a;将javaSE更改到9以下 解决方法2&#xff1a; 使用module-info.java配置解决 1.下载并解压 JavaFX下载地址&#xff1a;JavaFX - Gluon 选择合适自己电脑配置的sdk版本下载 打不开网页的参考这个博客&…

泛微开发修炼之旅--35关于基于页面扩展和自定义按钮实现与后端交互调用的方法

文章链接&#xff1a;35关于基于页面扩展和自定义按钮实现与后端交互调用的方法

【手写数据库内核组件】0201 哈希表hashtable的实战演练,多种非加密算法,hash桶的冲突处理,查找插入删除操作的代码实现

hash表原理与实战 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 hash表…

如果国产BI工具也有顶流,它们一定会上榜

在数据驱动的今天&#xff0c;商业智能&#xff08;BI&#xff09;工具已成为企业不可或缺的助手&#xff0c;它们通过强大的数据处理和分析能力&#xff0c;帮助企业洞察市场趋势&#xff0c;优化运营决策。如果BI工具界也有“顶流”&#xff0c;那么奥威BI、帆软BI&#xff0…

世优科技获新锐商业价值奖,数字人阿央入选北京市元宇宙“名人”

2024全球经济大会元宇宙创新发展论坛暨2024第九届“创客中国”元宇宙中小企业创新创业大赛&#xff0c;由工业和信息化部网络安全产业发展中心、北京市经济和信息化局、石景山区人民政府、首钢集团有限公司主办&#xff0c;围绕元宇宙底层技术端和产业应用端两个方向&#xff0…

ROS2 分布式 及 ssh远程控制 和 上传下载文件或文件夹

问题1. 多台计算机连接同一wifi后 &#xff0c;运行ROS2的小乌龟案例&#xff0c;自己的计算机&#xff0c;无法控制其他电脑的小乌龟 按照正常的情况来说&#xff0c;ROS2是DDS的自发现通信机制&#xff0c;只要处在同一wifi网络中&#xff0c; A计算机执行启动小乌龟的命…