redis

Redis是一个开源的使用 ANSI C语言编写,支持网络,可基于内存也可持久化的日志型,Key-Value数据库,并提供了多种语言的 API ,相比 Memcached 它支持存储的类型相对更多 (字符,哈希,集合,有序集合,列表等),同时Redis是线程安全的。

redis-cli

安装

命令

1
2
3
4
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw info memory
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "*"
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "KEY:KEYNAME*"
redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw keys "KEY:KEYNAME*" | xargs redis-cli -h redis.test.net -a TlJ8JsgzWHMOcbBMUEIw del

Redis 客户端

连接池

客户端连接 Redis 使用的是 TCP协议,直连的方式每次需要建立 TCP连接,而连接池的方式是可以预先初始化好客户端连接,所以每次只需要从 连接池借用即可,而借用和归还操作是在本地进行的,只有少量的并发同步开销,远远小于新建TCP连接的开销。另外,直连的方式无法限制 redis客户端对象的个数,在极端情况下可能会造成连接泄漏,而连接池的形式可以有效的保护和控制资源的使用。
客户端直连方式和连接池方式的对比:
优点缺点
直连
优点:简单方便,适用于少量长期连接的场景
缺点:

  1. 存在每次新建/关闭TCP连接开销
  2. 资源无法控制,极端情况下出现连接泄漏
  3. Jedis对象线程不安全(Lettuce对象是线程安全的)
    连接池
    优点:无需每次连接生成Jedis对象,降低开销
    缺点:使用连接池的形式保护和控制资源的使用相对于直连,使用更加麻烦,尤其在资源的管理上需要很多参数来保证,一旦规划不合理也会出现问题

Lettuce

linux

command

创建文件

1
touch test.sh

清空文件内容命令

1
2
3
echo "" >log.log
# > 是重写,覆盖式
# >>是尾部追加

查看历史命令

1
2
history
history | grep telnet

服务开机启动

1
2
systemctl enable docker.service
systemctl start docker.service

查看进程

Docker镜像下载加速器

配置DaoCloud加速器:

1
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b18c7aa2.m.daocloud.io

配置阿里云加速器:

1
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s https://zf0ry6xq.mirror.aliyuncs.com

查看加速配置信息:

1
docker info

配置完成后需要重启docker服务:

1
systemctl restart docker

1
service docker restart

Docker 安装

系统:CentOS系统

安装

脚本方式:

1
curl -fsSL https://get.docker.com/ | sh

可选用阿里镜像站点安装:参考 https://yq.aliyun.com/articles/110806

1
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

centos命令

1
2
3
4
service docker start
service docker stop
service docker status
service docker restart

docker命令

1
2
3
4
5
6
docker ps
docker images
docker rm #{container_id}
docker rmi #{image_id}
# 进入运行中的容器
docker exec -it d48b21a7e439 /bin/sh # d48b21a7e439 - 容器id,container_id

Docker compose file 配置参考

示例配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: "3"
services:

redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure

db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]

networks:
frontend:
backend:

volumes:
db-data:
  • version:
  • services:

deploy - 应用发布配置

restart_policy - 应用发布重启策略

1
2
3
4
5
6
7
8
9
10
version: "3"
services:
redis:
image: redis:alpine
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
  • condition: 可选项 none on-failure any(default)
  • delay: 尝试重启等待时间,默认0s
  • max_attempts: 最大重启次数,默认无限,首次启动不计入
  • window: 判定重启是否成功等待时长,默认0s

update_config - 应用发布更新策略

1
2
3
4
5
6
7
8
9
10
11
12
version: '3.4'
services:
vote:
image: dockersamples/examplevotingapp_vote:before
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
order: stop-first

官方参考文档地址:

Docker 镜像清理

1
2
3
4
5
6
7
8
9
10
# 删除所有 Docker 镜像
docker rmi $(docker images -f "dangling=true" -q)
# 删除所有未运行 Docker 容器
docker rm $(docker ps -a -q)
# 删除所有未打 tag 的镜像
docker rmi $(docker images -q | awk '/^<none>/ { print $3 }')
# 删除所有镜像
docker rmi $(docker images -q)
#根据格式删除所有镜像
docker rm $(docker ps -qf status=exited)

spring-boot

spring-cloud

registry

注册中心
Eureka

Eureka自我保护机制

springcloud服务已经关但是Eureka还是显示up,该状态持续很久,访问该服务也返回错误,但在注册中心界面,该服务却一直存在,且为UP状态,并且在大约十分钟后,出现一行红色大字:EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
原因:自我保护机制。Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。

进程间通信

Feign

负载均衡

客户端负载均衡
Ribbon

分布式配置中心

Spring Cloud Config
动态刷新
http://blog.didispace.com/springcloud4-2/
消息总线

kubernetes

基本概念

集群

一个集群指容器运行所需要的云资源组合,关联了若干服务器节点、负载均衡、专有网络等云资源。

节点

一台服务器(可以是虚拟机实例或者物理服务器)已经安装了 Docker Engine,可以用于部署和管理容器;容器服务的 Agent 程序会安装到节点上并注册到一个集群上。集群中的节点数量可以伸缩。

容器

一个通过 Docker 镜像创建的运行时实例,一个节点可运行多个容器。

镜像

Docker 镜像是容器应用打包的标准格式,在部署容器化应用时可以指定镜像,镜像可以来自于 Docker Hub,阿里云容器 Hub,或者用户的私有 Registry。镜像 ID 可以由镜像所在仓库 URI 和镜像 Tag(缺省为 latest)唯一确认。

编排模板

java-8

Stream API

lambda

Date-Time

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×