redis分布式锁和lua脚本

业务背景:存储请求参数token ,token唯一 ,且新的生成旧的失效
思路:因为是多台机器,获取token存入redis,保持唯一,考虑使用redis来加锁,其实就是在redis中存一个key,其他机器发现key有值的话就不进行获取token的请求。

SET操作会覆盖原有值,SETEX虽然可设置key过期时间,但也会覆盖原有值,所以考虑可以使用SETNX

SETNX Key value

将 key 的值设为 value ,当且仅当 key 不存在。

若给定的 key 已经存在,则 SETNX 不做任何动作 成功返回1,失败返回0。

看上去SETNX 配合[……]

Read more

Continue Reading

Redis中的批量操作Pipeline

大多数情况下,我们都会通过请求-相应机制去操作redis。只用这种模式的一般的步骤是,先获得jedis实例,然后通过jedis的get/put方法与redis交互。由于redis是单线程的,下一次请求必须等待上一次请求执行完成后才能继续执行。然而使用Pipeline模式,客户端可以一次性的发送多个命令,无需等待服务端返回。这样就大大的减少了网络往返时间,提高了系统性能。

  下面用一个例子测试这两种模式在效率上的差别:

public class PiplineTest {
    private static int count = 10000;
 
    public s[......]

Read more

Continue Reading

zk分布式任务管理

  在我们的系统开发过程 中不可避免的会使用到定时任务的功能,而当我们在生产环境部署的服务超过1台时,就需要考虑任务调度的问题,防止两台或多台服务器上执行同一个任务,通常会选择Elastic-Job、quartz等。这里主要基于Elastic-Job扩展研究。
Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务;Job-Cloud采用自研Mesos Framework的解决方案[……]

Read more

Continue Reading

超实用的远程SSH登录脚本

    前段时间,看到不少同事在连接公司跳板机时,有使用item2、Xshell、SecureCRT、或敲 SSH user@ip 等方式的。操作步骤比较繁琐。若公司只有一个网络组的话,使用工具还行。若有多个网络组,每次打开SecureCRT时就得手工选择各种主机或跳板机。特别麻烦且损耗工作效率。基于此,在此分享一脚本,希望可以帮助到大家🙂

第一步 创建脚本sgo.sh

将sgo.sh保存至 /usr/local/bin/下,并赋权。脚本内容如下:

#!/bin/bash

#cd .ssh_shell
func[......]

Read more

Continue Reading

git 仓库迁移

从一个git仓库迁移到另外一个git仓库,服务端和客户端操作记录

服务端

1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub。

git clone --bare git://github.com/username/project.git

--bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。

2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。

3). 以镜像推送的方式上传代码到 GitCafe 服务器上。

cd project.git
git push --mirror gi[......]

Read more

Continue Reading

JVM性能调优监控工具jps、jmap、jstack、jstat、hprof使用详解及调优实战

    前段时间项目中频繁出现性能问题,频率较高的有:I定时任务服务内存占用持续升高、II.服务一上线CPU 5分钟就飙升到200%、III.微服务之间大量链接超时并出现大量java.io.IOException: Broken pipe等,在优化这些问题时,主要用到了jstack、jstat、mat工具。后来在网上查询到JDK还自带其他一些实用的小工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jst[……]

Read more

Continue Reading

JVM原理

1、什么是JVM

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。

2、JRE/JDK/JVM是什么关系

JRE(JavaRuntime[……]

Read more

Continue Reading

websocket性能测试

项目中需要对websocket的性能进行测试,项目中websocket主要用于和前端APP之间的推送和拉取。废话不多说,进入主题

1.因为需要用到工具Thor,故需要下载安装包

cd testws
git clone https://github.com/observing/thor.git

如图:

执行:

npm install -g thor
#如果失败,可以执行
cnpm install -g ./

到此,工具安装完成,注意,要先安装node环境。

2. Thor 用法

thor [options] <urls>[......]

Read more

Continue Reading