bigkeys处理方案
Bigkey 是指当 Redis 的字符串类型过大,非字符串类型元素过多。 危害| 内存空间不均匀(平衡)例如在 Redis Cluster 中,大量 bigkey 落在其中一个 Redis 节点上,会造成该节点的内存空间使用率比其他节点高,造成内存空间使用不均匀。 | 请求倾斜对于非字符串类型的 bigkey 的请求,由于其元素较多,很可能对于这些元素的请求都落在 Redis cluster 的同一个节点上,造成请求不均匀,压力过大。 | 超时阻塞由于 Redis 单线程的特性,操作 bigkey 比较耗时,也就意味着阻塞 Redis 可能性增大。这就是造成生产事故的罪魁祸首!导致 Redis 间歇性卡死、影响线上正常下单! | 网络拥塞每次获取 bigkey 产生的网络流量较大,假设一个 bigkey 为 1MB,每秒访问量为 1000,那么每秒产生 1000MB 的流量,对于普通的千兆网卡(按照字节算是 128MB/s)的服务器来说简直是灭顶之灾。 而且一般服务器会采用单机多实例的方式来部署,也就是说一个 bigkey...
DOCKER部署sftp,ftp
sftp搭建,拉取镜像1docker pull docker.io/atmoz/sftp //也可不拉取,在执行docker run命令时会自动拉取 持久化上传的文件12345docker run --name sftp -v /opt/sftp:/home/admin/upload -p 23:22 -d atmoz/sftp admin:admin:::upload--name sftp 容器名称admin:admin:::upload 其中admin为用户名,admin为密码,upload为上传的文件会保存到容器里面的/home/admin/upload目录里面-p 23:22 将宿主机的23端口映射到容器的22端口,这样方位宿主机的23端口则会转发到容器的22端口上-d atmoz/sftp 使用dockup hub中的atmoz/sftp镜像创建容器 12# 远程登录sftp -P portNum user@sftpServerIP ftp搭建,拉取镜像1docker pull fauria/vsftpd 查看端口占用12netstat ...
sentinel规则持久化到nacos
规则持久化-代码仓库地址 现在,sentinel的所有规则都是内存存储,重启后所有规则都会丢失。在生产环境下,我们必须确保这些规则的持久化,避免丢失。 1.规则管理模式规则是否能持久化,取决于规则管理模式,sentinel支持三种规则管理模式: 原始模式:Sentinel的默认模式,将规则保存在内存,重启服务会丢失。 pull模式 push模式 1.1.pull模式pull模式:控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件或数据库中。以后会定时去本地文件或数据库中查询,更新本地规则。 1.2.push模式push模式:控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听Nacos,获取配置变更的推送消息,完成本地配置更新。 2.实现push模式1.引入依赖引入sentinel监听nacos的依赖: 1234<dependency> <groupId>com.alibaba.csp</groupId> ...
Reactive编程学习记录(长期)-知识及编程技巧
问题记录 最后的结果Flux、Mono一定要作为方法返回值,因为响应式编程的异常信息保存在这些结果中(而不是在方法调用时抛出),所以这些结果必须作为方法返回值,否则Spring无法知道方法是否报错 常用api记录 如果要操作数据,并返回一个Mono的时候,使用flatMap 一般如果不操作数据,仅数据转换,使用map 订阅者是由Spring框架去完成,我们(开发)写发布者代码 zipWith方法可以组合两个Mono/Flux,并返回新的Mono/Flux类型 take(x)适合取flux中前x个,而当flux就一个元素的适合,可以使用next()将flux转为mono flatMapMany适合将Mono<数组/集合>转换为Flux 当希望合并多个流操作的时候,可以使用Mono.zip/Flux.zip Mono.zip(memberLevelMono, giftCardMono,...
Reactive编程学习记录总结
webmvc和webflux的一些区别组件 执行过程webmvc webflux 写法(返回一个视图)webmvc webflux(路由式写法),webflux也支持了mvc的注解使得一般项目可以无压力替换为webflux框架 思想webmvc(命令式编程)1假如有一个式子a=b+c,这就意味着a的值是由b和c计算出来的。如果b或者c后续有变化,不会影响到a的值 webflux(响应式编程)123式子a:=b+c,这就意味着a的值是由b和c计算出来的。但如果b或者c的值后续有变化,会影响到a的值--变化传递 例子(3y) 1234567private String createStr() { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { } return "some string";} webmvc123456private String get1()...
记录Reactive编程模式下如何方便的debug
通过打开全局 Operator 堆栈追踪 未开启之前 开启之后 这种方法同等与在方法内部输出以下代码1234//打开Hooks.onOperatorDebug();//关闭Hooks.resetOnOperatorDebug();
记录RouterFunction方式如何实现全局异常拦截
在使用mvc编程方式下,全局异常拦截可使用如下方式123456789101112131415/** * @author 小五 */@Slf4j@RestControllerAdvice@RequiredArgsConstructorpublic class DefaultExceptionHandlerConfig { @ExceptionHandler(BeHappyException.class) //@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseEntity beHappyExceptionHandler(BeHappyException e){ log.error("BeHappy Exception: {}",e.getMsg()); return ResponseEntity.internalServerError().body(e); ...
记录gitbook部署github pages
安装node(目前测试高于10的版本会有问题,安装10即可)这里使用nvm安装及配置安装路径不能有空格和中文 安装gitbook-cli1npm --registry https://registry.npm.taobao.org install gitbook-cli -g gitbook初始化,SUMMARY(可选,可以将现有文件copy至此)1gitbook init 编写SUMMARY文档,book.json,执行构建编译1gitbook install 在gitbook 的项目里点击 settings ,找到 GitHub Pages 在本地环境中先将编译文档到 docs 目录(这里我新增了一个 Blog.md 文件) ,在 SUMMARY.md 中添加访问链接后可直接在左侧的目录树显示命令行中键入gitbook build . docs,将文件都编译到 docs 目录下 然后将编译好的文件 PUSH 到远端仓库123$ git add *$ git commit -m"Inital commit"$ git push orgin...
hexo博客展示git提交记录
hexo-githubcalendar方式(推荐)博客参考链接: https://zfe.space/post/hexo-githubcalendar.html github地址: https://github.com/Zfour/hexo-github-calendar hexo-filter-gitcalendar方式(此方式已被弃用)安装1npm install hexo-filter-gitcalendar --save 自建API部署新建项目,fork项目打开dashboard点击新建项目的New Project按钮。点击导入第三方库。 填入Zfour提供的自建 API 项目地址:1https://github.com/Zfour/python_github_calendar_api.git 进入下一步后,点击create, 之后会自动进行deploy, 如整合waline中介绍, 会生成DOMAIN 修改主题配置文件配置文件可参考: https://akilar.top/posts/1f9c68c9/
镜像清理脚本
12345678910111213141516171819202122232425262728293031323334#!/usr/bin/env bash#删除过期镜像,保留最新${retain}个版本(需要确保版本号确实是越新的越大)retain=1cdate=$(date '+%Y-%m-%d_%H:%M:%S')# 镜像中的关键字keyword="docker.io"# 先删除异常停止的docker容器docker rm -f $(docker ps -a | grep Exited | awk '{print $1}')# 先删除名称或标签为none的镜像docker rmi -f $(docker images | grep '<none>' | awk '{print $3}')for service in $(docker images | grep...