# Redis
# 安装
从官网下载tar包 https://redis.io/ (opens new window)
安装
tar -zxvf ./redis-6.2.6.tar.gz -C /opt/module
cd /home/software
make
make install ## then go to /usr/local/bin ll
配置
cd /home/software/redis-6.2.6/
vi redis.conf
daemonize yes ## change the redis-server start on background.
requirepass xxxx ## your password
logfile /home/software/redis-6.2.6/log/redis.log
bind 0.0.0.0 ## anyone can connect
启动
redis-server ./redis.conf ## start server
redis-cli -h 127.0.0.1 -p 6379 -a password ## start client
> set foo hello
> get foo
# 主从搭建
# 哨兵搭建
# 集群搭建
集群至少需要三主三从,所以至少需要六台机器
创建文件夹
mkdir -p /usr/local/redis-cluster/5001 5002... 5006
将配置文件拷贝到目录中
cp /opt/module/redis-2.6.2/redis.conf /usr/local/redis-cluster/5001
修改配置文件
pidfile /var/run/redis_5001.pid
daemonize yes
logfile /usr/local/redis-cluster/5001/redis.log
dir /usr/local/redis-cluster/5001
appendonly yes
appendfsync everysec
port 5001
cluster-enabled yes
cluster-config-file nodes-5001.conf
cluster-node-timeout 15000
同步几份配置文件到对应文件夹,并且替换5001->500x 用对应配置文件启动redis-server
redis-server /usr/local/redis-cluster/500x/redis.conf
使用集群搭建命令搭建集群 5.0之前使用ruby命令,5.0之后可以使用自带的命令
redis-cli --cluster create ip:port ip2:port2... --cluster-replicas n
redis-cli --cluster create
172.16.151.100:5001
172.16.151.100:5002
172.16.151.100:5003
172.16.151.100:5004
172.16.151.100:5005
172.16.151.100:5006 --cluster-replicas 1 -a password
redis-cli --cluster help # 查看帮助
16384个slots将会平分在几个主节点上 集群模式登陆redis
redis-cli --cluster -c --pass password -p 5001
!注意如果是虚拟机,磁盘是否够空间。
增加从节点 分片
保障 Redis 高可用的 4 种手段:
数据持久化保证了数据不丢失;
Redis 主从让 Redis 从单机变成了多机。 它有两种模式:主从模式和从从模式,但当主节点出现问题时,需要人工手动恢复系统;
Redis 哨兵模式用来监控 Redis 主从模式,并提供了自动容灾恢复的功能。
最后是 Redis 集群,除了可以提供主从和哨兵的功能之外, 还提供了多个主从节点的集群功能,这样就可以把数据均匀的存储各个主机主节点上, 实现了系统的横向扩展,大大提高了 Redis 的并发处理能力
# 常用命令
启动服务 redis-server redis.conf ## 一般在安装目录
连接 redis-cli -h host -p port -a password
查看慢查询
清空数据库 flushall flushdb
停止服务 shutdown
# 数据结构
# 基本的五个
- string
- list
- hash
- set
- sorted set
# 复杂的
- SDS
不同于c语言的字符串,redis定义了SDS构造体,因为c语言中要拿到字符串的长度,必须重头遍历这个字符串,直到末尾\0。所以这个结构直接访问len就可以知道字符串长度,更节省了时间。 杜绝了缓冲区溢出,c语言需要提前设置内存,如果将a字符串拼接,但是忘记重新设置长度,那它就会溢出到下个字符串的位置。设计了拼接api,会先检查长度,如果不够就先扩展。 预分配空间 减少了修改字符串长度频繁的分配空间操作,c语言需要这样的操作,但是SDS有空间预分配的操作。规则如下: 1.如果分配后,SDS的长度将小于1m,那就会再设置和len想同长度的free字节。 2.如果大于1m,那就加1m。
惰性释放 字符串缩短时,不立马释放free空间,而是留着等以后,便于后续字符串又变长。 当然也有对应api去释放这部分空间,不用担心内存浪费。
struct sdshdr {
// 已使用字节数量 5
int len;
// 未使用字节数量 0
int free;
// 用于保存字符串 \0结尾 'R' 'e' 'd' 'i' 's' '\0'
char[] buf;
}
# 持久化
- RDB 可以通过SAVE命令或者BGSAVE命令(另起线程)保存dump.rdb文件 文件保存的都是二进制的键值 或者通过修改redis.conf文件
save 600 1 ## 代表600秒内执行过一次命令
- AOF
# 其他
← Jenkins Prometheus →