
分布式电商
k8s集群
Kaaaakaki
这个作者很懒,什么都没留下…
展开
-
检查elementui 组件导入
65集 5分钟检查elementui 组件 main.js这种组件感觉一般是 npm install 然后在main.js import 然后 vue.use 然后页面import原创 2022-03-14 23:33:59 · 466 阅读 · 0 评论 -
vue关闭eslint
加上最后一行原创 2022-01-13 15:19:07 · 219 阅读 · 0 评论 -
本类的事务互调
284集 在同一个ServiceImpl中 在一个事务里调用另一个事务 如果不用aspectj创建的动态代理 其他事务b c 的各种设置都是无效的 (如过期时间) 都遵循父事务的设置 想要子事务设置有效 就要//启动类上@EnableAspectJAutoProxy(exposeProxy = true)/** * 分布式事务 事务是使代理对象来控制的 * 1.引入 * <dependency> * <groupId>org.spri原创 2021-12-01 21:01:14 · 408 阅读 · 0 评论 -
订单的防重复提交(接口幂等性)-Lua脚本
274集原创 2021-10-13 21:44:35 · 754 阅读 · 0 评论 -
Feign远程调用丢失请求头问题 / Feign异步情况丢失上下文问题
Feign远程调用丢失请求头问题267集/*** 调用feign 会构造请求 调用很多拦截器 远程调用 使用 RequestTemplate 构造一个请求* 构造的这个请求会 丢失 原请求的请求头* 原来的请求 OrderWebController里的 toTrade方法 是已经登录的 带了cookie 有用户登录的信息* 而远程调用构造的新请求没有带请求头 所以在 到达cartController的请求 就会提示用户未登录* 查看源码可知 远程调用构造原创 2021-09-01 17:25:35 · 596 阅读 · 0 评论 -
k8s常用命令
kubectl get nodeskubectl get all -o widekubectl get pods -o widekubectl get podskubectl get pods --all-namespaceskubectl get svc -o wode #svc 就是service#创建一个部署 如创建tomcat 指定镜像kubectl create deployment tomncat6 --images=tomcat:6.0.53-jre8# --dry-run原创 2021-08-05 09:28:51 · 187 阅读 · 0 评论 -
docker安装RabbitMQ javaAPI操作RabbitMQ
RabbitMQ官网docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management 4369, 25672 (Erlang发现&集群端口)5672, 5671 (AMQP端口)15672 (web管理后台端口)61613, 61614 (STOMP协议端口)1883, 8883 (MQ原创 2021-08-05 09:28:25 · 226 阅读 · 0 评论 -
查看windows端口使用情况
看所有端口的使用情况netstat -ano看9000端口的使用情况 可以看到是哪个进程号在使用这个端口netstat -ano|findstr 9000列出当前系统的所有进程tasklist查看指定进程号的进程tasklist|findstr 15789原创 2021-07-30 15:35:50 · 175 阅读 · 0 评论 -
整合spring session
<!--整合 spring session--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>spring.session.store...原创 2021-07-27 16:16:19 · 265 阅读 · 0 评论 -
Linux命令--三台虚拟机网络环境预配置
显示默认网卡ip route show显示网络信息ip addr网络地址转换(NAT)同样一个ip 用端口转的NAT网络 ip就不一样了仅主机访问 方便宿主机能连上虚拟机关闭linux防火墙systemctl stop firewalld systemctl disable firewalld关闭 selinux linux安全策略 禁全局 sed -i 's/enforcing/disabled/' /etc/selinux/config setenforce 0原创 2021-07-23 16:34:26 · 493 阅读 · 1 评论 -
整合Redisson
1.引入依赖可以单独引入Redisson的依赖 或 spring-boot-redisson-starter<!-- https://mvnrepository.com/artifact/org.redisson/redisson --><dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <ver原创 2021-07-23 14:06:44 · 354 阅读 · 0 评论 -
spring-cache的不足
原创 2021-07-23 14:06:21 · 407 阅读 · 0 评论 -
两种session跨域问题 :
226集* 两种session跨域问题 :* 1、 同一个域名 多台服务器 原来session只存在运行的这一台上* 如果这个请求去了另一个服务器 就拿不到session了* 解决: 用一个统一的地方 比如 redis 来存所有服务器的session** 2. 域名不同 相当于 拿着农行的卡(sessionID) 去了 工商银行(服务器) 就拿不到对应的session* 解决:发session的时候 扩大session的作用域 auth.testmall.原创 2021-07-23 14:05:37 · 249 阅读 · 0 评论 -
被调用的远程服务中的方法出问题 抛出异常给调用它的方法
216集gulimall-auth-server调用gulimall-member中的注册方法 如果手机号或用户名已存在 方法抛出异常牵扯自定义异常类 common里的BizCodeEnumeMemberController @PostMapping("/regist") public R regist(@RequestBody MemberRegistVo memberRegistVo){ try{...原创 2021-07-21 17:45:51 · 531 阅读 · 0 评论 -
认证服务讲了一些转发重定向的知识215集
return "reg";//spring 自动配置了前缀 如 /resources/static/templates 后缀 如 。htmlreturn "forward:/reg.html";// 这个 viewController中对应的 ViewControllerRegistry registry.addViewController("/reg.html").setViewName("reg");return "redirect:/reg.html";//按照服务器当原创 2021-07-20 17:06:35 · 133 阅读 · 0 评论 -
倒计时效果
$(function(){ $("#sendCode").click(function () { //1. 给指定手机发送验证码 // 2 倒计时效果 if($(this).hasClass("disabled")){ //正在倒计时 点击没反应 }else{ timeoutchangeStyle() } }); }) var n.原创 2021-07-16 15:15:50 · 134 阅读 · 0 评论 -
异步编排示例
@Override public SkuItemVo item(Long skuId) { SkuItemVo skuItemVo = new SkuItemVo(); //使用异步编排改写 CompletableFuture<SkuInfoEntity> infofuture = CompletableFuture.supplyAsync(() -> { //1. 设置基本信息 pms_spu_info..原创 2021-07-15 17:22:37 · 247 阅读 · 0 评论 -
优化 提升速度
缓存 加锁分页 不一次获取所有数据异步编排业务代码优化 避免循环查库 改为一次查库 过滤等查一个属性对应的所有sku 直接在数据库写sql语句一次查出来 而不点一下访问一下接口方法 查一下数据库...原创 2021-07-15 17:22:16 · 113 阅读 · 0 评论 -
@ConfigurationProperties绑定配置 把可变的值写在配置文件里
ThreadPoolConfigProperties.javapackage com.kaki.gulimall.product.config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;@ConfigurationProperties(prefix = "原创 2021-07-15 16:57:49 · 398 阅读 · 0 评论 -
联表查询一个商品的所有属性分组 属性组包含的属性 属性的值
sql语句SELECT product.spu_id,ag.attr_group_id, ag.attr_group_name ,relation.attr_id,product.attr_name,product.attr_valueFROM pms_attr_group ag LEFT JOIN pms_attr_attrgroup_relation relation ON relation.attr_group_id=ag.attr_group_idLEFT JOIN pms_product_原创 2021-07-15 11:49:52 · 326 阅读 · 0 评论 -
SkuEsModel 静态内部类 es映射形式
package com.kaki.common.es;import lombok.Data;import java.math.BigDecimal;import java.util.List;/** * 要存在 es 的数据对应的实体类模型 商品上架把这个类型的数据传给 es es也可以做商品全文搜索 */@Datapublic class SkuEsModel { private Long skuId; private Long spuId;原创 2021-07-14 14:37:52 · 345 阅读 · 0 评论 -
异步-线程池
https://www.cnblogs.com/frankyou/p/10135212.htmlpackage com.kaki.gulimall.search.thread;import java.util.concurrent.*;// 多线程测试不能使用 @Test 测试类 测不出效果public class Threadtest { /** 异步 线程池 这些感觉都是异步线程 先打印了main start main end 线程还没执行完 执行完了才 *原创 2021-07-14 14:06:19 · 141 阅读 · 0 评论 -
Elasticsearch创建新索引和数据迁移
原来的缩索引创建后就不能修改 只能创建一个新的索引 再把数据从旧索引迁移到新的索引上创建新索引PUT gulimall_product{ "mappings" : { "properties" : { "attrs" : { "type" : "nested", "properties" : { "attrId" : { "type" : "long"原创 2021-07-09 14:46:15 · 255 阅读 · 0 评论 -
RedisTemplate和StringRedisTemplate
https://blog.youkuaiyun.com/notsaltedfish/article/details/75948281一句话就是他们对缓存数据的序列化方式不同RedisTemplate使用的序列类在在操作数据的时候,比如说存入数据会将数据先序列化成字节数组然后在存入Redis数据库,这个时候打开Redis查看的时候,你会看到你的数据不是以可读的形式展现的,而是以字节数组显示当Redis当中的数据值是以可读的形式显示出来的时候,只能使用StringRedisTemplate才能获取到里面的数据。原创 2021-07-06 17:27:55 · 200 阅读 · 0 评论 -
脏读、脏写、不可重复读、幻读
脏写:先更新的线程把后更新的数据覆盖掉或回滚掉了 最新更新的数据没有了无论是脏写还是脏读,都是因为一个事务去更新或者查询了另外一个还没提交的事务更新过的数据。因为另外一个事务还没提交,所以它随时可能会回滚,那么必然导致你更新的数据就没了,或者你之前查询到的数据就没了,这就是脏写和脏读两种场景。事务 A 在执行期间多次查询一条数据,每次都可以查到其它已经提交的事务修改过的值,那么就是不可重复读幻读就是你一个事务用一样的 SQL 多次查询,结果每次查询都会发现查到一些之前没看到过的数据。注意,幻读特指的原创 2021-07-02 10:48:01 · 264 阅读 · 0 评论 -
Redisson闭锁CountDownLatch
闭锁 所有线程都走完了 才执行闭锁 //Redisson 闭锁 CountDownLatch //多线程 5个班的人都要走 所有班级走完了才锁大门 @GetMapping("/lockdoor") @ResponseBody public String lockdoor() throws InterruptedException { RCountDownLatch door = redissonClient.getCountDownLatch("原创 2021-07-02 09:59:51 · 338 阅读 · 0 评论 -
Redisson信号量
/// Redisson 信号量 可以用来做限流处理 @GetMapping("/park") @ResponseBody public String park() throws InterruptedException { //和锁一样 随便指定一个名字 只要名字相同获取的就是同一个信号量 RSemaphore park = redissonClient.getSemaphore("park"); // park.acquire()原创 2021-07-02 08:58:55 · 2027 阅读 · 0 评论 -
Redisson读写锁
速写锁可以保证读到的是最新数据 只要要写数据 更新数据 就加写锁 读锁必须等到写锁释放后才能进行 * 读读可以同时加锁 读写互斥 写写互斥 * 开两个浏览器 两个浏览器都读 都可以加读锁成功 读锁相当于一个无锁状态 大家都能用 * 但是 只要有一个浏览器在读 写锁就不能加成功 只有当读锁释放后 写锁才能执行 * 只要有一个浏览器在写 就不能再加新的写锁 只有等上一个写锁释放了 才能加新的写锁 //写锁是排它锁(互斥锁) 只能有一个写锁 多个线程想原创 2021-07-01 11:33:30 · 675 阅读 · 0 评论 -
Redisson普通锁
Redisson官方文档 @GetMapping("/hello") public String testRedissonClient(){ //根据名字获取锁 只要锁名一样 就是同一把锁 第一个线程拿到这个锁 加锁 第二个线程拿到的就是 一个正在运行的加了锁的锁 RLock mylock = redissonClient.getLock("my-lock"); //加锁 redisson 加的锁会自动给锁设置一个30秒的过期时间TTL原创 2021-07-01 10:22:42 · 141 阅读 · 0 评论 -
redis分布式锁演进实例
158集 redis中文官方文档命令阶段一阶段二 public Map<String, List<Catelog2Vo>> getCatelogJSONFromDbWithRedisLock() { //1.redis占坑 setIfAbsent()就相当于 setnx命令 只有当这个键不存在时才能存储成功 //为锁设置自动过期时间 避免业务出错或断电导致删锁语句未执行 一直死锁 Boolean lock原创 2021-06-28 17:40:21 · 190 阅读 · 0 评论 -
模拟多redis客户端set值
确定虚拟机中redis服务开启后 使用xshell链接 复制!](https://img-blog.csdnimg.cn/20210628110646355.png)点击右下角三条横线选择全部会话 再移到 上面图片中的命令 回车 所有复制的会话都连接上了redis客户端以NX (not exist)的方式向redis存储值 redis中文官方文档命令集合 http://www.redis.cn/commands/set.html可以发现只有一个会话的redis存储成功原创 2021-06-28 11:10:50 · 144 阅读 · 0 评论 -
使用Elasticsearch-Rest-Client(java API)完成ES查询的示例
有两个问题:一是es的自动分页的问题,查询得到显示的数据只有十条,但统计命中记录数385条二是怎么嵌套聚合查询,在下面的查询过程中两个聚合是并列的1.引入和es同版本的依赖 <!--elasticsearch rest client--> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>e原创 2021-05-29 13:46:27 · 909 阅读 · 1 评论 -
自定义ik词库
安装ik分词器es有很多内置的分词器 基本都是基于英文 如果用这些内置分词器分词中文的话只会被拆分成单个字 不会被拆成词可以进入容器内部 使用wget命令安装也可以自己下载 然后把解压的内容xftp传输到es中有些新出现的网络词ik分词器不能很好的进行分词 这时就可以添加我们自定义的词库自定义ik词库把词库文件定义在nginx/html下的fenci.txt文件中[root@localhost mydata]# cd nginx[root@localhost nginx]# l原创 2021-05-28 10:19:42 · 766 阅读 · 0 评论 -
把nginx文件夹改名为conf 再创建一个新的nginx文件夹 把conf文件夹放到nginx文件夹下
把nginx文件夹改名为conf 再创建一个新的nginx文件夹 把conf文件夹放到nginx文件夹下[root@localhost mydata]# lselasticsearch mysql nginx redis[root@localhost mydata]# mv nginx conf[root@localhost mydata]# mkdir nginx[root@localhost mydata]# lsconf elasticsearch mysql nginx原创 2021-05-28 09:25:48 · 584 阅读 · 0 评论 -
xshell设置网卡ping通外网操作命令
[root@localhost plugins]# clear[root@localhost plugins]# cd /etc/sysconfig/network-scripts/[root@localhost network-scripts]# lsifcfg-eth0 ifdown-isdn ifup ifup-plusb ifup-wirelessifcfg-eth1 ifdown-post ifup-aliases ifup-post原创 2021-05-25 22:24:00 · 2358 阅读 · 0 评论 -
xshell查看ik分词器安装结果操作命令
lsik[root@localhost plugins]# chomd -R 777 ik/-bash: chomd: command not found[root@localhost plugins]# chmod -R 777 ik/[root@localhost plugins]# lltotal 0drwxrwxrwx. 3 root root 243 May 25 13:31 ik[root@localhost plugins]# docker psCONTAINER ID原创 2021-05-25 22:05:03 · 303 阅读 · 0 评论 -
设置容器自动启动-进入容器内部-wget命令下载文件
122集安装ik分词器 这一集涉及到了很多linux命令 xshell xftp的使用设置容器自动启动进入容器内部 与容器的交互模式 exit退出交互模式 pwd 命令print work directory使用wget在linux中下载文件 不用自己下载再用ftp工具传上去ilinux使用ifconfig windows使用ipconfig 虚拟机中使用ifconfig先安装sudo yum install net-tools...原创 2021-05-25 17:49:04 · 231 阅读 · 0 评论 -
elasticsearch简单命令
官方文档7.9版本GET _search{ "query": { "match_all": {} }}POST /customer/external/_bulk{"index":{"_id":3}}{"name":"zhangsan"}{"index":{"_id":4}}{"name":"lisi"}GET /_cat/indicesPUT /customer/external/1{ "name":"zhangsan"}GET bank/_search原创 2021-05-25 17:14:30 · 105 阅读 · 0 评论 -
docker安装elasticsearch7.4.2
注:启动虚拟机前可以先在设置-系统-内存中调节虚拟机的内存 要下载的es和kibana比较大1.下载镜像docker pull elasticsearch:7.4.2 #存储和检索数据 docker pull kibana:7.4.2 #可视化检索数据2.设置目录挂载mkdir -p /mydata/elasticsearch/config # 三条命令一句执行完后再执行下一句 前两句先创建容器中目录要挂在到外部的哪个文件mkdir -p /mydata/elasticsearch/da原创 2021-05-22 17:16:21 · 181 阅读 · 3 评论 -
事务中修改mysql会话的隔离级别使之能看到已执行的代码但实际未提交的数据
一个事务中有多个对数据库操作的点一个点完成了 事务没有结束 在数据库中就差不到这个变化mysql的默认隔离级别 可重复读 也就是必须最起码读到已经提交了的数据SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;这行代码 将当前的会话的隔离级别设置为 读未提交 那当前这个窗口就能读到没有提交的数据在保存商品信息时执行完第一段保存基本信息的代码 在数据库中看不到 因为事务还没有结束 这个数据实际并没有提交 想要看到原创 2021-05-17 22:12:41 · 225 阅读 · 0 评论