Docker搭建redis-cluster集群

环境

(1) Centos 7+
(2) Docker 18.06.1-ce
(3) Redis 3.0.0以上

获取redis镜像

1
2
$ docker pull redis
$ docker images

创建redis容器

创建自定义docker network

1
2
3
4
//创建自定义docker network
$ docker network create net2 --subnet=172.19.0.1/24 --gateway=172.19.0.1
//查看是否创建成功
$ docker network inspect net2 | grep "Gateway" | grep --color=auto -P '(\d{1,3}.){3}\d{1,3}' -o

阅读全文

分布式锁应用场景分析

概念

Java线程中的锁,基于Java的内存模型,每个线程有自己的内存空间,多线程锁是存在一个JVM之中的,如果操作的数据不在一个JVM中,多线程中锁就失效了,这种情况下分布式锁就诞生了,即多个Java实例、甚至不一定是Java程序、或多个系统需要操作同一个副本数据的时候,需要一个指挥交通的人指定操作的先后顺序,这就是分布式锁的概念。

在传统的基于数据库的架构中,对于数据的抢占问题往往是通过数据库事务(ACID)来保证的。在分布式环境中,出于对性能以及一致性敏感度的要求,使得分布式锁成为了一种比较常见而高效的解决方案。

场景

账户操作

资源池获取任务

公有账户给私有账户充值

星币扣除

……

业内解决方案

基于Mysql实现分布式锁

  • MYSQL隔离性-唯一索引

    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `t_distributed_lock` (
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
    `name` varchar(64) NOT NULL DEFAULT '' COMMENT '锁名',
    `desc` varchar(512) NOT NULL DEFAULT '备注信息',
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '保存数据时间,自动生成',
    PRIMARY KEY (`id`),
    UNIQUE KEY `uidx_name` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='锁数据';

阅读全文

背景

为方便测试使用,通常我们选择在Windows主机中安装虚拟机(VMware Workstation),在虚拟机中部署Docker容器。而我们部署在Docker中的容器外部网络(和Windows同一层的网络)是无法访问的。

准备工作

机器准备

Windows

虚拟机-VMware

IP准备

Windows IP:192.168.10.103

虚拟机(CentOS7) IP:192.168.93.128

Docker容器 IP:172.17.0.3

(宿主机器与容器之间访问)创建容器时可以选择docker自带的端口映射功能,能够跨网络实现172.17.0.3与192.168.93.128的通信

1
$ docker run --name html -p 8082:80 -v /data/html:/usr/share/nginx/html:ro -d nginx

阅读全文

CentOS 安装 Docker CE

准备工作

系统要求

  • 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。

卸载旧版本

1
2
3
4
5
6
7
8
9
10
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

阅读全文

队列主要作用

  • 流量削峰填谷

    秒杀或者系统高峰场景,会出现同时大量的流量涌进来,假如系统对应的mysql最多只能承受2000/s,同时进来的请求数高达8000/s,以这种情况,mysql必然会被冲垮了,那怎么办呢?使用队列来缓冲流量,8000/s的请求全部丢到队列中,然后再根据系统能承受的范围内消费处理,即可很好的保护系统不被瞬时的流量冲垮!

阅读全文

RedisCluster集群模式下使用Pipeline批量操作-Java

在工作中无意中发现居然有些系统在完成某个功能(登录),竟然对redis产生近80次读写操作!对于这样子的读写操作,redis很快便导致系统延时过高,吞吐量低下;有没有什么办法或者redis指令可以将以上操作进行合并操作,提升系统性能和吞吐量呢?答案是:redis Pipeline(管道机制)eline指的是管道技术,指的是客户端允许将多个请求依次发给服务器,过程中而不需要等待请求的回复,在最后再一并读取结果即可。

问题来了

Pipeline功能居然不支持了

难道就放弃了

当然不了…….

那该如何

阅读全文