[root@centos01 simple]# pwd
/data/redis/simple
[root@centos01 simple]# tree
.
├── db
│ ├── appendonly.aof
│ ├── dump.rdb
│ ├── redis.conf
│ └── redis.log
├── redis.conf
└── redis.log
#新建数据目录和配置目录
cd /data/redis/simple
mkdir db
touch redis.conf
touch redis.log
#编辑配置文件 vim /data/redis/simple/redis.conf
bind 0.0.0.0
port 6379
loglevel notice
logfile /data/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dir /data
protected-mode yes
requirepass 123456
appendonly yes
bind 0.0.0.0 ##改为0.0.0.0 允许外部访问
port 6379 ##配置端口,默认6379
loglevel notice ##日志级别
logfile /data/redis.log ##日志保存位置
save 900 1 ##表示900s内有1条写入,就产生快照(进行一次备份)
save 300 10 ##表示300s内有10条写入,就产生快照(进行一次备份)
save 60 10000 ##可通过redis-cli>save/bgsave手动触发持久化
dbfilename dump.rdb ##数据文件名
stop-writes-on-bgsave-error yes ##如果持久化出错,主进程是否停止写入
rdbcompression yes ##是否压缩
rdbchecksum yes ##导入时是否检查
dir /data ##切换到data目录,/data是redis默认工作目录
protected-mode yes ##保护模式,默认为yes
requirepass password ##redis客户端登录密码
appendonly yes ##开启AOF持久化,默认为关闭的,生产环境建议打开
------------------------AOF配置-------------------------
# 是否开启aof
appendonly yes
# 文件名称
appendfilename "appendonly.aof"
# 同步方式
appendfsync everysec
# aof重写期间是否同步
no-appendfsync-on-rewrite no
# 重写触发配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 加载aof时如果有错如何处理
# yes表示如果aof尾部文件出问题,记录到log并继续执行。no表示提示写入等待修复后写入
aof-load-truncated yes
# 文件重写策略
aof-rewrite-incremental-fsync yes
#下载redis
docker pull redis:5.0
docker run -d \
-p 6379:6379 \
-v /data/redis/simple/db:/data \
-v /data/redis/simple/redis.conf:/data/redis.conf \
-v /data/redis/simple/redis.log:/data/redis.log \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--name group_redis_simple_1 redis:5.0 \
redis-server /data/redis.conf
----------------------------命令说明------------------------------
##将主机的6379端口关联到容器的6379端口
-p 6379:6379
##将主机中当前目录下的/data/redis/simple挂载到容器内的/data
-v /data/redis/simple:/data
##通过redis-server启动,并指定配置文件为redis.conf
redis-server /data/redis.conf
RedisDesktopManager
1、登录进入redis
docker exec -it group_redis_simple_1 /bin/bash
2、redis-cli登录
root@3aec3195595f:/data# redis-cli
3、简单命令操作
127.0.0.1:6379> keys *
127.0.0.1:6379> set aa 111
127.0.0.1:6379> get aa
https://blog.csdn.net/huang_wu_yao_xin/article/details/83988728
主从
通过配置--slaveof 127.0.0.1 6379 实现
通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。
。但是由于数据是存储在一台服务器上的,如果这台服务器出现硬盘故障等问题,也会导致数据丢失。为了避免单点故障,通常的做法是将数据库复制多个副本以部署在不同的服务器上,这样即使有一台服务器出现故障,其他服务器依然可以继续提供服务。为此, Redis 提供了复制(replication)功能,可以实现当一台数据库中的数据更新后,自动将更新的数据同步到其他数据库上。
在复制的概念中,数据库分为两类,一类是主数据库(master),另一类是从数据库[1] (slave)。主数据库可以进行读写操作,当写操作导致数据变化时会自动将数据同步给从数据库。而从数据库一般是只读的,并接受主数据库同步过来的数据。一个主数据库可以拥有多个从数据库,而一个从数据库只能拥有一个主数据库。
使用redis-sentinel实现
当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。
哨兵的作用就是监控redis主、从数据库是否正常运行,主出现故障自动将从数据库转换为主数据库。
顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。
(1)监控主数据库和从数据库是否正常运行。
(2)主数据库出现故障时自动将从数据库转换为主数据库。
redis5.0之后采用redis-cli实现
redis5.0之前基于ruby实现
即使使用哨兵,redis每个实例也是全量存储,每个redis存储的内容都是完整的数据,浪费内存且有木桶效应。为了最大化利用内存,可以采用集群,就是分布式存储。即每台redis存储不同的内容,
共有16384个slot。每个redis分得一些slot,hash_slot = crc16(key) mod 16384 找到对应slot,键是可用键,如果有{}则取{}内的作为可用键,否则整个键是可用键
集群至少需要3主3从,且每个实例使用不同的配置文件,主从不用配置,集群会自己选。
修改每个实例的配置文件:
cluster-enabled yes --开启集群
cluster-config-file nodes-6382.conf --集群配置文件名,每个实例配置的要不同,redis会根据文件名自动新建
------------------192.168.0.10主节点服务器------------------
[root@centos01 master]# pwd
/data/redis/master
[root@centos01 master]# tree
.
├── db
│ ├── appendonly.aof
│ ├── redis.conf
│ └── redis.log
├── redis.conf
└── redis.log
------------------192.168.0.11/12从节点服务器------------------
[root@centos01 slave]# pwd
/data/redis/slave
[root@centos01 slave]# tree
.
├── db
│ ├── appendonly.aof
│ ├── redis.conf
│ └── redis.log
├── redis.conf
└── redis.log
--------------主节点服务器新建文件夹与文件-------------------
cd /data/redis/master
mkdir db
touch redis.conf
touch redis.log
--------------从节点服务器新建文件夹与文件-------------------
cd /data/redis/slave
mkdir db
touch redis.conf
touch redis.log
官方配置全解 http://download.redis.io/redis-stable/redis.conf
主节点器配置
#编辑配置文件 vim /data/redis/master/redis.conf
bind 0.0.0.0
port 6379
loglevel notice
logfile /data/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dir /data
appendonly yes
slave-priority 90
#slaveof 192.168.0.10 6378
#编辑配置文件 vim /data/redis/slave/redis.conf
bind 0.0.0.0
port 6379
loglevel notice
logfile /data/redis.log
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dir /data
appendonly yes
slave-priority 90
slaveof 192.168.0.10 6379
--------------------配置说明----------------------------
#127.0.0.1只允许本机访问,改为0.0.0.0 允许外部访问
bind 127.0.0.1
#修改为 no,默认为yes 开启保护模式
将protected-mode
#注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码
#是设置redis登录认证的密码, 如: redis-cli > auth 密码
requirepass password
#打开redis持久化配置, 启用AOF持久化方式, 设置为no重启数据不会保存
appendonly yes
# 设置从节点的优先级。设置成不同的优先级
slave-priority 100
#设置master服务器的ip和端口,配置文件里面指定slaveof,则不会升级为主节点
slaveof 192.168.0.10 6378
#下载redis
docker pull redis:5.0
docker run -d \
-p 6379:6379 \
-v /data/redis/master/db:/data \
-v /data/redis/master/redis.conf:/data/redis.conf \
-v /data/redis/master/redis.log:/data/redis.log \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--name group_redis_master redis:5.0 \
redis-server /data/redis.conf
docker run -d \
-p 6379:6379 \
-v /data/redis/slave/db:/data \
-v /data/redis/slave/redis.conf:/data/redis.conf \
-v /data/redis/slave/redis.log:/data/redis.log \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--name group_redis_slave redis:5.0 \
redis-server /data/redis.conf
将主机的6379端口关联到容器的6379端口
-p 6379:6379
将主机中当前目录下的/data/redis/cluster/data挂载到容器的/data
-v /data/redis/master/data:/data
#用户密码验证
auth 密码
#基本信息
info
#查看主从节点信息
info Replication
# 取消主备,变更为主节点
slaveof no one
# 将192.168.0.10:6377设置为新主节点,该指令需要在当前主节点上执行
slaveof 192.168.0.10 6379
https://blog.csdn.net/qq_28804275/article/details/80938659
https://www.jianshu.com/p/f3c6139284a6?from=timeline
--------------192.168.0.10/11/12目录结构-------------------
[root@centos01 sentinel]# pwd
/data/redis/sentinel
[root@centos01 sentinel]# tree
.
├── db
│ ├── sentinel.conf
│ └── sentinel.log
├── sentinel.conf
└── sentinel.log
--------------192.168.0.10/11/12服务器新建文件夹与文件-------------------
cd /data/redis/sentinel
mkdir db
touch sentinel.conf
touch sentinel.log
vim /data/redis/sentinel/conf/sentinel.conf
port 26000
sentinel monitor mymaster 192.168.0.10 6379 2
#sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
logfile /data/sentinel.log
dir /data
port 26000 ##是sentinel节点的端口
#格式: sentinel monitor master-name ip port quorum
#mymaster ##自定义集群名
#ip ##主库ip
#port ##主库port
#quorum ##最小投票数,小于总节点数,可以设置为总节点数-1
sentinel monitor mymaster 127.0.0.1 6379 1
# 注:redis主从库搭建的时候,要么都不配置密码(这样下面这句也不需要配置),不然都需要设置成一样的密码
sentinel auth-pass mymaster password
sentinel down-after-milliseconds 10000 #master经过10000毫秒数无法访问, 则使其处于S_DOWN状态。
sentinel failover-timeout mymaster 60000 #指定故障转移超时时间(以毫秒为单位), 默认为3分钟。
sentinel parallel-syncs 1 ## 同步故障转移时的节点数,此数值越小故障转移越慢
logfile /data/sentinel.log ##日志存储位置
dir /data ##工作目录
docker run -d \
-p 26000:26000 \
-v /data/redis/sentinel/db:/data \
-v /data/redis/sentinel/sentinel.conf:/data/sentinel.conf \
-v /data/redis/sentinel/sentinel.log:/data/sentinel.log \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--name group_redis_sentinel_1 redis:5.0 \
redis-sentinel /data/sentinel.conf
----------------------配置说明-----------------------------
#通过redis-sentinel启动,并指定配置文件为/conf/sentinel.conf
redis-sentinel /conf/sentinel.conf
1、连接
redis-cli -p 26000 (26001 | 26002)
2、查看
sentinel master mymaster 或 sentinel slaves mymaster
[root@centos01 redis]# pwd
/data/redis
[root@centos01 redis]# tree
.
├── 7000
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
├── 7001
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
├── 7002
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
├── 7003
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
├── 7004
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
├── 7005
│ ├── data
│ │ ├── appendonly.aof
│ │ ├── dump.rdb
│ │ └── nodes.conf
│ └── redis.conf
port 7000
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7000
cluster-announce-bus-port 17000
appendonly yes
--------------------------配置说明-------------------------------------
port 7000 ##节点端口
bind 0.0.0.0
protected-mode no
cluster-enabled yes ##cluster集群模式
cluster-config-file nodes.conf ##集群配置名
cluster-node-timeout 5000 ##超时时间
cluster-announce-ip 192.168.0.13 ##实际为各节点网卡分配ip
cluster-announce-port 7000 ##节点映射端口
cluster-announce-bus-port 17000 ##节点总线端,等于port + 10000
appendonly yes ##持久化模式
cat 700*/redis.conf
[root@centos01 redis]# cat 700*/redis.conf
port 7000
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7000
cluster-announce-bus-port 17000
appendonly yes
port 7001
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7001
cluster-announce-bus-port 17001
appendonly yes
port 7002
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7002
cluster-announce-bus-port 17002
appendonly yes
port 7003
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7003
cluster-announce-bus-port 17003
appendonly yes
port 7004
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7004
cluster-announce-bus-port 17004
appendonly yes
port 7005
bind 0.0.0.0
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.13
cluster-announce-port 7005
cluster-announce-bus-port 17005
appendonly yes
docker run -d \
-p 7000:7000 \
-p 17000:17000 \
-v /data/redis/7000/data:/data \
-v /data/redis/7000/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7000 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7001:7001 \
-p 17001:17001 \
-v /data/redis/7001/data:/data \
-v /data/redis/7001/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7001 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7002:7002 \
-p 17002:17002 \
-v /data/redis/7002/data:/data \
-v /data/redis/7002/redis.conf:/conf/redis.conf \
--privileged=true \
-v /etc/localtime:/etc/localtime:ro \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7002 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7003:7003 \
-p 17003:17003 \
-v /data/redis/7003/data:/data \
-v /data/redis/7003/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7003 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7004:7004 \
-p 17004:17004 \
-v /data/redis/7004/data:/data \
-v /data/redis/7004/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7004 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7005:7005 \
-p 17005:17005 \
-v /data/redis/7005/data:/data \
-v /data/redis/7005/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7005 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7006:7006 \
-p 17006:17006 \
-v /data/redis/7006/data:/data \
-v /data/redis/7006/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7006 redis:5.0 \
redis-server /conf/redis.conf
docker run -d \
-p 7007:7007 \
-p 17007:17007 \
-v /data/redis/7007/data:/data \
-v /data/redis/7007/redis.conf:/conf/redis.conf \
-v /etc/localtime:/etc/localtime:ro \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
--name group_redis_7007 redis:5.0 \
redis-server /conf/redis.conf
redis-cli --cluster create \
192.168.0.13:7000 192.168.0.13:7001 192.168.0.13:7002 \
192.168.0.13:7003 192.168.0.13:7004 192.168.0.13:7005 \
--cluster-replicas 1
----------------------创建集群成功--------------------------
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
redis-cli --cluster add-node 192.168.0.13:7006 192.168.0.13:7000
redis-cli --cluster add-node 192.168.0.13:7007 192.168.0.13:7000 --cluster-slave --cluster-master-id 92fd22324c88156a54a6d6a3d85e59a0b4bafe27
--------------------------参数说明------------------------------
--cluster-master-id 主节点id ##可以通过cluster nodes查看主节点id
redis-cli --cluster reshard 192.168.0.13:7000
。。。
How many slots do you want to move (from 1 to 16384)? 1234
What is the receiving node ID? 92fd22324c88156a54a6d6a3d85e59a0b4bafe27
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: all
##从all(其它所有主节点)分配1234个数据片到92fd22324c88156a54a6d6a3d85e59a0b4bafe27这个新的主节点
redis-cli --cluster del-node 192.168.0.13:7007 3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
--------------------------参数说明------------------------------
3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e是被删除的节点id
cluster nodes
cluster info
cluster slots
将16384个slot平均分配给6379,6380,6381三个节点。
redis-cli -p 7000 cluster addslots {0..5461}
redis-cli -p 7001 cluster addslots {5462..10922}
redis-cli -p 7002 cluster addslots {10923..16383}
redis-cli -p 7000 cluster meet 192.168.0.13 7001
redis-cli -p 7000 cluster meet 192.168.0.13 7002
redis-cli -p 7000 cluster meet 192.168.0.13 7003
redis-cli -p 7000 cluster meet 192.168.0.13 7004
redis-cli -p 7000 cluster meet 192.168.0.13 7005
基于 Twemproxy 与 Codis 的 redis 集群方案比较 https://blog.csdn.net/diligent203/article/details/84788829
redis的集群方案对比(Codis对比Twemproxy) https://www.jianshu.com/p/83ac498e1b2c
https://github.com/RedisBloom/RedisBloom#2-use-redisbloom-with-redis-cli
[root@centos01 RedisBloom-master]# pwd
/data/redis/RedisBloom-master
[root@centos01 RedisBloom-master]# tree -L 1
.
├── contrib
├── Dockerfile
├── docs
├── LICENSE
├── Makefile
├── mkdocs.yml
├── ramp.yml
├── README.md
├── redisbloom.so
├── rmutil
├── src
└── tests
##进入下面目录,进行编译
cd /data/redis/RedisBloom-master
mkdir
A、将redisbloom.so文件放入db目录中
[root@centos01 simple]# pwd
/data/redis/simple
[root@centos01 simple]# tree
.
├── db
│ ├── appendonly.aof
│ ├── dump.rdb
│ ├── redisbloom.so
│ ├── redis.conf
│ └── redis.log
├── redis.conf
└── redis.log
B、在配置文件中添加loadmodule /data/redisbloom.so,如下
[root@centos01 simple]# cat ./redis.conf
loadmodule /data/redisbloom.so
bind 0.0.0.0
port 6379
C、重启redis
格式:bf.add
bf.add myBloom uid1
格式:bf.exists
bf.exists myBloom uid1
示例:
127.0.0.1:6379> bf.add myBloom name1
(integer) 1
127.0.0.1:6379> bf.add myBloom name2
(integer) 1
127.0.0.1:6379> bf.add myBloom name3
(integer) 1
127.0.0.1:6379> bf.exists myBloom name4
(integer) 0
127.0.0.1:6379> bf.exists myBloom name3
(integer) 1
写两个lua脚本:
A、添加数据到指定名称的布隆过滤器
B、从指定名称的布隆过滤器获取key是否存在的脚本