关于编译器的一些小技巧
IDEA快速通过请求定位代码在idea中双击shift,可以调出搜索框,这时输入你想查找的URL就可以直接定位到相应的方法。
格式化代码ctrl+alt+l
从代码中抽取方法ctrl+alt+m
将代码块整体左移或右移左:选中代码块,shift+table右:选中代码块,table
快速生成try-catch代码块ctrl+alt+t
小写转大写ctrl+shift+u
VSCODE格式化代码shift+alt+f
git bash复制ctrl + insert
粘贴shift + insert
关于一些常用的命令
Redis篇关于Redis的启动,首先我们应该进入redis的安装目录下,在地址栏输入cmd并回车我的Redis安装在了如下位置:d:/Redis-5.0.14.1
修改:先使用该命令对Redis进行初次部署1redis-server.exe redis.windows.conf使用此命令将Redis添加到服务中,可以保证关闭cmd窗口仍然运行,重启电脑Redis开机自启。1redis-server --service-install redis.windows-service.conf --loglevel verbose在此状态下,我们导航到redis的安装目录123456开启服务redis-server --service-start停止服务redis-server --service-stop卸载Redisredis-server --service-uninstall此改动我们称之为高效
Cpolar篇关于Cpolar的启动,首先我们应该进入Cpolar的安装目录下,在地址栏输入cmd并回车,我的Cpolar安装在了如下位置1C:\Program Files\cpolar然后 ...
关于Redis的键值设计和一些问题
键值设计约定
基本格式:[业务名称]:[数据名]:[id] 例如:login:user:123456
长度不超过44字节
不包含特殊字符Bigkey问题对于单个key来说,value > 10kb则看作是Bigkey;对于集合key来说,元素数量 > 1000则看作是Bigkey。危害网络阻塞
对Bigkey执行读请求时,少量的QPS就可能导致带宽使用率被占满,导致Redis实例乃至物理机变慢数据倾斜
Bigkey所在的Redis实例内存使用率远超其他实例,无法使数据分片的内存资源达到均衡Redis阻塞
对元素较多的hash、list、zset等数据结构执行操作时耗时较久,可能导致主进程阻塞CPU压力
对Bigkey的数据序列化和反序列化会导致CPU使用率飙升,影响redis实例和本机其他应用发现Bigkey
redis-cli —bigkeys命令:查看Redis实例中Bigkey
scan扫描利用scan扫描Redis中所有Key,利用strlen、hlen等命令判断key的长度(不建议使用 MEMORY USAGE)
第三方工具,如Redis-Rdb-Tool ...
使用Docker制作自己的镜像
步骤
将你已经封装好的jar包导入Linux中
在Linux中创建Dockerfile文件,并写入以下内容(括号内容应删去):正常情况下
123456789FROM openjdk:17(你想要的任意版本)LABEL author=ranni(名字)COPY app.jar /app.jar(把jar包存放在规定的文件夹)EXPOSE 8080(端口)ENTRYPOINT ["java","-jar","/app.jar"](启动命令)
输入以下命令1docker build -f Dockerfile -t 你的镜像名:版本号 .
这时你查看镜像应该已经发现你创建的镜像了,接着启动它1docker run -d -p 8080:8080 你的镜像名:版本号
就可以直接web访问了。但是我遇到了问题,在设置完镜像后不能正常启动,原因是我使用的国内镜像不能正常拉取所需要的镜像
如果很不幸,你和我处境一样,我知道有两种办法来解决。其一是切换镜像,但是我不推荐,因为麻烦。最后就是我选择的方法,自己导入所需镜像,然后把Docker ...
使用docker实现Redis主从集群
使用docker实现Redis主从集群配置主Redis123456docker run -d -p 6379:6379 \> -v /app/rd1:/bitnami/redis/data \> -e REDIS_REPLICATION_MODE=master \> -e REDIS_PASSWORD=123456 \> --network mynet --name redis01 \> bitnami/redis
但是执行完上述代码后我们发现,redis的容器并未成功运行,排查日志发现是因为/app/rd1目录的权限只有root用户可读写,而redis的启动用户是redis,所以无法写入数据。解决方法:12chmod -R 777 rd1 (更改权限)docker restart redis01 (重启容器)
配置从Redis由于从Redis也有权限问题,所以我们直接创建并修改文件权限12mkdir rd2chmod -R 777 rd2创建并启动从Redis容器12345678docker run -d -p 6380:6379 \> -v /a ...
长时间不登录宝塔导致其页面404解决方案
长时间不登录宝塔导致其页面404解决方案在我把项目部署在宝塔面板之后,我仿佛卸下了包袱一样,这一定程度上意味着我不用再去修改这个项目了,偶尔上线看一眼,在心里和自己说“我曾经还能写出来这个玩意”。由于服务器是一直开着的,我也很少去关心项目的运行情况,毕竟能跑的项目就是好项目。但是线上的项目有时会很玄学的出现bug,例如我的论坛中的文章不能发布了,而在本地条件下还是可以正常运行的。尴尬的是当我想登录到宝塔后台进行文件替换的时候,我保存的宝塔页面变成了404。这个问题不止出现了一次,每一次出现我都要打开好几个网页来查找解决方案。所以,我决定写一篇文章来记录一下解决这个问题的过程。
解决我购买的服务器是华为云,所以我登录到华为云上,使用华为云的远程登录进入服务器。在服务器中输入1bt 14会出现以下信息123456789101112131415===============================================正在执行(14)...==================================================================== ...
Docker的安装与配置
CentOS 安装Docker卸载旧版本12345678yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
配置yum源并配置阿里云镜像12345yum install -y yum-utilsyum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
如果很不幸,你和我一样出现了Cannot find a valid baseurl for repo: base/7/x86_64错误,请移步到解决方案ht ...
关于Redis的分布式缓存问题
关于Redis的持久化RDB持久化RDB(Redis DataBase Backup file),也叫Redis数据快照。主要工作方法是在一定时间间隔内将Redis在某一时刻的数据保存到磁盘中的RDB文件中。主要有两条命令触发RDB:
save:手动触发RDB持久化。由于Redis是单线程,所以使用save命令时会造成所有请求的阻塞,直到save命令执行完后才可以执行其他请求。
bgsave:后台异步执行RDB持久化,不会阻塞主进程。推荐自动触发RDB在 Redis 配置文件(通常是 redis.conf)中,可以通过save < seconds > < changes >指令配置自动触发 RDB 持久化的条件。这个指令可以设置多次,每个设置定义了一个时间间隔(秒)和该时间内发生的变更次数阈值。123save 900 1 (有1个键被修改,900秒后自动触发一次RDF)save 300 10 (有10个键被修改,300秒后自动触发一次RDF)save 60 10000 (有10000个键被修改,60秒后自动触发一次RDF)
关于“bgsave”的流程(fork ...
关于在Linux系统中部署Redis
准备工作安装gcc环境1yum install -y gcc
若yum出现Cannot find a valid baseurl for repo: base/7/x86_64错误,那么很不幸,你和我出了一样的问题具体解决办法可以查看下面的博客:https://blog.csdn.net/weixin_46059351/article/details/140649426下面的修改可能导致Linux网关发生改变,会导致finalshell不能成功监听,暂时禁用
总结下来一般是DNS出了问题,首先需要修改/etc/sysconfig/network-scripts/ifcfg-ens33文件,12345678910......BOOTPROTO=“static” (修改)...(输入ip addr查询自己的ip然后填入)IPADDR=“xx.xx.xx.xx”GATEWAY=xx.xx.xx.1”DNS1=“8.8.8.8”DNS2=“8.8.4.4”NETMASK=“255.255.255.0”本人通过实践发现该问题可能和网关没有关系,只是因为cnetos的mirror不再更新导致不能使 ...
为什么lua可以保证原子性
在学习Redis的分布式锁时,课中说明需要使用Lua脚本编写setnx来实现分布式锁,而不把setnx直接写在Java中,是因为在Java代码中会存在极端情况。我们有两个线程,分别时线程1和线程2。我们在设置分布式锁时,已经设置了标识,每个锁都有一个唯一标识。线程1获取了锁,在线程1释放时我们要判断锁标识是不是自己的,是自己的才能释放。但是在判断结束还没释放锁的时候,Java虚拟机触发了Full GC,执行stw,线程1就被卡住了。(当然一般这种情况不会发生)让我们再极端一点,Full GC的时间足够长,撑到了线程1的超时释放,线程1的锁就被自动释放了。既然线程1的锁被自动释放了,线程2就可以获取到锁。但是足够巧,Full GC在恰当的时间结束了,线程1又自由了。前面我们提到,线程1已经判断了锁标识,所以它不会再判断一遍,于是线程1把属于线程2的锁释放掉,发生了并发问题。为了避免这个极端的问题,课中引入了lua脚本来编写setnx来保证线程的原子性。那么问题来了,为什么lua脚本可以保证线程的原子性呢?在使用lua时,Redis采用了单线程模型,也就是说,当Redis执行lua脚本时, ...










