hash是一个String类型的field和value的映射表,它的添加、删除操作都是O(1),hash特别适合用于存储对象
特点:无序性。确定性。唯一性
概念:它在set的基础上增加了一个顺序属性,这一属性在添加元素的时候可以指定,每次指定后,zset会自动按新的值调整顺序
可以理解为两列mysql表,一列存储value 一列存储顺序,操作中key理解为zset的名字
Redis的所有数据都保存在内存中,然后不定期的通过异步方式保存到磁盘中(半持久化模式);也可以把每一次数据变化都写入到append only file (aof)里面(全持久化模式)
由于Redis的数据存储在内存中,如果没有配置持久化,redis重启后,数据就会丢失。如果开启了持久化,重启后数据会依然存在,Redis支持两种持久化方式
将Redis内存中的数据在指定的时间间隔内将数据集快照写入磁盘,默认的持久化方式,
触发方式分为手动触发和自动触发
将Redis的操作日志以追加的方式写入文件
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录
缺点:
缺点:
两者之间选择
AOF:牺牲性能、提高缓存一致性
RDB: 不启用备份来换取更高的性能,手动执行save,再做 备份。
安装教程:https://blog.csdn.net/usuallyuser/article/details/84890306
稳定版本5.0.7下载地址 http://download.redis.io/releases/
参看https://blog.csdn.net/suprezheng/article/details/90679790
在bin目录下
./redis-server …/etc/redis.conf
master:10.121.22.10
slave:10.121.22.11
bind 0.0.0.0
port 6379
logfile /usr/local/redis/log/redis.log
dbfilename dump.rdb
daemonize yes
rdbcompression yes
bind 0.0.0.0
port 6379
logfile /usr/local/redis/log/redis.log
dbfilename dump.rdb
daemonize yes
rdbcompression yes
slaveof 10.121.22.10 6379
启动各个节点的redis服务,即可完成主从模式的搭建
sentinel是特殊的redis服务,不提供读写服务,主要用来监控redis实例节点。
哨兵模式中,只有在哨兵集群可用的情况下,这时候 启动服务并且使用redis服务是可以的,
如果应用服务已启动,在使用过程中,sentienl集群挂了,但redis的主从模式正常,这时候仍然可以使用redis服务,但如果此时将应用服务重启,则不能通过sentinel来访问redis服务。
先搭建一个一主二从的主从模式,配置文件的和第三节相同
bind 0.0.0.0
daeminize yes
logfir /usr/local/redis/log/sentinel.log
dir /usr/local/redis/var
sentinel minitor mymaster 10.121.89.202 6379 2
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs master 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
sentinel suth-pass mymaster 123123
protected-mode yes
三个文件都是这样配置
启动顺序,先启动redis服务。然后在启动sentinel服务
其中参数的解释
sentinel monitor master-name ip redis-port quorum
quorum:是一个数字,指当有多少个sentinel认为一个master失效时,master才算真正的失效
sentinel auth-pass [master-name] [passwd]
设置连接master和slave的密码。注意sentinel不能分别却分master和slave设置不同的密码,因此,master和slave的密码应相同
sentienl down0ager-milliseconds master-name milliseconds
这个配置指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的
sentinel parallel-sysns master-name numslaves
这个配置项指定了在发生failover主备切换是最多可以有多少slave同时对新的master进行同步,数字越小,完成故障转移所需的时间越长,
数字越大,就以为这越多的slave因为主从同步而不可用个,可以通过将这个值设为1来保证每次至于一个slave出于不能处理命令请求的状态。
./redis-cli -p 26379进入sentinel控制台,然后执行info,可以查看信息
pop.xml
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
<dependency>
<groupId>org.apache.commonsgroupId>
<artifactId>commons-pool2artifactId>
dependency>
application.yaml
spring:
redis:
password: 123123 #切记在添加密码时,时spring.redis.password而不是spring.redis.sentinel.password,否则回报 password no set
sentinel:
master: mymaster
nodes: 10.121.89.202:26379,10.121.89.203:26379,10.121.59.204:26379
lettuce:
pool:
max-idle: 10
max-active: 20
min-idle: 5
max-wait: 10000ms
负载均衡,高可用,分布式集群模式,最少三个节点,最好对每一个节点添加从节点,(三主三从),没有从的话,数据丢失则找不到,每个节点存储的数据都不一样。
去中心化,每两个节点之间都是相互ping通,每个节点存储的数据都不同,采用分片的形式存储。
最简单的集群模式,三节点,互为主节点,没有从节点。没有副本数
集群中每个节点都会保存集群中其他节点的ip信息,如果超过一半的节点ping某一个主节点时,ping不通,则认为该主节点宕机,然后再启用该主节点的备节点
考虑到上述的条件,在部署时,应该讲主从部署到不同的节点,分离部署,提高集群的可用性,不过不分离部署,一个节点宕机则整个集群宕机。
https://www.cnblogs.com/fousor/p/10598400.html
三主,无从节点,需要密码登录访问
新建redis-cluster文件,添加并新建redis.conf配置文件,配置文件模板为单机部署时模板
修改配置文件
三个配置文件同样的操作
bind 0.0.0.0
port 6379
logfile /usr/local/redis/log/redis.log
dbfilename dump.rdb
dir “/usr/local/redis/var”
daemonize yes
rdbcompression yes
requirepass 123123
cluster-enabled yes
cluster-config-file nodes-1.conf # 创建集群后生成的配置文件,每个节点对应的配置文件名应不相同
cluster-node-timeout 15000 # 默认15s,集群间连接超时时间
启动redis服务,并制定上述的配置文件,redis-server /redis-cluster/redis.conf
验证三个节点是否行程集群
在每一个节点的安装主机中,执行./redis-cli -a 123123进入redis服务
然后执行 cluster info、查看当前的redis集群状态,现在的状态应该是fail
使用redis-cli 创建集群
./redis-cli --cluster create 10.121.89.202:6379 10.121.89.203:6379 10.121.89.204:6379 -a 123123即可完成集群的搭建。
上述指令创建的是三个节点,没有从节点。
在上述配置文件中,增加masterauth 123123
端口号每个主机上保持不一样
规划:
10.121.89.201:6001(主)
10.121.89.201:6002(从----203:6001)
10.121.89.202:6001(主)
10.121.89.202:6002(从----201:6001)
10.121.89.203:6001(主)
10.121.89.203:6002(从----202:6001)
主要在于创建集群命令
./redis-cli -a 123123 --cluster create --cluster-replicas 1 10.121.89.201:6001 10.121.89.202:6001 10.121.89.203:6001 10.121.89.202:6002 10.121.89.203:6002 10.121.89.201:6002
交叉写后面的ip和端口号
#!/bin/sh
NODES=`/usr/local/redis/bin/redis-cli -c -p $2 -h $1 -a 63stag cluster nodes | cut -f2 -d' '`
IFS="
"
for node in $NODES; do
echo Flushing node $node...
/usr/local/redis/bin/redis-cli -h ${node%:*} -p ${node##*:} -c -a 63stag flushall
done
sh clear_database.sh 10.121.55.20 6379
cluster-node-timeout=30000,集群节点超时时间调整为30000,30s,默认为15s,确保足够长的超时时间,避免执行删除数据命令时间过长导致集群发生主从切换
使用阿里云的开源组件redis-shake将redis集群中的数据同步另外一个集群、单机中
步骤
1:下载redis-shake v2.0.2tar.gz
安装在集群中主节点的主机中,解压压缩包,并编辑redis-shake.conf
2:修改配置文件
(1):源Redis集群信息
10.121.89.201:6001;10.121.89.202:6001;10.121.89.203:6001
最后没有“分号”。
(2)目标集群信息
(3)执行数据同步操作
./redis-shake.linux -type=sync -conf=/redis-shake.conf