redis的客户端操作

文章目录

  • 前言
  • Java客户端Jedis
    • 准备工作
    • 引入Jedis
    • Jedis的基本使用方法
      • String类型的操作
      • List类型操作
      • Hash类型操作
      • Set类型操作
      • Zet类型的操作
  • JavaSpring客户端
    • 创建项目引入SpringDataRedis
    • 配置 redis 服务地址
    • 创建 Controller
    • 具体实例

前言

Redis是用单线程来处理多个客户端的访问,因此作为Redis的开发和运维人员需要了解Redis服务端和客户端的通信协议,以及主流编程语言的Redis客户端使用方法,同时还需要了解客户端管理的相应API以及开发运维中可能遇到的问题。

Java客户端Jedis

准备工作

在进行java客户端的连接之前,我们要解决一个访问的问题,我们怎么才能访问到linux云服务器的redis,正常情况下,有人会说,我们直接开放redis的接口不就好了,答案是不能,因为如果我们开放了接口,那么就会让不怀好意的人根据我们的接口进行攻击,这样我们的内存就有可能爆炸。
所以我们只能外网访问。我下面提供了两种思路:

  1. 直接让java程序,也在linux上运行。
  2. 配置ssh端口转发,把云服务器的redis端口映射到本机上。
    在这里插入图片描述
    具体的配置请看以下操作。
    在这里插入图片描述
    配置好之后,我们可以代开cmd,看看映射端口有没有
    在这里插入图片描述
    这样我们准备工作就做完了。

引入Jedis

创建一个maven项目,引入Jedis依赖

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

Jedis的基本使用方法

public class RedisDemoGeneric {
    public static void test1(Jedis jedis){
        System.out.println("get 和 set的使用");
        //先清空数据库,要避免上一组测试的残留数据影响到下一组测试的结果
        jedis.flushAll();
        jedis.set("key","111");
        jedis.set("key2","222");
        SetParams params =new SetParams();
        params.ex(10);
        params.xx();
        jedis.set("key","333",params);
        String value= jedis.get("key");
        System.out.println("value= "+value);
    }
    public  static  void test2(Jedis jedis){
        System.out.println("exist 和 del");
        jedis.flushAll();
        jedis.set("key","111");
        jedis.set("key2","222");
        Boolean result=jedis.exists("key");
        System.out.println("result="+result);
        long result2=  jedis.del("key");
        System.out.println(result2);
        result=jedis.exists("key");
        System.out.println("result="+result);
        result2=jedis.del("key","key2","key3");
        System.out.println(result2);
    }
    public static void test3(Jedis jedis){
        System.out.println("keys");
        jedis.flushAll();
        jedis.set("key1","111");
        jedis.set("key2","111");
        jedis.set("key3","111");
        jedis.set("key4","111");
        Set<String>keys= jedis.keys("*");
        System.out.println(keys);
    }
    public static void test4(Jedis jedis){
        System.out.println("expire 和 ttl");
        jedis.flushAll();
        jedis.set("key","111");
        jedis.expire("key",10);
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        long time=jedis.ttl("key");

        System.out.println("time =" +time);
    }
    public static void test5(Jedis jedis){
        System.out.println("type");
        jedis.set("key","111");
        String type=jedis.type("key");
        System.out.println(type);

        jedis.lpush("key2","111","222","333");
        type=jedis.type("key2");
        System.out.println("type :"+type);

        jedis.hset("key3","f1","1111");
        type=jedis.type("key3");
        System.out.println("type :"+type);

        jedis.sadd("key4","111","222","333");
        type=jedis.type("key4");
        System.out.println("type :"+type);

        jedis.zadd("key5",10,"zhangsan");
        type=jedis.type("key5");
        System.out.println("type :"+type);

    }
    public static void main(String[] args) {
        //1.连接到redis服务器上
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
//            //redis的各种命令,就都对应到jedis对象的各种方法
//           String pong= jedis.ping();
//            System.out.println(pong);
//            test1(jedis);
//            test2(jedis);
//            test3(jedis);
//            test4(jedis);
            test5(jedis);
        }


    }
}

String类型的操作

public class RedisDemoString {
    public static void test1(Jedis jedis){
        jedis.flushAll();
        jedis.mset("key1","111","key2","222","key3","333");
       List<String>valve= jedis.mget("key1","key2","key3","key300");
        System.out.println("valves ="+valve);
    }
    public static void test2(Jedis jedis){
        System.out.println("getrange 和 setrange");
        jedis.flushAll();
        jedis.set("key","abcdefghijk");
        String result= jedis.getrange("key",2,5);
        System.out.println("result:"+result);
        jedis.setrange("key",2,"xyz");
        String value=jedis.get("key");
        System.out.println("value="+value);
    }
    public  static void test3(Jedis jedis){
        System.out.println("append");
        jedis.flushAll();
        jedis.set("key","abcdefg");
        jedis.append("key","ghij");
        String value=jedis.get("key");
        System.out.println("value"+value);
    }
    public static void test4(Jedis jedis){
        System.out.println("incr 和 decr");
        jedis.flushAll();
        jedis.set("key","100");
        long result=jedis.incr("key");
        System.out.println(result);

        String value=jedis.get("key");
        System.out.println(value);

        result=jedis.decr("key");
        value=jedis.get("key");
        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);
//            test2(jedis);
//            test3(jedis);
            test4(jedis);
        }
    }
}

List类型操作

public class RedisDemoList {
    public static void test1(Jedis jedis){
        System.out.println("lpush 和 lrange");
        jedis.flushAll();
        jedis.lpush("key","111","222","333");
        List<String>result=jedis.lrange("key",0,-1);
        System.out.println(result);
    }
    public static void test2(Jedis jedis){
        System.out.println("rpush 和 lrange");
        jedis.flushAll();
        jedis.rpush("key","111","222","333");
        List<String>result=jedis.lrange("key",0,-1);
        System.out.println(result);
    }
    public static void  test3(Jedis jedis){
        System.out.println("lpop");
        jedis.flushAll();
        jedis.rpush("key","111","222","333");

        String result =jedis.lpop("key");
        System.out.println(result);

        result =jedis.lpop("key");
        System.out.println(result);

        result =jedis.lpop("key");
        System.out.println(result);

        result =jedis.lpop("key");
        System.out.println(result);
    }
    public  static void  test4(Jedis jedis){
        System.out.println("rpop");
        jedis.flushAll();
        jedis.rpush("key","111","222","333");

        String result =jedis.rpop("key");
        System.out.println(result);

        result =jedis.rpop("key");
        System.out.println(result);

        result =jedis.rpop("key");
        System.out.println(result);


        result =jedis.rpop("key");
        System.out.println(result);

        result =jedis.rpop("key");
        System.out.println(result);

    }
    public  static void test5(Jedis jedis){
        System.out.println("blpop");
        jedis.flushAll();
        //返回的结果是一个二元组,一个是从哪个key 对应的list中删除的,一个是删除的元素是什么。
        List<String> result=jedis.blpop(100,"key");
        System.out.println("result[0] "+result.get(0));
        System.out.println("result[1] "+result.get(1));
    }
    public static  void test6(Jedis jedis){
        System.out.println("len");
        jedis.flushAll();
        jedis.rpush("key","111","222","333");
        long len =jedis.llen("key");
        System.out.println(len);
    }
    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try(Jedis jedis=jedisPool.getResource()){
//            test1(jedis);
//            test2(jedis);
//            test3(jedis);
//                test5(jedis);
            test6(jedis);
        }
    }
}

Hash类型操作

public class RedisDemoHash {
    public static void test1(Jedis jedis){
        System.out.println("hset 和 hget");
        jedis.flushAll();
        jedis.hset("key","f1","111");
        Map<String,String> fields=new HashMap<>();
        fields.put("f2","222");
        fields.put("f3","333");
        jedis.hset("key",fields);

        String result=jedis.hget("key","f1");
        System.out.println(result);

        result=jedis.hget("key","f2");
        System.out.println(result);

        result=jedis.hget("key","f100");
        System.out.println(result);

    }
    public static void test2(Jedis jedis){
        System.out.println("hexist");
        jedis.flushAll();
        jedis.hset("key","f1","111");
        jedis.hset("key","f2","111");
        jedis.hset("key","f3","111");
        Boolean result= jedis.hexists("key","f1");
        System.out.println(result);
    }
    public  static void test3(Jedis jedis){
        System.out.println("hdel");
        jedis.flushAll();
        jedis.hset("key","f1","111");
        jedis.hset("key","f2","111");
        jedis.hset("key","f3","111");
        long result =jedis.hdel("key","f1","f2");
        System.out.println(result);
    }
    public static  void test4(Jedis jedis){
        System.out.println("hkeys 和 hvals");
        jedis.flushAll();
        jedis.hset("key","f1","111");
        jedis.hset("key","f2","111");
        jedis.hset("key","f3","111");
        Set<String>fileds= jedis.hkeys("key");
        List<String>vals=jedis.hvals("key");
        System.out.println("field +"+fileds);
        System.out.println("vals "+vals);

    }
    public static void  test5(Jedis jedis){
        System.out.println("hmget 和 hmset");
        jedis.flushAll();
        Map<String,String>map=new HashMap<>();
        map.put("f1","111");
        map.put("f2","111");
        map.put("f3","111");
        jedis.hmset("key",map);
       List<String>values= jedis.hmget("key","f1","f2","f3");
        System.out.println(values);
    }
    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis jedis=jedisPool.getResource()){
//            test1(jedis);
//            test3(jedis);
//            test4(jedis);
            test5(jedis);
        }

    }
}

Set类型操作

public class RedisDemoSet {
    public static  void test1(Jedis jedis){
        System.out.println("sadd 和 smembers");
        jedis.flushAll();
        jedis.sadd("key","111","222","333");
        Set<String> result=jedis.smembers("key");
        System.out.println(result);
    }
    public  static void  test2(Jedis jedis){
        System.out.println("sismember");
        jedis.sadd("key","111","222","333");
        Boolean result=jedis.sismember("key","111");
        System.out.println("result "+result);
    }
    public static  void  test3(Jedis jedis){
        System.out.println("scard");
        jedis.flushAll();
        jedis.sadd("key","111","222","333");
        long result=jedis.scard("key");
        System.out.println(result);
    }
    public static void test4(Jedis jedis){
        jedis.flushAll();
        System.out.println("spop");
        jedis.sadd("key","111","222","333","444","555");
        String result =jedis.spop("key");
        System.out.println(result);

    }
    public  static void test5(Jedis jedis){
        System.out.println("sinter");
        jedis.flushAll();
        jedis.sadd("key1","111","222","333");
        jedis.sadd("key2","111","222","444");
       Set<String> result=jedis.sinter("key1","key2");
        System.out.println(result);
    }
    public static void  test6(Jedis jedis){
        System.out.println("sinterstore");
        jedis.flushAll();
        jedis.sadd("key1","111","222","333");
        jedis.sadd("key2","111","222","444");
        long len =jedis.sinterstore("key3","key1","key2");
        System.out.println(len);
        Set<String> reseult=jedis.smembers("key3");
        System.out.println("result"+reseult);

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

Zet类型的操作

public class RedisDemoZet {
    public static void test1(Jedis jedis){
        System.out.println("zadd 和 zrange");
        jedis.flushAll();
        jedis.zadd("key",10,"zhangsan");
        Map<String,Double> map= new HashMap<>();
        map.put("lisi",20.0);
        map.put("wangwu",30.0);
        jedis.zadd("key",map);
        List<String> members= jedis.zrange("key",0,-1);
        System.out.println(members);

        List<Tuple> memberWithScore=  jedis.zrangeWithScores("key",0,-1);
        System.out.println(memberWithScore);

        String member=memberWithScore.get(0).getElement();
        Double score=memberWithScore.get(1).getScore();

        System.out.println("member :" + member+","+ score +"+score");

    }
    public static void  test2(Jedis jedis){
        System.out.println("zcard");
        jedis.flushAll();
        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");
        long count=jedis.zcard("key");
        System.out.println(count);

    }
    public  static void  test3(Jedis jedis){
        System.out.println("zrem");
        jedis.flushAll();
        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");
        long n= jedis.zrem("key","zhangsan");
        System.out.println(n);
        List<Tuple> memberWithScore=  jedis.zrangeWithScores("key",0,-1);
        System.out.println(memberWithScore);
    }
    public  static void test4(Jedis jedis){
        System.out.println("zscore");
        jedis.flushAll();
        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");
        Double score=jedis.zscore("key","zhangsan");
        System.out.println(score);

    }
    public static void  test5(Jedis jedis){
        System.out.println("zrank");
        jedis.flushAll();
        jedis.zadd("key",10,"zhangsan");
        jedis.zadd("key",20,"lisi");
        jedis.zadd("key",30,"wangwu");
        Long rank=  jedis.zrank("key","zhangsan");
        System.out.println(rank);
    }
    public static void main(String[] args) {
        JedisPool jedisPool=new JedisPool("tcp://127.0.0.1:8888");
        try (Jedis  jedis=jedisPool.getResource()){
//        test1(jedis);
//        test2(jedis);
//            test3(jedis);
//            test4(jedis);
            test5(jedis);
        }


    }
}

JavaSpring客户端

创建项目引入SpringDataRedis

在这里插入图片描述

配置 redis 服务地址

spring:
  redis:
    host: 127.0.0.1
    port: 8888

创建 Controller

public class MyController {
    @Autowired
    private StringRedisTemplate redisTemplate;
    }

这里面的StringRedisTemplate,实际上存放着操作redis的接口。
在这里插入图片描述

具体实例

@RestController

public class MyController {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @GetMapping("/testString")
    public String testString(){
        redisTemplate.opsForValue().set("key","111");
        redisTemplate.opsForValue().set("key2","222");
        redisTemplate.opsForValue().set("key3","333");

        String value=redisTemplate.opsForValue().get("key");
        System.out.println("value "+value);
        return "OK";
    }
    @GetMapping("/testlist")
    @ResponseBody
    public  String testList(){
        //先清除缓存

        redisTemplate.execute((RedisConnection connection)->{
            //execute要求回调方法必须写return 语句。
            //这个回调返回的对象化,就会作为execute本身的返回值。
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForList().leftPush("key","111");
        redisTemplate.opsForList().leftPush("key","222");
        redisTemplate.opsForList().leftPush("key","333");

        String value=redisTemplate.opsForList().rightPop("key");
        System.out.println("value " +value);

        value=redisTemplate.opsForList().rightPop("key");
        System.out.println("value " +value);
        value=redisTemplate.opsForList().rightPop("key");
        System.out.println("value " +value);
        return "Ok";


    }
    @GetMapping("/testSet")
    @ResponseBody
    public  String testSet(){
        //先清除缓存

        redisTemplate.execute((RedisConnection connection)->{
            //execute要求回调方法必须写return 语句。
            //这个回调返回的对象化,就会作为execute本身的返回值。
            connection.flushAll();
            return null;
        });

        redisTemplate.opsForSet().add("key", "aaa", "bbb", "ccc");
        Set<String> result=redisTemplate.opsForSet().members("key");
        System.out.println("result: "+ result);

        boolean ok = redisTemplate.opsForSet().isMember("key", "aaa");
        System.out.println(ok);

        redisTemplate.opsForSet().remove("key", "aaa");
        long n = redisTemplate.opsForSet().size("key");

        return  "ok";
    }
    @GetMapping("testHash")
    @ResponseBody
    public String testHash(){
        redisTemplate.execute((RedisConnection connection) ->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForHash().put("key","f1","111");
        redisTemplate.opsForHash().put("key","f2","111");
        redisTemplate.opsForHash().put("key","f3","111");
        String value=(String) redisTemplate.opsForHash().get("key","f1");
        System.out.println("value: "+value);

        Boolean exists=redisTemplate.opsForHash().hasKey("key","f1");
        System.out.println("exists: "+exists);

        redisTemplate.opsForHash().delete("key","f1","f2");
        Long size=redisTemplate.opsForHash().size("key");
        System.out.println("size:" +size);
        return "ok";
    }
    @GetMapping("testZet")
    @ResponseBody
    public String testZSet(){
        redisTemplate.execute((RedisConnection connection) ->{
            connection.flushAll();
            return null;
        });
        redisTemplate.opsForZSet().add("key","zhangsan",10);
        redisTemplate.opsForZSet().add("key","lisi",10);
        redisTemplate.opsForZSet().add("key","wangwu",10);
        Set<String> member= redisTemplate.opsForZSet().range("key",0,-1);
        System.out.println(member);

        Set<ZSetOperations.TypedTuple<String>> memberWithScores= redisTemplate.opsForZSet().rangeWithScores("key",0,-1);
        System.out.println(memberWithScores);

        Double score=redisTemplate.opsForZSet().score("key","zhangsan");
        System.out.println("score: "+score);

        redisTemplate.opsForZSet().remove("key","zhangsan");

        Long size=redisTemplate.opsForZSet().size("key");
        System.out.println("size: "+size);

        Long rank =redisTemplate.opsForZSet().rank("key","lisi");
        System.out.println("rank :"+rank);

        return "ok";
    }
}

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

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

相关文章

【linux深入剖析】深入理解软硬链接 | 动静态库的制作以及使用

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.理解软硬链接1.1 操作观…

Linux_网络编程套接字_2

文章目录 一、预备知识认识端口认识TCP协议认识UDP协议网络字节序 二、socket编程接口1.socket常见API2.socket结构总结 3.其他接口1.IP地址《》整数 inet_addr等等2.读取报文 - recvfrom 三、简单的UDP网络程序 - 聊天室1.源代码展示 四、TCP1.编写TCP服务器程序1.创建套接字 …

三行命令解决Ubuntu Linux联网问题

本博客中Ubuntu版本为23.10.1最新版本&#xff0c;后续发现了很多问题我无法解决&#xff0c;已经下载了另外一个版本22.04&#xff0c;此版本自带网络 一开始我找到官方文档描述可以通过命令行连接到 WiFi 网络&#xff1a;https://cn.linux-console.net/?p10334#google_vig…

网络协议——RSTP(快速生成树)与MSTP(多实例生成树)

一. RSTP 1. STP的不足 1、依靠计时器超时的方式进行收敛导致它的收敛时间需要30到50秒 2、端口状态和端口角色没有细致区分&#xff0c;指导数据转发依靠的不是端口状态而是端口所扮演角色。 3、如果拓扑频繁变化导致用户通信质量差&#xff0c;甚至通信中断&#xf…

【THM】What the Shell?(什么是壳?)-初级渗透测试

什么是shell? 在我们深入了解发送和接收 shell 的复杂性之前,了解 shell 的实际含义非常重要。用最简单的术语来说,shell 是我们与命令行环境 (CLI) 交互时使用的工具。换句话说,Linux中常见的 bash 或 sh 程序都是 shell 的例子,Windows 上的 cmd.exe 和 Powershell 也是…

简单了解JVM

一.JVM简介 jvm及Java virtual machineJava虚拟机&#xff0c;它是一个虚构出来的计算机&#xff0c;一种规范。其实抛开这么专业的句子不说&#xff0c;就知道 JVM 其实就类似于一台小电脑运行在 windows 或者 linux 这些操作系统环境下即可。它直接和操作系统进行交互&#…

BUUCTF---misc--snake

1.下载附件&#xff0c;解压后是一张蛇的图片 2.查看属性&#xff0c;没有有用信息&#xff0c;用winhex打开&#xff0c;在文末找到了PK字样&#xff0c;图片被压缩了。 3.用binwalk命令&#xff0c;查看&#xff0c;有压缩包 4.用foremost命令分离&#xff0c;将文件保存到te…

repl_backlog原理

2.2.3.repl_backlog原理 master怎么知道slave与自己的数据差异在哪里呢? 这就要说到全量同步时的repl_baklog文件了。 这个文件是一个固定大小的数组&#xff0c;只不过数组是环形&#xff0c;也就是说角标到达数组末尾后&#xff0c;会再次从0开始读写&#xff0c;这样数组…

基因查询常用汇总网(自备)

目录 NCBI genecards HPA数据库 gepia2 cbioporta kmplot生存分析 ualcan ​​​​​​​ 进行一些常用的基因功能蛋白及表达的网站查询汇总&#xff0c;方便个人使用 NCBI National Center for Biotechnology Information (nih.gov) 查询基因的曾用名和其他ID&…

kubernetes有ingress-controler以及没有外部loadbalancer 的情况下使用istio-gateway.

那就配置一个ingress-使用已有ingress-controler代理istio-gateway class创建的gateway svc来公开。

day8 nest商业项目初探·四(java转ts全栈/3R教室)

背景&#xff1a;从头一点点学起太慢了&#xff0c;直接看几个商业项目吧&#xff0c;看看根据Java的经验&#xff0c;自己能看懂多少&#xff0c;然后再系统学的话也会更有针对性。今天看下一个项目 【加拿大 | 7.8w】TS全栈&#xff1a;Youni校园社交网络 (2022.10) - 3R酷 |…

嵌入式网线连接——笔记本电脑设置

一、需求 我们调试很多设备经常需要用到网线去调试&#xff0c;当然主流是USB&#xff0c;和网线。 二、笔记本电脑端设备 有网口的&#xff0c;非常方便&#xff0c;如果没有网口&#xff0c;则需要用到USB转网口 连接指示灯&#xff1a; 绿色&#xff1a;灯亮表示连接正常…

Python+Selenium+Unittest 之Unittest5(常用装饰器-跳过用例执行)

目录 1、unittest.skip()&#xff08;跳过该装饰器下的用例&#xff09; 2、unittest.skipIf()&#xff08;跳过该装饰器下判断条件为True的用例&#xff09; 3、unittest.skipUnless()&#xff08;跳过该装饰器下判断条件为False的用例&#xff09; 4、unittest.expectedF…

【java探索之旅】走进循环结构 深入解析while、for和do while的用法

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java编程秘籍 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、循环结构1.1 while循环1.2 while代码示例1.3 break1.4 continue 二、for循环2.1 基…

Cohere推出全新升级版RAG大型AI模型:支持中文,搭载1040亿参数,现开源其权重!

4月5日&#xff0c;知名类ChatGPT平台Cohere在其官方网站上发布了一款全新的模型——Command R。 据官方消息&#xff0c;Command R拥有1040亿个参数&#xff0c;并且支持包括英语、中文、法语、德语在内的10种语言。这一模型的显著特点之一在于其对内置的RAG&#xff08;检索增…

网工内推 | 网安、AGV测试网络工程师,厂商认证优先,应届可投

01 神州数码 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1、负责国内外主流安全产品&#xff08;如防火墙、入侵防御、WAF、安全审计等&#xff09;的上线安装、调试、测试、割接、运维等工作。 2、能够独立进行安全类项目实施、问题排查及处理。 3、在出现网络攻…

量子城域网系列(二):量子密钥与通信系统中各层协议融合应用

写在前面。国家标准中对量子保密通信的定义&#xff1a;量子保密通信是利用QKD与其他密码技术结合形成的保密通信技术。 经过这段时间的讨论&#xff0c;我们基本上明白了量子保密通信的内涵、基础协议、技术原理等。我们知道了当前语境下的量子密钥分发网络核心是实现两点之间…

Ubuntu系统使用Docker本地部署Android模拟器并实现公网访问

文章目录 1. 虚拟化环境检查2. Android 模拟器部署3. Ubuntu安装Cpolar4. 配置公网地址5. 远程访问小结 6. 固定Cpolar公网地址7. 固定地址访问 本文主要介绍如何在Ubuntu系统使用Docker部署docker-android安卓模拟器&#xff0c;并结合cpolar内网穿透工具实现公网远程访问本地…

数据分析:小红书爆火赛道的内容洞察

导语 近期&#xff0c;一个名为女生独立计划 的账号于今年2月29日在小红书上发布了第一条作品&#xff0c;而后的40天内&#xff0c;该账号又陆续发布16条作品&#xff0c;目前粉丝量已经达到30W。 那么短期内快速崛起的女生独立计划 内容有何突出之处&#xff1f;且听小编和…

注意力机制篇 | YOLOv8改进之清华开源ACmix:自注意力和CNN的融合 | 性能速度全面提升

前言:Hello大家好,我是小哥谈。混合模型ACmix将自注意力机制和卷积神经网络进行整合,使其同时具有自注意力机制和卷积神经网络的优点。这是清华大学、华为和北京人工智能研究院共同发布在2022年CVPR中的论文。ACmix结合了自注意力机制和卷积神经网络的优势,以提高模型的性能…