本文共 13611 字,大约阅读时间需要 45 分钟。
yum安装redis
1.yum安装
#前提得配置好阿里云yum源,epel源#查看是否有redis包yum list redis #安装redis yum install redis -y #安装好,启动redis systemctl start redis
2.检测redis是否工作
redis-cli #redis 客户端工具#进入交互式环境后,执行ping,返回pong表示安装成功127.0.0.1:6379> pingPONG
源码安装redis,编译安装
编译安装的优势是:
- 编译安装时可以指定扩展的module(模块),php、apache、nginx都是一样有很多第三方扩展模块,如mysql,编译安装时候,如果需要就定制存储引擎(innodb,还是MyIASM)
- 编译安装可以统一安装路径,linux软件约定安装目录在/opt/下面
- 软件仓库版本一般比较低,编译源码安装可以根据需求,安装最新的版本
1.下载redis源码wget http://download.redis.io/releases/redis-4.0.10.tar.gz 2.解压缩 tar -zxf redis-4.0.10.tar.gz 3.切换redis源码目录 cd redis-4.0.10.tar.gz 4.编译源文件 make 5.编译好后,src/目录下有编译好的redis指令 6.make install 安装到指定目录,默认在/usr/local/bin
redis可执行文件
./redis-benchmark //用于进行redis性能测试的工具./redis-check-dump //用于修复出问题的dump.rdb文件./redis-cli //redis的客户端./redis-server //redis的服务端./redis-check-aof //用于修复出问题的AOF文件./redis-sentinel //用于集群管理
启动redis服务端
启动redis非常简单,直接./redis-server就可以启动服务端了,还可以用下面的方法指定要加载的配置文件:./redis-server ../redis.conf 默认情况下,redis-server会以非daemon的方式来运行,且默认服务端口为6379。
使用redis客户端
#执行客户端命令即可进入./redis-cli #测试是否连接上redis127.0.0.1:6379 > ping返回pong代表连接上了//用set来设置key、value127.0.0.1:6379 > set name "chaoge"OK//get获取name的值127.0.0.1:6379 > get name"chaoge"
通过新的端口和密码登录redis
redis.conf设置
protected-mode yes #打开保护模式port 6380 #更改默认启动端口requirepass xxxxxx #设置redis启动密码,xxxx是自定义的密码
启动redis服务端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置文件启动redis,且后台启动
使用密码登录redis,使用6380端口
方法1,使用这个
[root@oldboy_python ~ 09:48:41]#redis-cli -p 6380127.0.0.1:6380> auth xxxxOK
方法2,此方案不安全,容易暴露密码
[root@oldboy_python ~ 09:49:46]#redis-cli -p 6380 -a xxxxWarning: Using a password with '-a' option on the command line interface may not be safe.127.0.0.1:6380> pingPONG
补充
检查redis是否设置了密码
127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"2) "xxxxxx"如果没有,也可以给redis设置密码(命令方式)
CONFIG set requirepass "xxxxxx"
发布/订阅 实验
发布订阅的命令
PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE channel [channel ...] 订阅频道,可以同时订阅多个频道 UNSUBSCRIBE [channel ...] 取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道PSUBSCRIBE pattern [pattern ...] 订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所 有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则, 如果没有参数则会退订所有规则PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,必须Provider和Consumer同时在线。
发布订阅:
窗口1,启动两个redis-cli窗口,均订阅diantai 频道(channel)
窗口2,启动发布者向频道 diantai发送消息
[root@web02 ~]# redis-cli127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia'(integer) 2
窗口3,查看订阅者的消息状态
订阅一个或者多个符合模式的频道
窗口1,启动两个redis-cli窗口,均订阅 wang*频道(channel)
127.0.0.1:6379> PSUBSCRIBE wang*Reading messages... (press Ctrl-C to quit)1) "psubscribe"2) "wang*"3) (integer) 1 1) "pmessage"2) "wang*"3) "wangbaoqiang"4) "jintian zhennanshou "
窗口2,启动redis-cli窗口,均订阅wang*频道
127.0.0.1:6379> PSUBSCRIBE wang*Reading messages... (press Ctrl-C to quit)1) "psubscribe"2) "wang*"3) (integer) 11) "pmessage"2) "wang*"3) "wangbaoqiang"4) "jintian zhennanshou "
窗口3,发布者消息
[root@web02 ~]# redis-cli127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou "(integer) 2
redis持久化
Redis
是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis
提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失。
RDB持久化
redis
提供了RDB持久化
的功能,这个功能可以将redis
在内存中的的状态保存到硬盘中,它可以手动执行。
也可以再redis.conf
中配置,定期执行。
RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态
RDB(持久化)内存数据保存到磁盘在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)优点:速度快,适合做备份,主从复制就是基于RDB持久化功能实现rdb通过再redis中使用save命令触发 rdbrdb配置参数:dir /data/6379/dbfilename dbmp.rdb每过900秒 有1个操作就进行持久化save 900秒 1个修改类的操作save 300秒 10个操作save 60秒 10000个操作save 900 1save 300 10save 60 1000
redis持久化之RDB实践
1.启动redis服务端,准备配置文件
daemonize yesport 6379logfile /data/6379/redis.logdir /data/6379 #定义持久化文件存储位置dbfilename dbmp.rdb #rdb持久化文件bind 10.0.0.10 127.0.0.1 #redis绑定地址requirepass redhat #redis登录密码save 900 1 #rdb机制 每900秒 有1个修改记录save 300 10 #每300秒 10个修改记录save 60 10000 #每60秒内 10000修改记录
2.启动redis服务端
3.登录redis设置一个key
redis-cli -a redhat
4.此时检查目录,/data/6379底下没有dbmp.rdb文件
5.通过save触发持久化,将数据写入RDB文件
127.0.0.1:6379> set age 18OK127.0.0.1:6379> saveOK
redis持久化之AOF
AOF(append-only log file)
记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。优点:最大程序保证数据不丢缺点:日志记录非常大redis-client 写入数据 > redis-server 同步命令 > AOF文件
配置参数
AOF持久化配置,两条参数appendonly yesappendfsync always 总是修改类的操作 everysec 每秒做一次持久化 no 依赖于系统自带的缓存大小机制
1.准备aof配置文件 redis.conf
daemonize yesport 6379logfile /data/6379/redis.logdir /data/6379dbfilename dbmp.rdbrequirepass redhatsave 900 1save 300 10save 60 10000appendonly yesappendfsync everysec
2.启动redis服务
redis-server /etc/redis.conf
3.检查redis数据目录/data/6379/是否产生了aof文件
[root@web02 6379]# lsappendonly.aof dbmp.rdb redis.log
4.登录redis-cli,写入数据,实时检查aof文件信息
[root@web02 6379]# tail -f appendonly.aof
5.设置新key,检查aof信息,然后关闭redis,检查数据是否持久化
redis-cli -a redhat shutdownredis-server /etc/redis.confredis-cli -a redhat
redis不重启之rdb数据切换到aof数据
redis.conf服务端配置文件
daemonize yesport 6379logfile /data/6379/redis.logdir /data/6379dbfilename dbmp.rdbsave 900 1 #rdb机制 每900秒 有1个修改记录save 300 10 #每300秒 10个修改记录save 60 10000 #每60秒内 10000修改记录
启动redis服务端
redis-server redis.conf
登录redis-cli插入数据,手动持久化
127.0.0.1:6379> set name chaogeOK127.0.0.1:6379> set age 18OK127.0.0.1:6379> set addr shaheOK127.0.0.1:6379> saveOK
检查RDB文件
[root@pyyuc /data 22:34:16]#ls 6379/dbmp.rdb redis.log
备份这个rdb文件,保证数据安全
[root@pyyuc /data/6379 22:35:38]#cp dbmp.rdb /opt/
执行命令,开启AOF持久化
127.0.0.1:6379> CONFIG set appendonly yes #开启AOF功能OK127.0.0.1:6379> CONFIG SET save "" #关闭RDB功能OK
确保数据库的key数量正确
127.0.0.1:6379> keys *1) "addr"2) "age"3) "name"
确保插入新的key,AOF文件会记录
127.0.0.1:6379> set title golangOK
参考:
总结:
1.在linux安装redis通过源码编译安装redis1.下载源码包 wget http://download.redis.io/releases/redis-4.0.10.tar.gz2.解压缩redis tar -zxf redis-4.0.10.tar.gz 3.进入redis源码,直接可以编译且安装 cd redis-4.0.10 make && make install 4.可以指定配置文件启动redis vim /opt/redis-4.0.10/redis.conf 更改 仅修改: daemonize yes 启动 redis-server redis.conf 使用客户端 redis-cli ping 出现 PONG 成功 vim /opt/redis-4.0.10/redis.conf 1.更改bind参数,让redis可以远程访问 bind 0.0.0.0 2.更改redis的默认端口 port 6380 3.使用redis的密码进行登录 requirepass 登录redis的密码 4.指定配置文件启动 redis-server redis.conf 5.通过新的端口和密码登录redisredis-cli -p 6380登录后auth 密码keys * 查看数据redis还支持交互式的参数,登录数据库redis-cli -p 6380 -a redis的密码 (这个不太安全)6.通过登录redis,用命令查看redis的密码config set requirepass 新的密码 #设置新密码config get requirepass #获取当前的密码过滤出文件的空白行和注释行grep -v "^#" redis.conf | grep -v "^$"
redis发布订阅三个角色,提供的redis命令1.发布者 publish 频道 消息 给频道发消息2.订阅者 SUBSCRIBE 频道 订阅频道 PSUBSCRIBE 频道* 支持模糊匹配的订阅3.频道 channel 频道名 自定义 redis持久化之RDB1.在配置文件中添加参数,开启rdb功能进入redis工作目录[root@localhost redis-4.0.10]# vim redis.confredis.conf 写入 port 6379 daemonize yes 后台运行 logfile /data/6379/redis.log 日志文件 dir /data/6379 制定数据文件 dbfilename s15.rdb save 900 1 #rdb机制 每900秒 有1个修>改记录 save 300 10 #每300秒 10个修改记录 save 60 10000 #每60秒内 10000修>改记录2.开启redis服务端,测试rdb功能redis-server redis.conf redis持久化之aof1.开启aof功能,在redis.conf中添加参数 port 6379 daemonize yes logfile /data/6379/redis.log dir /data/6379 appendonly yes appendfsync everysec2.启动redis服务端,指定aof功能,测试持久化数据 redis不重启之rdb数据切换到aof数据1.准备rdb的redis服务端 redis-server s15-redis.conf (注明这是在rdb持久化模式下)2.切换rdb到aofredis-cli 登录redis,然后通过命令,激活aof持久化127.0.0.1:6379> CONFIG set appendonly yes #用命令激活aof持久化(临时生效,注意写入到配置文件)OK127.0.0.1:6379> 127.0.0.1:6379> 127.0.0.1:6379> CONFIG SET save "" #关闭rdb持久化2.5 将aof操作,写入到配置文件,永久生效,下次重启后生效 port 6379 daemonize yes logfile /data/6379/redis.log dir /data/6379 #dbfilename s15.rdb #save 900 1 #save 300 10 #save 60 10000 appendonly yes appendfsync everysec3.测试aof数据持久化 ,杀掉redis,重新启动kill redis-server s15-redis.conf 4.写入数据,检查aof文件redis的主从同步1.检查redis数据库信息,主从状态的命令redis-cli -p 6379 info 检查数据库信息redis-cli -p 6379 info replication 检查数据库主从信息 1.准备三个redis配置文件,通过端口的区分,启动三个redis数据库实例,然后配置主从复制redis-6379.conf port 6379 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dbfilename dump.rdb dir /data/6379 redis-6380.conf #通过命令快速生成配置文件 sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf 在redis-6380.conf中写入 slaveof 127.0.0.1 6379 #指明主库的身份ip 和端口redis-6381.conf #通过命令快速生成配置文件 sed "s/6379/6381/g" redis-6379.conf > redis-6381.conf 在redis-6381.conf中写入 slaveof 127.0.0.1 63792.启动三个数据库实例,检测redis主从同步方案3.redis主从赋值,故障手动切换, 1.杀死6379的主库实例 kill 主库 2.手动切换主从身份 1.登录 redis-6380 ,通过命令,去掉自己的从库身份,等待连接 slaveof no one 2.登录redis-6381 ,通过命令,生成新的主任 slaveof 127.0.0.1 6380 3.测试新的主从数据同步 redis哨兵1.什么是哨兵呢?保护redis主从集群,正常运转,当主库挂掉之后,自动的在从库中挑选新的主库,进行同步2.redis哨兵的安装配置 1. 准备三个redis数据库实例(三个配置文件,通过端口区分) [root@localhost redis-4.0.10]# redis-server redis-6379.conf [root@localhost redis-4.0.10]# redis-server redis-6380.conf [root@localhost redis-4.0.10]# redis-server redis-6381.conf 2.准备三个哨兵,准备三个哨兵的配置文件(仅仅是端口的不同26379,26380,26381) -rw-r--r-- 1 root root 227 Jan 2 18:44 redis-sentinel-26379.conf touch redis-sentinel-26379.conf vim redis-sentinel-26379.conf 写入以下 port 26379 dir /var/redis/data/ logfile "26379.log" sentinel monitor s15master 127.0.0.1 6379 2 sentinel down-after-milliseconds s15master 30000 sentinel parallel-syncs s15master 1 sentinel failover-timeout s15master 180000 daemonize yes -rw-r--r-- 1 root root 227 Jan 2 18:45 redis-sentinel-26380.conf 快速生成配置文件 sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf -rw-r--r-- 1 root root 227 Jan 2 18:46 redis-sentinel-26381.conf sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf 3.添加后台运行参数,使得三个哨兵进程,后台运行 [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26379.conf [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26380.conf [root@localhost redis-4.0.10]# echo "daemonize yes" >> redis-sentinel-26381.conf 4.启动三个哨兵 redis-sentinel redis-sentinel-26379.conf redis-sentinel redis-sentinel-26380.conf redis-sentinel redis-sentinel-26381.conf 5.检查哨兵的通信状态 redis-cli -p 26379 info sentinel 查看结果如下之后,表示哨兵正常 [root@localhost redis-4.0.10]# redis-cli -p 26379 info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=s15master,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3 6.杀死一个redis主库,6379节点,等待30s以内,检查6380和6381的节点状态 kill 6379主节点 redis-cli -p 6380 info replication redis-cli -p 6381 info replication 如果切换的主从身份之后,(原理就是更改redis的配置文件,切换主从身份) 7.恢复6379节点的数据库,查看是否将6379添加为新的slave身份 redis-cluster安装配置1.准备6个redis数据库实例,准备6个配置文件redis-{7000....7005}配置文件 [root@localhost redis-4.0.10]# mkdir s15rediscluster cd s15rediscluster touch redis-7000.conf vim redis-7000.conf 写入以下 port 7000 daemonize yes dir "/opt/redis/data" logfile "7000.log" dbfilename "dump-7000.rdb" cluster-enabled yes cluster-config-file nodes-7000.conf 创建六个 [root@localhost s15rediscluster]# sed "s/7000/7001/g" redis-7000.conf >redis-7001.conf [root@localhost s15rediscluster]# sed "s/7000/7002/g" redis-7000.conf >redis-7002.conf [root@localhost s15rediscluster]# sed "s/7000/7003/g" redis-7000.conf >redis-7003.conf [root@localhost s15rediscluster]# sed "s/7000/7004/g" redis-7000.conf >redis-7004.conf [root@localhost s15rediscluster]# sed "s/7000/7005/g" redis-7000.conf >redis-7005.conf2.启动6个redis数据库实例 [root@localhost s15rediscluster]# redis-server redis-7000.conf [root@localhost s15rediscluster]# redis-server redis-7001.conf [root@localhost s15rediscluster]# redis-server redis-7002.conf [root@localhost s15rediscluster]# redis-server redis-7003.conf [root@localhost s15rediscluster]# redis-server redis-7004.conf [root@localhost s15rediscluster]# redis-server redis-7005.conf 3.配置ruby语言环境,脚本一键启动redis-cluster 1.下载ruby语言的源码包,编译安装 wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz 2.解压缩 tar -zxvf ruby-2.3.1.tar.gz ./configure --prefix=/opt/ruby/ 释放makefile make && make install 编译且安装 3.下载安装ruby操作redis的模块包 cd /opt wget http://rubygems.org/downloads/redis-3.3.0.gem /opt/ruby/bin/gem install -l redis-3.3.0.gem 4.配置ruby的环境变量 echo $PATH vim /etc/profile 写入最底行 PATH=$PATH:/opt/ruby/bin/ 读取文件 source /etc/profile 5.通过ruby的包管理工具去安装redis包,安装后会生成一个redis-trib.rb这个命令 一键创建redis-cluster 其实就是分配主从关系 以及 槽位分配 slot槽位分配 /opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 6.检查节点主从状态 redis-cli -p 7000 info replication 7.向redis集群写入数据,查看数据流向 redis-cli -p 7000 #这里会将key自动的重定向,放到某一个节点的slot槽位中 set name s15 set addr shahe
转载地址:https://www.cnblogs.com/chenxi67/p/10217168.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!