组件与中间件
4、JWT与SpringSession
·4117 字·9 分钟·
loading
·
loading
Java
组件与中间件
SpringSession # SpringSession可以解决在微服务高可用或多个微服务中,JSESSIONID不同的问题
3、Jedis与RedisTemplate
·5571 字·12 分钟·
loading
·
loading
Java
组件与中间件
Redis
Jedis # 使用步骤(Maven下使用) # 1、pom.xml文件中导入依赖 # <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.3.0</version> </dependency> 2、获取Redis对象,连接Redis # //无参构造为默认ip:127.0.0.1,端口号:6379 Jedis jedis = new Jedis("127.0.0.1",6379); 对于String类型的操作 # Jedis jedis = new Jedis(); //清空所有数据库 jedis.flushAll(); for (int i = 0; i < 10; i++) { //insert jedis.set("key" + i,"value" + i); } //delete jedis.del("key2"); //update jedis.set("key1","vvvvv"); //findById String s = jedis.get("key1"); System.out.println(s); //findAll Set<String> keys = jedis.keys("*"); Iterator<String> iterator = keys.iterator(); while (iterator.hasNext()){ String key = iterator.next(); String value = jedis.get(key); System.out.println("key:" + key + "value:" + value); } 对于Set类型的操作 # Jedis jedis = new Jedis(); jedis.flushAll(); //insert jedis.sadd("person","lucy1"); jedis.sadd("person","lucy2"); jedis.sadd("person","lucy3"); jedis.sadd("person","lucy4"); jedis.sadd("person","lucy5"); //查询key的数据量 System.out.println(jedis.scard("person")); //delete jedis.srem("person","lucy1"); //findAll Set<String> person = jedis.smembers("person"); System.out.println(person); 对于Zset类型的操作 # Jedis jedis = new Jedis(); jedis.flushAll(); //insert,可以根据第二个参数值,进行排序 jedis.zadd("person",18,"lucy18"); jedis.zadd("person",9,"lucy9"); jedis.zadd("person",26,"lucy26"); jedis.zadd("person",4,"lucy4"); //delete jedis.zrem("person","lucy9"); //查看key的数据量 System.out.println(jedis.zcard("person")); //findAll Set<String> person = jedis.zrange("person", 0, -1); System.out.println(person); 对于List类型的操作 # Jedis jedis = new Jedis(); jedis.flushAll(); for (int i = 0; i < 10; i++) { //在后面添加 jedis.rpush("key","value" + i); } for (int i = 11; i < 20; i++) { //在前面添加 jedis.lpush("key","value" + i); } //findById System.out.println(jedis.lindex("key", 3)); //delete jedis.lrem("key",1,"value1"); //update jedis.lset("key",3,"vvvvv"); //findAll List<String> key = jedis.lrange("key", 0, -1); System.out.println(key); //统计该key对应的value数量 System.out.println(jedis.llen("key")); 对于Hash类型的操作 # Jedis jedis = new Jedis(); jedis.flushAll(); //insert jedis.hset("person","name","lucy"); jedis.hset("person","sex","nv"); jedis.hset("person","age","18"); //update jedis.hset("person","age","25"); //根据id获取值 System.out.println(jedis.hget("person", "age")); //delete jedis.hdel("person","sex"); //findAll Map<String, String> map = jedis.hgetAll("person"); System.out.println(map); spring-boot-starter-data-redis # 使用步骤 # 1、导入依赖
1、Redis
·1710 字·4 分钟·
loading
·
loading
Java
组件与中间件
Redis
数据库概述 # 数据库分为关系型数据库,非关系型数据库
6、分布式事务
·5909 字·12 分钟·
loading
·
loading
Java
组件与中间件
分布式事务 # 分布式事务概念 # 本地事务:单体应用对应的单个数据库的事务 事务的目的:保证整个业务流程,要么统一成功,要么统一失败 通过单体应用中的事务管理器(TransactionManagement),可以保证事务的完整性 分布式事务 现在,我们用的是微服务。微服务的特点:一个微服务对应一个数据库 分布式程序,或微服务程序是相互独立的模块,都是远程调用,无法继续使用本地事务控制
3、配置ssl
·204 字·1 分钟·
loading
·
loading
Java
组件与中间件
Nginx
1、域名服务商控制台对ssl进行域名解析
2、下载ssl证书,一共两个文件xxx.key、xxx.pem,上传到服务器
2、集群的实现,动静分离
·876 字·2 分钟·
loading
·
loading
Java
组件与中间件
Nginx
Nginx的使用 # Nginx启动 # //在Nginx的目录下使用dos命令 start nginx.exe #启动nginx nginx -s reload #nginx可以重新加载文件 nginx -t #查看配置文件是否有错 nginx -s stop #停止nginx Nginx整合Tomcat,并实现动静分离(单个Tomcat) # 修改nginx.conf文件 # listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。 server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。 location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里 root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。 index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。 server { listen 80; #为虚拟服务器的识别路径。因此不同的域名会通过请求头中的HOST字段,匹配到特定的server块,转发到对应的应用服务器中去。 server_name localhost:8080; # proxy_pass:它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹 location / { root html; index index.html index.htm; proxy_pass http://localhost:8080; } #静态文件交给nginx处理 location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { root G:/work/2018/prj04/src/main/webapp; expires 30d; } # 动态请求由反向代理分配去哪儿,见upstream{} location ~ .*$ { index index; proxy_pass http://localhost:8080; } } 配置负载均衡(多个Tomcat) # 1:启动多个tomcat
4、持久化、事务
·1691 字·4 分钟·
loading
·
loading
Java
组件与中间件
Redis
持久化 # 优势Redis是基于缓存的存储,所以如果服务器宕机,会导致数据丢失,所以如果需要保存在磁盘上,需要使用持久化方案,Redis提供两种的持久化方案,RDB和AOF,默认情况下,开启了RDB方案,关闭AOF方案
6、抓取数据
·299 字·1 分钟·
loading
·
loading
Java
组件与中间件
ElasticSearch
常用的抓取数据的姿势 # 姿势1:HTMLParser 姿势2:HttpClient 姿势3:Jsoup Jsoup # 1、添加依赖 # <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency> 2、代码 # @Test public void test5() throws Exception { String url = "https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDAUTODAY&filename=SAHG202109022&uniplatform=NZKPT"; //解析资源路径,设置超时时间30秒 //此方法生成一个Document对象,可以按照前端方式进行操作 Document doc = Jsoup.parse(new URL(url), 30000); //获取标题 Element element = doc.getElementsByClass("wx-tit").get(0); String title = element.child(0).text(); System.out.println("标题:" + title); //获取摘要 Element chDivSummary = doc.getElementById("ChDivSummary"); String digest = chDivSummary.text(); System.out.println("摘要:" + digest); //获取关键字 Element keywords = doc.getElementsByClass("keywords").get(0); int num = keywords.childNodeSize(); String keyword = ""; for (int i = 0; i < num; i++) { keyword += keywords.child(i).text(); } System.out.println("关键字:" + keyword); }
6、SpringCache&Redis
·1613 字·4 分钟·
loading
·
loading
Java
组件与中间件
Redis
关于Spring Cache # Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回。所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果。
5、分布式存储Minio
·1734 字·4 分钟·
loading
·
loading
Java
组件与中间件
分布式存储 # 1、分布式存储是一种数据存储技术,通过网络使用企业中的每台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备,数据分散的存储在企业的各个角落。