一、redis介绍
redis是一个开源的、使用C语言编写的、支持网络交互的、可基于内存也可持久化的Key-Value数据库。官网:http://www.redis.io
1、redis特点
1.丰富的数据结构 ---set、zset、string、list、hash等数据结构的存储。
2.支持持久化。
- 支持事务 ---事务是一个完整的动作,要么全部执行,要么全部不做。
支持主从
2、缓存
1、类型:数据缓存、页面缓存
2、形式:
- 页面缓存经常用在内存管理系统里边
- 数据缓存经常用在页面的具体数据里边
3、缓存服务器的作用:加快访问速度,缓解数据库压力
3、redis和memcache比较
1、Redis不仅仅支持简单的k/v类型的数据,同时还提供了list、set、zset、hash等数据结构的存储。
2、Redis支持master-slave模式应用。
3、Redis支持数据的持久化。
二、安装Redis
1、安装单机版Redis
---创建工作目录
[root@redis-master ~]# mkdir -p /data/application
---下载Redis
[root@redis-master ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz
---解压
[root@redis-master ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/
[root@redis-master ~]# cd /data/application/
[root@redis-master application]# mv redis-4.0.9/ redis
[root@redis-master application]# cd redis/
---安装编译工具
[root@redis-master redis]# yum install -y gcc make
[root@redis-master redis]# make
注意:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。
---备份
[root@redis-master redis]# cp redis.conf redis.conf.bak
[root@redis-master redis]# vim redis.conf
修改以下内容:
bind 192.168.124.100 #只监听内网IP
daemonize yes #开启后台模式将on改为yes
timeout 300 #连接超时时间
port 6379 #端口号
dir /data/application/redis/data #本地数据库存放持久化数据的目录该目录-----需要存在
pidfile /var/run/redis_6379.pid #定义pid文件
logfile /var/log/redis.log #定义log文件
---创建存放数据的目录
[root@redis-master redis]# mkdir /data/application/redis/data
---配置redis为systemctl启动
[root@redis-master redis]# cd /lib/systemd/system
[root@redis-master system]# vim redis.service
[Unit] //基础
Description=Redis //描述
After=network.target
[Service] //服务信息
ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no //启动服务的命令
ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown //停止服务的命令
[Install]
WantedBy=multi-user.target
启动服务:
[root@redis-master system]# systemctl daemon-reload
[root@redis-master system]# systemctl start redis.service
2、登录Redis
[root@redis-master system]# cd /data/application/redis/src/
[root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379
192.168.246.202:6379> ping ---测试redis是否可以用
PONG
192.168.246.202:6379> set name newrain #设置key--name,并设置值
OK
192.168.246.202:6379> get name #获取到key
"newrain"
3、redis的相关工具
./redis-benchmark #用于进行redis性能测试的工具
./redis-check-dump #用于修复出问题的dump.rdb文件
./redis-cli #redis的客户端
./redis-server #redis的服务端
./redis-check-aof #用于修复出问题的AOF文件
./redis-sentinel #用于集群管理
三、数据持久化
开启持久化功能后,重启redis,数据会自动通过持久化文件恢复!
1、redis持久化 ---两种方式RDB、AOF
- RDB:是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上。
特点:周期性、不影响数据写入、高效性、完整性较差。- AOF:将redis执行过的所有指令记录下来,在下次redis重新启动时,把之前写的指令从前到后再重复执行一遍,就可以实现数据恢复了。
特点:实时性、完整性较好、体积大(记录数据的指令,删除数据的指令都被记录下来)
2、持久化配置
1、RDB默认开启
[root@redis-master src]# cd ..
[root@redis-master redis]# vim redis.conf
#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb
#dir:持久化数据存储在本地的路径
dir /data/application/redis/data
##snapshot触发的时机,save <seconds> <changes>
##如下为900秒后,至少有一个变更操作,才会snapshot
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度
##可以通过“save “”来关闭snapshot功能
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000
##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等
stop-writes-on-bgsave-error yes
##是否启用rdb文件压缩,默认为“yes”,压缩往往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间
rdbcompression yes
2、客户端使用命令进行持久化sava存储
方式一:
[root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379 save #前台进行存储
OK
方式二:
[root@redis-master src]# ./redis-cli -h 192.168.124.100 -p 6379 bgsave #后台进行存储
注意:每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步新数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。
save方式:持久化前面的所有数据(rdb模式没开时,后续的数据不会进行备份)
3、AOF默认关闭--开启
[root@redis-master src]# cd ..
[root@redis-master redis]# vim redis.conf
修改如下:
appendonly yes
1、只有在yes下,AOF重写/文件同步等特性才会生效
2、指定AOF文件名称appendfilename appendonly.aof
3、指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec appendfsync everysec
4、触发aof rewrite的最小文件尺寸 auto-aof-rewrite-min-size 64mb
5、当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage 100
四、Redis主从配置
1、主从用法
- redis支持主从同步,也支持一主多从以及多级结构。
- 主从同步时异步进行。主从同步不会影响主逻辑,也不会降低redis的处理性能。
- 主从结构中,从服务器为只读模式,这样避免从服务器的数据被误修改。但是从服务器可以接受CONFIG等指令,因此不应该直接暴露到不安全的网络环境中。
2、主从同步原理
从服务器会向主服务器发出SYNC指令,当主服务器接到此命令后,就会调用BGSAVE指令来创建一个子进程专门进行数据持久化工作。也就是将主服务器的数据写入RDB文件中,在数据持久化期间,主服务器将执行的写指令都缓存在内存中。
BGSAVE指令执行结束,主服务器将持久化好的RDB文件发送给从服务器,从服务器接受此文件后将其存储到磁盘上,然后再将其读取到文件中。这个动作结束后,主服务器会将这段时间缓存的写指令再以redis协议的格式发送给从服务器。
image.png
五、redis-sentinel ---哨兵模式
1、哨兵简介
Sentinel哨兵是用于监控Redis集群Master状态的工具。
2、作用
- Master状态检测
- Master异常, 则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Master作为Slave
- 主从切换后, master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换
3、工作模式
- 每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令
- 如果一个实例(instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线
- 如果一个Master被标记为主观下线,则正在监视这个Master的所有 Sentinel 要以每秒一次的频率确认Master的确进入了主观下线状态
4.当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认Master的确进入了主观下线状态, 则Master会被标记为客观下线
5、配种哨兵模式
1. 每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0
2. 每台机器上修改sentinel.conf配置文件:修改如下配置
[root@redis-master src]# cd ..
[root@redis-master redis]# vim sentinel.conf
sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip)
sentinel down-after-milliseconds mymaster 3000 #单位毫秒
sentinel failover-timeout mymaster 10000 #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。
protected-mode no #关闭加密模式--新添加到sentinel配置文件中
3. 每台机器启动哨兵服务
[root@redis-master redis]# ./src/redis-sentinel sentinel.conf & #放后台执行
将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换)
[root@redis-master redis]# systemctl stop redis.service
登录slave服务器查看有没有切换
[root@redis-slave-1 redis]# ./src/redis-cli
127.0.0.1:6379> info replication
6、redis有哪些好处
1、速度快,数据存在内存,可直接查询。
2、支持丰富数据类型,支持string、list、set、sorted set,hash
3、支持事务,操作都是原子性(数据的更改要么全部执行要么全部不执行)
4、丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
7、redis安全加密
客户端在向redis-server发送请求之前,先进行密码验证。当你的redis-server处于一个不太可信的网络环境中时,相信你会用上这个功能。由于redis性能非常高,所以每秒钟可以完成多达15万次的密码尝试,所以你最好设置一个足够复杂的密码,否则很容易被黑客破解。
requirepass 1122334
网友评论