redis安装使用

1、redis五大数据类型,开发必会的技能
  • String:字符串是最基本的 key-value 数据类型

  • Hash:哈希是键值对集合,适用于存储小型结构化数据

  • Set:集合是无序的字符串集合,通常用于执行集合操作

  • Sorted Set:有序集合是一种可排序的集合,通过分数来进行排序

  • List:列表是简单的字符串列表,按照插入顺序排序。可以添加一个元素到列表的头部(左边)或者尾部(右边)

 

1、redis安装:利用yum安装redis

  1、yum安装redis提示以下错误信息:

  

  安装epel-release

yum -y install epel-release

  2、再次安装redis

yum -y install redis

 

2、redis配置文件基本参数,配置文件路径/etc/redis.conf

 

################################## NETWORK #####################################
#绑定redis启动地址,如果支持远程连接需要把127.0.0.1修改为0.0.0.0
bind 127.0.0.1

#是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,
#拒绝外部访问。要是开启了密码和bind,可以开启。否则最好关闭,设置为no
protected-mode yes

#这里redis监听端口,该端口需要改直接把6379改成需要设置的端口即可
port 6379

#此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义
#的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端
#速度缓慢的时候,可以将这二个参数一起参考设定。该内核参数默认值一般是128,对于负载很大的服务程序来说
#大大的不够。一般会将它修改为2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,
#然后在终端中执行sysctl -p
tcp-backlog 511
 
#设置客户端空闲超过timeout,服务端断开连接,为0则服务端不会主动断开连接,不能小于0
timeout 0
 
#tcp keepalive参数。如果设置不为0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有两个好处:
#1、检测挂掉的对端。
#2、从中间的网络设备的角度进行连接。
#在Linux上,指定的值(以秒为单位)是用于发送ack的周期。
#注:要关闭连接,需要双倍的时间。这个选项的合理值是300秒,这是新的Redis默认值,从Redis 3.2.1开始。
tcp-keepalive 300
 
#是否在后台运行,yes:后台运行;no:不是后台运行
daemonize yes
 
#如果指定了一个pid文件,Redis会在启动时指定,并在退出时删除它。当服务器运行非守护进程时,
#如果配置中没有指定pid文件,则不会创建pid文件。当服务器被守护时,即使没有指定,也会使用pid文件,
#默认为“/var/run/redis.pid”。创建一个pid文件是最好的工作:如果Redis不能创建它,那么服务器就会正常启动
pidfile /var/run/redis_6379.pid
 
#指定了日志的级别。级别包括:
#debug(很多信息,方便开发、测试)
#verbose(许多很少的信息,但是没有debug级别信息多)
#notice(适度详细,生产中需要)
#warn(只有非常重要/关键的消息被记录)
loglevel notice
 
#指定了记录日志的文件。空字符串的话,日志会打印到标准输出设备。后台运行的redis标准输出是/dev/null
logfile /usr/local/redis/var/redis.log
 
#数据库的数量,默认使用的数据库是0。可以使用”SELECT 【数据库序号】“命令选择一个数据库,序号从0开始
databases 16

#设置redis密码找到requirepass foobared把foobared改为密码。例如密码设置为123456
requirepass 123456

 

注:redis端口后在使用systemctl start redis 启动时候不能在启动连接到配置文件,利用redis-server 指定redis配置文件启动。

启动命令如下:

redis-server /etc/redis.conf 这个命令启动redis后会一直停留在前台,停留到后台运行修改配置/etc/redis.conf 找到:daemonize no 修改为daemonize yes

 

3、redis RDB(数据持久化)配置参数说明

RDB数据持久化介绍:
内存数据保存到磁盘,在制定的时间间隔内生产数据集的时间点快照(point-in-time snapshot)
优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现
rdb通过redis中使用save命令触发rdb。RDB实现持久化相关参数如下:

################################ SNAPSHOTTING  ################################
#RDB机制:
#在900秒内,有1个修改触发下面机制
save 900 1

#在300秒内,有10个修改触发下面机制
save 300 10

#在60秒内,有10000个修改触发下面机制
save 60 10000

#当RDB持久化出现错误后,是否依然进行继续进行工作,yes:不能进行工作,no:可以继续进行工作,可以通
#过info中的rdb_last_bgsave_status了解RDB持久化是否有错误
stop-writes-on-bgsave-error yes
 
#配置存储至本地数据库时是否压缩数据,默认为yes。Redis采用LZF压缩方式,但占用了一点CPU的时间。若关闭该选
#项,但会导致数据库文件变的巨大。建议开启。
rdbcompression yes
 
#是否校验rdb文件;从rdb格式的第五个版本开始,在rdb文件的末尾会带上CRC64的校验和。这跟有利于文件的
#容错性,但是在保存rdb文件的时候,会有大概10%的性能损耗,所以如果你追求高性能,可以关闭该配置
rdbchecksum yes
 
#rdb持久化文件名称(dum.rdb名称可以修改为其它“文件名称.rdb”名称),一般采用默认的 dump.rdb
dbfilename dump.rdb

#RDB和AOF定义持久化文件存放位置
dir /var/lib/redis

注: 

  1)如果没有触发redis持久化时间机制,数据文件是不会生成的,redis重启后进程也会丢失

  2)可以通过编写脚本,让redis手动执行save命令,触发持久机制,在redis命令中,直接输入save即可触发持久化

  3)存在了rdb持久化文件后,重启redis进程数据也不会丢失。redis在重启后,会读取dump.rdb文件中的数据

 

 4、AOF持久化参数说明

AOF(append-only log file)
记录服务器执行的所有变更操作命令(例如:set del 等),并在服务器启动时,通过重新执行这些命令来还原数据集
AOF文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾
优点:最大程序保证数据不丢失
缺点:日志记录非常大

AOF持久化参数如下:

############################## APPEND ONLY MODE ###############################
#是否开启AOF持久化,配置文件默认为关闭(no),开启(yes)
appendonly yes

#AOF持久化文件名(appendonly.aof名称可以修改为其它“文件名称.aof”名称)
appendfilename "appendonly.aof"

#总是修改类的操作,这个参数默认是注释掉的
#appendfsync always

#每秒做一次持久化,参数默认是正常
appendfsync everysec

#依赖于系统自带的缓存大小机制,这个参数默认是注释掉的
#appendfsync no

# 在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行
#fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的
#应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。设置为yes表
#示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的
#默认fsync策略是30秒。可能丢失30秒数据
no-appendfsync-on-rewrite no
 
#aof自动重写配置。当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件
#增长到一定大小的时候Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得
#到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程
auto-aof-rewrite-percentage 100
 
#设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写
auto-aof-rewrite-min-size 64mb
 
#aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所
#在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项(redis宕机或者异常终止不会造
#成尾部不完整现象。)出现这种现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,
#当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-
#check-aof修复AOF文件才可以
aof-load-truncated yes
 
#加载redis时,可以识别AOF文件以“redis”开头。
#字符串并加载带前缀的RDB文件,然后继续加载AOF尾巴
aof-use-rdb-preamble yes

 

5、Redis主从配置文件说明

 

################################# REPLICATION #################################
# redis主从复制是永久生效例如:。
slaveof 主redisIP地址 主redis运行的端口
 
#如果master设置了requirepass,那么slave要连上master,需要有master的密码才行。
#masterauth就是用来配置master的密码,这样可以在连上master后进行认证。
masterauth 主redis密码
 
#当从库同主机失去连接或者复制正在进行,从机库有两种运行方式:
#1) 如果slave-serve-stale-data设置为yes(默认设置),将仍然回复客户端请求,可能包含过期数据,
#或者如果这是第一次同步,则数据集可能只是空的。
#2) 如果slave-serve-stale-data设置为no,slave所有类型的命令都有一个错误
#”SYNC with master in progress”。
replica-serve-stale-data yes
 
#作为从服务器,默认情况下是只读的(yes),可以修改成NO用于写(不建议)
replica-read-only yes
 
# 是否使用socket方式复制数据。目前redis复制提供两种方式,disk和socket。
#如果新的slave连上来或者重连的slave无法部分同步,就会执行全量同步,master会生成rdb文件。
#有2种方式:
#disk方式是master创建一个新的进程把rdb文件保存到磁盘,再把磁盘上的rdb文件传递给slave。
#socket是master创建一个新的进程,直接把rdb文件以socket的方式发给slave。disk方式的时候,
#当一个rdb保存的过程中,多个slave都能共享这个rdb文件。socket的方式就的一个个slave顺序复制。
#在磁盘速度缓慢,网速快的情况下推荐用socket方式。
repl-diskless-sync no
 
#diskless复制的延迟时间,防止设置为0。一旦复制开始,节点不会再接收新slave的复制请求直到下一个
#rdb传输。所以最好等待一段时间,等更多的slave连上来
repl-diskless-sync-delay 5
 
#slave根据指定的时间间隔向服务器发送ping请求。时间间隔可以通过 
#repl_ping_slave_period 来设置,默认10秒。默认是注释掉的
# repl-ping-slave-period 10
 
# 复制连接超时时间。master和slave都有超时时间的设置。
#master检测到slave上次发送的时间超过#repl-timeout,即认为slave离线,清除该slave信息。
#slave检测到上次和master交互的时间超过#repl-timeout,则认为master离线。
#需要注意的是repl-timeout需要设置一个比repl-ping-slave-#period更大的值,不然会经常检测到超时。
#默认注释掉的
# repl-timeout 60
 
#是否禁止复制tcp链接的tcp nodelay参数,可传递yes或者no。默认是no,即使用tcp nodelay。
#如果master设置了yes来禁止tcp nodelay设置,在把数据复制给slave的时候,
#会减少包的数量和更小的#网络带宽。但是这也可能带来数据的延迟。
#默认我们推荐更小的延迟,但是在数据量#传输很大的场景下,建议选择yes
repl-disable-tcp-nodelay no
 
#复制缓冲区大小,这是一个环形复制缓冲区,用来保存最新复制的命令。这样在slave离线的时候,不需要完
#全复制master的数据,如果可以执行部分同步,只需要把缓冲区的部分数据复制给slave,就能恢复正常复制状态。
#缓冲区的大小越大,slave离线的时间可以更长,复制缓冲区只有在有slave连接的时候才分配内存。
#slave的一段时间,内存会被释放出来,默认1m。默认是注释掉的
# repl-backlog-size 1mb
 
# master没有slave一段时间会释放复制缓冲区的内存,repl-backlog-ttl用来设置该时间长度。
#单位为秒。默认是注释掉的
# repl-backlog-ttl 3600
 
# 当master不可用,Sentinel会根据slave的优先级选举一个master。
#最低的优先级的slave,当选master。而配置成0,永远不会被选举
replica-priority 100
 
#redis提供了可以让master停止写入的方式,如果配置了min-replicas-to-write,健康的slave的个数#小于N,mater就禁止写入。
#master最少得有多少个健康的slave存活才能执行写命令。
#这个配置虽然不能保#证N个slave都一定能接收到master的写操作,但是能避免没有足够健康的slave的时候,
#master不能写入来避免数据丢失。设置为0是关闭该功能。默认是注释掉的
# min-replicas-to-write 3
 
# 延迟小于min-replicas-max-lag秒的slave才认为是健康的slave。默认是注释掉
# min-replicas-max-lag 10

注:  

  1、临时主从设置命令(注:哪redis需要作为从服务器,在哪个机器上面执行下面的命令。主redis不用做任何设置)

  slaveof 主redisIP地址 主redis运行的端口

  2、查看主从关系命令

  info replication

  3、临时设置主从复制的时候redis主设置了密码需要在redis配置文件里面添加 masterauth 主redis密码

  如果不添加从redis不能连接到主redis。则数据不能同步 

 

6、Rediis主从哨兵模式(redis-sentinel)

redis-sentinel是一个独立运行的进程,用于监控master-slave集群,自动发现master宕机,进行自动切换slave为master

  1、Redis-Sentinel功能说明

    1、 监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
    2、 如果被标识的是主节点,sentinel就会和其它的sentinel节点协调,如果其
        它节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转移
    3、 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容会
        发生改变。即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换 

  2、Redis-Sentinel故障转移流程

    1、多个sentinel发现并确认master有问题
    2、选举出一个sentinel作为领导
    3、选出一个slave作为master
    4、通知其余slave成为新的master的slave
    5、通知客户端主从变化
    6、等待老的master恢复成为新的master的slave  

  3、Redis-Sentinel配置说明

#sentinel监听端口
port 26379

#关闭保护模式(此配置很重要,不配置将无法实现主从切换)
protected-mode no

#守护进行运行
daemonize yes

指的是redis数据存储目录
dir /var/lib/data

#Sentinel日志存放路径文件名称
logfile /var/log/redis/sentinel.log

#当前Sentinel节点监控 127.0.0.1 6379
#2代表判断主节点失败至少需要2个Sentinel节点同意
#mymaster是主节点别名
sentinel monitor mymaster 127.0.0.1 6379 2

#添加redis主节点redis密码(redis无密码时不需要此配置)
sentinel auth-pass mymaster password(主节点密码)

#每个Sentinel节点都要定期ping命令来判断Redis数据节点和其余Sentinel节点是否可达
#如果超过30000毫秒(30000是30秒)且没有回复,则判断不可达
sentinel down-after-milliseconds mymaster 30000

#当Sentinel节点集合对主节点故障判断达成一致,Sentinel领导者节点会做故障转移操作,选
#出新的节点,原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制草的从
#节点个数为1
sentinel parallel-syncs mymaster 1

#故障转移超时时间为180000
sentinel failover-timeout mymaster 180000

redis一主多从哨兵配置访问:https://www.cnblogs.com/albert919/p/16524256.html

 

posted @ 2023-02-21 22:13  点点滴滴的努力  阅读(89)  评论(0编辑  收藏  举报