Redis

企业缓存数据库对比

1、Memcached

  • 优点:高性能读写、单一数据类型、支持客户端式分布式集群、一致性hash多核结构、多线程读写性能高。
  • 缺点:无持久化、节点故障可能出现缓存穿透、分布式需要客户端实现、跨房数据同步困难、架构扩容复杂度高

2、Redis

  • 优点:高性能读写、多数据类型支持、数据持久化、高可用架构、支持自定义虚拟内存、支持分布式分片集群、单线程读写性能极高
  • 缺点:多线程读写较Memcached慢

3、Tair

  • 优点:高性能读写、支持三种存储引擎(ddb、rdb、ldb)、支持高可用、支持分布式分片集群、支撑了几乎所有淘宝业务的缓存。
  • 缺点:单机情况下,读写性能较其他两种产品较慢。

Redis 基本部署

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi install redis
systemctl enable redis
vim /etc/redis.conf
daemonize no ==> yes
protected-mode yes ==> no
#requirepass redis ==>requirepass 1234
./usr/bin/redis-server /etc/redis.conf

在线变更配置

1.获取当前配置

CONFIG GET *

2.变更运行配置

CONFIG SET loglevel "notice"

Redis 数据持久化

RDB 持久化

可以在指定的时间间隔内生成数据集的时间点快照,在默认情况下, Redis 将数据库快照保存在名字为 dump.rdb的二进制文件中。

优点

  • RDB 是一个非常紧凑的文件,它保存了 Redis 在某个时间点上的数据集。 这种文件非常适合用于进行备份
  • 非常适用于灾难恢复
  • 可以最大化 Redis 的性能
  • 在恢复大数据集时的速度比 AOF 的恢复速度要快

缺点:

  • 不适合尽量避免在服务器故障时丢失数据
  • 一旦发生故障停机, 你就可能会丢失好几分钟的数据

AOF持久化

记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集。每当 Redis 执行一个改变数据集的命令式(比如 SET),这个命令就会被追加到 AOF 文件的末尾。

优点

  • 使用 AOF 会让你的 Redis 更加耐久
  • Redis 可以在 AOF 文件体积变得过大时,自动地在后台对 AOF 进行重写
  • 一旦新 AOF 文件创建完毕,Redis 就会从旧 AOF 文件切换到新 AOF 文件,并开始对新 AOF 文件进行追加操作
  • AOF 文件有序地保存了对数据库执行的所有写入操作, 这些写入操作以 Redis 协议的格式保存, 因此 AOF 文件的内容非常容易被人读懂

缺点:

  • AOF 文件的体积通常要大于 RDB 文件的体积。
  • 个别命令的原因,导致 AOF 文件在重新载入时,无法将数据集恢复成保存时的原样。

RDB 持久化配置

1.修改配置文件

save 900 1
save 300 10
save 60 10000  #60秒内有10000个更改

2.RDB 持久化高级配置

stop-writes-on-bgsave-error yes
  #后台备份进程出错时,主进程停不停止写入
rdbcompression yes 
 #是否压缩
rdbchecksum yes
    #是否检验rdb的完整性
dbfilename dump.rdb
dir ./data/6379

AOF 持久化配置

1.AOF 持久化基本配置

appendonly yes
appendfsync always
appendfsync everysec
appendfsync no

2.AOF 持久化高级配置

no-appendfsync-on-rewrite yes/no
auto-aof-rewrite-percentage 100 
auto-aof-rewrite-min-size 64mb

RDB 到 AOF 切换

  1. 为最新的 dump.rdb 文件创建一个备份
  2. 执行以下两条命令
redis-cli config set appendonly yes
redis-cli config set save “”

注意:别忘了在 redis.conf 中打开 AOF 功能! 否则的话, 服务器重启之后, 之前通过 CONFIG SET 设置的配置不会生效, 程序会按原来的配置来启动服务器。

Redis 消息模式

1.任务队列

  • 生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务独立中读入任务信息并执行。

2.发布订阅

  • 一个Publisher,多个Subscriber模型 用于通知
  • 多个Publisher,一个Subscriber模型 用于排行榜投票计数
  • 多个Publisher,多个Subscriber模型 用于群聊

Redis 主从复制

1.创建目录

mkdir -p /usr/local/redis
cd /usr/local/redis

2.修改配置文件

vim install_redis.sh
#!/bin/bash
for i in 0 1 2 3
  do
    mkdir -p 638$i
    \cp /usr/bin/redis-server /usr/local/redis/638$i/
    \cp /etc/redis.conf  /usr/local/redis/638$i/
    sed -i  "s#^dir .*#dir /usr/local/redis/638$i/#g" /usr/local/redis/638$i/redis.conf
    sed -i  "s#6379#638$i#g" /usr/local/redis/638$i/redis.conf
    sed -i '/protected-mode/s#yes#no#g'/usr/local/redis/638$i/redis.conf
done

3.启动实例

vim start_redis.sh
#!/bin/bash
for i in 0 1 2 3
  do
  /usr/local/redis/638$i/redis-server /usr/local/redis/638$i/redis.conf 
done

4.开启主从

#MASTER:192.168.188.8:6380  #SLAVE:192.168.188.8:6381 192.168.188.8:6382
redis-cli -h 192.168.188.8 -p 6381
192.168.188.8:6381> slaveof 192.168.188.8 6380
redis-cli -h 192.168.188.8 -p 6382
192.168.188.8:6382> slaveof 192.168.188.8 6380

Redis Sentinel

功能

  • 监控
  • 提醒
  • 自动故障迁移

故障转移

  1. 发现主服务器已经进入客观下线状态。
  2. 基于Raft leader election 协议 , 进行投票选举
  3. 如果当选失败,那么在设定的故障迁移超时时间的两倍之后,重新尝试当选。 如果当选成功, 那么执行以下步骤。
  4. 选出一个从服务器,并将它升级为主服务器。
  5. 向被选中的从服务器发送 SLAVEOF NO ONE 命令,让它转变为主服务器。
  6. 通过发布与订阅功能, 将更新后的配置传播给所有其他 Sentinel ,其他 Sentinel 对它们自己的配置进行更新。
  7. 向已下线主服务器的从服务器发送 SLAVEOF 命令,让它们去复制新的主服务器。
  8. 当所有从服务器都已经开始复制新的主服务器时, leader Sentinel 终止这次故障迁移操作。

配置文件说明

# 指定监控master
sentinel monitor mymaster 127.0.0.1 6370 2 
# {2表示多少个 sentinel 同意}
# 安全信息
sentinel auth-pass mymaster root
# 超过15000毫秒后认为主机宕机
sentinel down-after-milliseconds mymaster 15000 
# 当主从切换多久后认为主从切换失败
sentinel failover-timeout mymaster 900000
# 这两个配置后面的数量主从机需要一样,epoch为master的版本
sentinel leader-epoch mymaster 1
sentinel config-epoch mymaster 1

哨兵实现高可用

#A:MASTER 192.168.188.8
#B:SLAVE1 192.168.188.9
#C:SLAVE2 192.168.188.10

1.ABC安装Redis

yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum --enablerepo=remi install redis

2.开启并检查主从

BC:vi/etc/redis.conf
replicaof 192.168.188.8 6379 
masterauth 123
A:redis-cli 
info replication

3..ABC修改Sentinel配置

vi /etc/redis-sentinel.conf
daemonize yes
sentinel monitor master 192.168.188.8 6379 1  
sentinel auth-pass master 123

4.启动

 /usr/bin/redis-server /etc/redis.conf
 /usr/bin/redis-sentinel /etc/redis-sentinel.conf

Cluster 集群

#A:192.168.188.8
#B:192.168.188.9
#C:192.168.188.10
#D:192.168.188.11
#E:192.168.188.12
#F:192.168.188.13

1.分别ABCDEF配置

cat >> redis.conf << EOF
bind 0.0.0.0
protected-mode no
port 6379
dir /var/lib/redis
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /var/run/redis_6379.pid
logfile /var/log/redis/redis.log
EOF
/usr/bin/redis-server /etc/redis.conf

2.创建Cluster

redis-cli --cluster create 192.168.188.8:6379  -a 123 192.168.188.9:6379 192.168.188.10:6379 192.168.188.11:6379 192.168.188.12:6379 192.168.188.13:6379 --cluster-replicas 1

3.查看节点

redis-cli -c -p 6379
127.0.0.1:6379> cluster node

4.添加从节点

redis-cli --cluster add-node 192.168.188.14 192.168.188.8 --cluster-slave 

5.给新节点分配哈希槽

redis-cli --cluster reshard 192.168.188.14
#根据提示选择要迁移的slot数量
How many slots do you want to move (from 1 to 16384)? 
#选择要接受这些slot的node-id
What is the receiving node ID? 
# 选择slot来源
# all表示从所有的master重新分配,
# 或者数据要提取slot的master节点id,最后用done结束
Source node #1:
Source node #2:done

6.删除节点

删除master节点之前首先要使用reshard移除master的全部slot,然后再删除当前节点

删除slave节点直接删

redis-cli --cluster del-node ip:port '<node-id>'

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇