redis相关
redis下载安装(编译安装)
- 下载redis源码
# 切换到opt目录下
cd /opt
# 下载redis压缩包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
- 安装
# 解压压缩包
tar -zxvf redis-4.0.10.tar.gz
# 切换到redis源码目录
cd redis-4.0.10
# 编译源文件
make && make install
# 编译好后,src/下面有编译好的redis指令
- 配置文件
# 在/opt下创建存放redis配置的目录
mkdir /opt/redis-conf
# 创建配置文件
vim /opt/redis-conf/redis-6379.conf
- 编写配置
port 6379 # 运行在6379的redis数据库实例
daemonize yes # 后台运行redis
pidfile /data/6379/redis.pid # 存放redis pid的文件
loglevel notice # 日志等级
logfile "/data/6379/redis.log" # 指定redis日志文件的生成目录
dir /data/6379 # 指定redis数据文件夹的目录
protected-mode yes # 安全模式
requirepass haohaio # 设置redis的密码
"""
注意:1./data/6379/这个目录要先创建,不然会报错
2.配置文件中不要有注释,
"""
redis的基本使用
- 启动redis服务
# 指定用哪个配置来启动
redis-server /opt/redis-conf/redis-6379.conf
- 启动redis客户端
# 根据服务配置的端口指定端口,有密码加 -a password
redis-cli -p6370
- 数据类型(5种)
strings # 字符串
hashes # 散列
lists # 列表
sets # 集合
sorted sets # 有序集合
- strings常用方法
set # 插入数据
get # 获取
append # 追加(string)
mset # 设置多个键值对
mget # 获取多个键值对
del # 删除
incr # 递增+1
decr # 递减-1
- strings基本使用
# 设置数据
set name aaa # key:name value:aaa
# 获取key
keys * # 拿到redis中所有的key
# 根据key来取值
get name
# 根据key追加值
append name 'bbb'
# 设置多个key value
mset name 'aaa' age '18'
# 获取多个value
mget name age
# 删除key
del name
- lists常用方法
lpush # 从列表左边插入
rpush # 从列表右边插入
lrange # 获取一定长度的元素
ltrim # 截取一定长度的列表
lpop # 删除最左边的元素
rpop # 删除最右边的元素
lpushx/rpushx # key存在则添加值,不存在不处理
- lists基本使用
lpush duilie 'alex' 'peiqi' 'ritian' # 新建一个duilie,从左边放入三个元素
llen duilie # 查看duilie长度
lrange duilie 0 -1 # 查看duilie所有元素
rpush duilie 'aaa' # 从右边插入aaa
lpushx duilie2 'dsb' # key存在则添加 dsb元素,key不存在则不作处理
ltrim duilie 0 2 # 截取队列的值,从索引0取到2,删除其余的元素
lpop # 删除左边的第一个
rpop # 删除右边的第一个
redis发布订阅
# 发布消息
PUBLISH aaa 'hello' # 将hello发布到aaa频道
# 订阅
SUBSCRIBE aaa # 订阅aaa频道
# 取消订阅
UNSUBSCRIBE aaa # 取消订阅aaa频道
redis持久化存储
- RDB
# RDB(redis database)
# 需要手动save保存
- 配置
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dir /data/6379
protected-mode yes
requirepass haohaio
dbfilename dbmp.rdb # 持久化存储的文件名
save 900 1 # rdb机制,每900s 内存种有一个修改记录就自动存储
save 300 1 # 每 300s 10个修改记录
save 60 10000 # 每60s 10000修个记录
- AOL
# AOL(append-only logfile)
- 配置
# 在rdb的配置上添加一下配置
appendonly yes
appendfsync everysec
- RDB VS AOL
rdb:
"""
优点: 1.适合备份 2.恢复大数据集时速度比AOF快
缺点: 1.手动save 2.耗时长 3.备份时宕机数据易丢失
"""
AOL:
"""
优点: 1.追加到日志文件后面 2.数据不易丢失
缺点: 1.速度较慢 2.文件体积较大
"""
redis的主从同步
- 准备
# 准备三个redis库
redis-6379.conf
redis-6380.conf
redis-6381.conf
# 配置三个配置文件的信息,同时在redis-6380.conf/redis-6381.conf添加配置
slaveof 127.0.0.1 6379
# 在data中创建三个文件夹6379/,6380/,6381/
- 启动三个redis服务
redis-server -p 6379 /opt/redis-conf/redis-6379.conf
redis-server -p 6380 /opt/redis-conf/redis-6380.conf
redis-server -p 6381 /opt/redis-conf/redis-6381.conf
- 启动客户端
# 启动6379客户端
redis-cli -p 6379
# 插入数据
set name 'aaa'
# 退出
exit
- 检测同步是否成功
# 登录6380客户端
redis-cli -p 6380
# 检测数据是否存在
keys *
# 退出6380,登录6381检测
- 故障时身份切换
# kill 6379进程,模拟主库挂掉
kill -9 进程id
- 更改主库信息
# 登录6380
redis-cli -p 6380
# 更改slaveof信息
slaveof no one
# 退出6380
exit
- 更改从库信息
# 登录6381
redis-cli -p 6381
# 更改从库信息
slave no one
slave 127.0.0.1 6380
- 查看主从库信息
redis-cli -p 6380 info replication
redis-cli -p 6381 info replication
redis-sentinel(哨兵vsredis相互独立,有木有关系)
- 准备
# redis库的准备,同上,准备三个独立的redis库
- 配置
# redis库配置同上
# 配置三个哨兵
cd /opt/redis_conf
vim redis-26380.conf
vim redis-26381.conf
vim redis-26382.conf
# 写入三个配置文件
port 26379 # 哨兵的端口
dir /var/redis/data/
logfile "26379.log"
sentinel monitor mymaster 127.0.0.1 6379 2 # 监听主库的端口
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
daemonize yes
- 启动哨兵
[root@qishi666 redis_conf]# redis-sentinel redis-26379.conf
[root@qishi666 redis_conf]# redis-sentinel redis-26380.conf
[root@qishi666 redis_conf]# redis-sentinel redis-26381.conf
- 查看哨兵是否成功通信
redis-cli -p 26379 info sentinel
- 常见问题
"""
1. 如果哨兵没有正常启动,那么就在哨兵的配置文件中的ip信息检验
2. 如果哨兵没有正常通信,那么就从主从同步开始重新配置
"""
redis集群
- 准备节点
vim redis-7000.conf
vim redis-7001.conf
vim redis-7002.conf
vim redis-7003.conf
vim redis-7004.conf
vim redis-7005.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 # 集群内部的配置文件
# 不同配置文件的端口不同
- 启动6个节点
redis-server redis-7000.conf
redis-server redis-7001.conf
redis-server redis-7002.conf
redis-server redis-7003.conf
redis-server redis-7004.conf
redis-server redis-7005.conf
- 验证
# 随便登录一个端口,写入数据
(error)CLUSTERDOWN Hash slot not served # 报错,没有hash槽
- 准备ruby环境
# 下载ruby
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
# 安装ruby
tar -xvf ruby-2.3.1.tar.gz
# 释放源
./configure --prefix=/opt/ruby/
# 编译
make && make install
# 配置环境变量
PATH=$PATH:/opt/ruby/bin
- 安装ruby gem管理工具
wget http://rubygems.org/downloads/redis-3.3.0.gem
gem install -l redis-3.3.0.gem
#查看gem有哪些包
gem list -- check redis gem
# 安装redis-trib.rb命令
root@yugo /opt/redis/src 18:38:13]#cp /opt/redis/src/redis-trib.rb /usr/local/bin/
- 一键开始redis-cluster集群
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
- 查看集群状态
redis-cli -p 7000 cluster info
redis-cli -p 7000 cluster nodes #等同于查看nodes-7000.conf文件节点信息
# 集群主节点状态
redis-cli -p 7000 cluster nodes | grep master
# 集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave
- 测试写入数据
# 登录集群必须使用redis-cli -c -p 7000必须加上-c参数
- 参考文档
http://doc.redisfans.com/

更多精彩