Java 操作 Redis客户端

目录

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://xiahunao.cn/news/3224272.html

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

相关文章

第5章-组合序列类型

#全部是重点知识&#xff0c;必须会。 了解序列和索引|的相关概念 掌握序列的相关操作 掌握列表的相关操作 掌握元组的相关操作 掌握字典的相关操作 掌握集合的相关操作1&#xff0c;序列和索引 1&#xff0c;序列是一个用于存储多个值的连续空间&#xff0c;每一个值都对应一…

美容师有什么话术技巧?美业人如何提升自己的销售技巧?博弈美业门店管理系统分享经验

作为一名美容师&#xff0c;有一些话术和销售技巧可以帮助你提升服务质量和销售业绩。以下是博弈美业收银系统分享的一些建议&#xff1a; 1.建立信任&#xff1a; 在与客户交流时&#xff0c;表现出真诚、友好和专业的态度。倾听客户的需求&#xff0c;并给予针对性的建议&a…

降Compose十八掌之『见龙在田』| Modifier

公众号「稀有猿诉」 原文链接 降Compose十八掌之『见龙在田』| Modifier 通过前面的文章我们学会了如何使用元素来构建和填充我们的UI页面&#xff0c;但这只完成了一半&#xff0c;元素还需要装饰&#xff0c;以及进行动画和事件响应&#xff0c;这才能生成完整的UI。这…

洛谷 数学进制 7.9

P1100 高低位交换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 代码一 #include<bits/stdc.h> using namespace std; typedef long long ll; #define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)const ll N1e510; char a[N];int main() {IOS;ll a;int b[32]…

关于Qt模型插入最后一行数据中存在未填满的项,点击导致崩溃的解决办法

在使用Qt模型视图框架的时候&#xff0c;你可能会遇见这种情况&#xff1a;给QTableView设置设置模型的时候&#xff0c;网模型里面插入数据&#xff0c;因为数据是一行一行插入的&#xff0c;即要使用model的appandRow函数&#xff0c;但有时候最后一行数据没有填满一行&#…

Java面试八股之MySQL索引B+树、全文索引、哈希索引

MySQL索引B树、全文索引、哈希索引 注意&#xff1a;B树中B不是代表二叉树&#xff08;binary&#xff09;&#xff0c;而是代表平衡&#xff08;balance&#xff09;&#xff0c;因为B树是从最早的平衡二叉树演化而来&#xff0c;但是B树不是一个二叉树。 B树的高度一般在2~…

新火种AI|OpenAI的CEO又有新动作?这次他成立了AI健康公司

作者&#xff1a;一号 编辑&#xff1a;美美 AI技术即将改变医疗健康市场。 就在前两天&#xff0c;人工智能和医疗健康领域迎来了一个重要时刻。OpenAI的CEO萨姆阿尔特曼&#xff08;Sam Altman&#xff09;与Thrive Global的CEO阿里安娜赫芬顿&#xff08;Arianna Huffing…

业务咨询方案 + IT落地方案建议设计

近期&#xff0c;在深入探索咨询方案的实施与落地路径时&#xff0c;体会到了一系列心得与启示&#xff0c;旨在为未来的项目实践提供可借鉴的蓝本。 咨询方案的精髓&#xff0c;在于“业务引领&#xff0c;IT支撑”的核心理念。所以方案的前提是在于业务的梳理&#xff1b; …

已解决 javax.xml.transform.TransformerFactoryConfigurationError 异常的正确解决方法,亲测有效!!!

已解决 javax.xml.transform.TransformerFactoryConfigurationError 异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 一、问题分析 二、报错原因 三、解决思路 四、解决方法 五、总结 博主v&#xff1a;XiaoMing_Java 博主v&#x…

淮北在选择SCADA系统时,哪些因素会影响其稳定性?

关键字:LP-SCADA系统, 传感器可视化, 设备可视化, 独立SPC系统, 智能仪表系统,SPC可视化,独立SPC系统 在选择SCADA系统时&#xff0c;稳定性是一个关键因素&#xff0c;因为它直接影响到生产过程的连续性和安全性。以下是一些影响SCADA系统稳定性的因素&#xff1a; 硬件质量…

百度文心4.0 Turbo开放,领跑国内AI大模型赛道!

百度文心4.0 Turbo开放&#xff0c;领跑国内AI大模型赛道&#xff01; 前言 文心一言大模型 就在7月5日&#xff0c;在2024世界人工智能大会 (WAIC) 上&#xff0c;百度副总裁谢广军宣布文心大模型4.0 Turbo正式向企业客户全面开放&#xff01;这一举动直接引发了业界的关注。那…

【C++知识点总结全系列 (08)】:面向对象编程OOP

这里写目录标题 1、OOP概述(1)面向对象四大特征A.抽象B.封装C.继承D.多态 (2)构造函数A.What&#xff08;什么是构造函数&#xff09;B.Why&#xff08;构造函数的作用&#xff09;C. Which&#xff08;有哪些构造函数&#xff09; (3)析构函数A.What&#xff08;什么是析构函数…

【JS|第21期】JavaScript模块化:深入解析三种文件暴露方式

日期:2024年7月6日 作者:Commas 签名:(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^ 1.01365 = 37.7834;0.99365 = 0.0255 1.02365 = 1377.4083…

全志A527 T527 android13支持usb摄像头

1.前言 我们发现usb摄像头在A527 android13上面并不能正常使用,需要支持相关的摄像头。 2.系统节点查看 我们查看系统是否有相关的节点生成,发现/dev/video相关的节点已经生成了。并没有问题,拔插正常。 3.这里我们需要查看系统层是否支持相关的相机, 我们使用命令进行…

【INTEL(ALTERA)】为什么我使用 PIO 边缘捕获中断的 Nios® II 设计不能正常工作?

目录 说明 解决方法 说明 当用户选择了不正确的边缘捕获设置&#xff0c;从而阻止触发中断时&#xff0c;可能会出现此问题。 在 PIO&#xff08;并行 I/O&#xff09;英特尔 FPGA IP内核中&#xff0c;如果“启用单个位设置/清除”选项被关闭&#xff0c;则将任何值写入边…

vue实例和容器的一夫一制——04

//准备容器 <div classapp> <h1>{{mag}}</h1> </div> //准备容器 <div classapp> <h1>{{mag}}</h1> </div> //准备容器 <div classapp2> <h1>{{name}}</h1> </div> <script> // 验…

基于Java+SpringMvc+Vue技术的药品进销存仓库管理系统设计与实现系统(论文7000字参考+源码+LW+部署讲解)

博主介绍&#xff1a;硕士研究生&#xff0c;专注于信息化技术领域开发与管理&#xff0c;会使用java、标准c/c等开发语言&#xff0c;以及毕业项目实战✌ 从事基于java BS架构、CS架构、c/c 编程工作近16年&#xff0c;拥有近12年的管理工作经验&#xff0c;拥有较丰富的技术架…

Java虚拟机面试题汇总

目录 1. JVM的主要组成部分及其作用&#xff1f; 1.1 运行时数据区划分&#xff1f; 1.2 哪些区域可能会发生OOM&#xff1f; 1.3 堆和栈的区别&#xff1f; 1.4 内存模型中的happen-before是什么&#xff1f; 2. HotSpot虚拟机对象创建流程&#xff1f; 2.1 类加载过程…

7.9总结

容易推出当移动i与j时等价于j-i-1个左右交换&#xff0c;且每次交换逆序数的奇偶改变&#xff08;无相同元素&#xff09;&#xff0c;假设有一个状态c&#xff0c;且a与b必须以等量的左右交换转移为c&#xff0c;则必须数量相同&#xff0c;元素相同&#xff08;使用异或解决&…

tomcat 项目迁移,无法将项目作为服务service启动

背景 测试服务器需要迁移到正式服务器上&#xff0c;为了方便省事&#xff0c;将测试服务器上的一些文件直接复制到正式服务器 问题 使用startup启动项目之后&#xff0c;可以直接使用使用tomcat9w启动&#xff0c;或者作为服务service启动的时候&#xff0c;显示无法访问到资源…