- redius的常见问题
- 缓存击穿
缓存击穿是指,长时间高并发访问某一数据内容,当该内容在redius中过期,突然间给数据库造成巨大压力,导致数据库崩溃。
解决方案:对高并发热点内容设置永不过期。
- 缓存雪崩
缓存雪崩是指,redis中的数据内容同时过期,从而同时访问数据库,造成数据库压力。
解决方案:对不同内容,分类设置批量时间。
- 缓存穿透
缓存穿透是指,用户高并发访问缓存中没有且数据库中没有的内容,导致redius频繁的查询数据库,造成数据库压力。
解决方案:对数据库中没有的内容,redius可以增加键值对,其值为null
- redius的高可用
- 主从复制:实现读写分离
[root@localhost bin]# redis-server /usr/local/redis-3.0.7/redis1.conf
[root@localhost bin]# redis-server /usr/local/redis-3.0.7/redis.conf
[root@localhost bin]# redis-cli -p 6380
127.0.0.1:6380> info
# Server
redis_version:3.0.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:f8a7d182c77f5444
redis_mode:standalone
os:Linux 3.10.0-957.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
gcc_version:4.8.5
process_id:7694
run_id:19349ef3b8473ec96747ce934a8b3e856f967055
tcp_port:6380
uptime_in_seconds:170
uptime_in_days:0
hz:10
lru_clock:3735
config_file:/usr/local/redis-3.0.7/redis1.conf
# Clients
connected_clients:1
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
# Memory
used_memory:1884648
used_memory_human:1.80M
used_memory_rss:9826304
used_memory_peak:1884648
used_memory_peak_human:1.80M
used_memory_lua:36864
mem_fragmentation_ratio:5.21
mem_allocator:jemalloc-3.6.0
# Persistence
loading:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1577061958
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
# Stats
total_connections_received:3
total_commands_processed:162
instantaneous_ops_per_sec:0
total_net_input_bytes:5609
total_net_output_bytes:290
instantaneous_input_kbps:0.03
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:2
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
evicted_keys:0
keyspace_hits:0
keyspace_misses:0
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:648
migrate_cached_sockets:0
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6379,state=online,offset=225,lag=0
master_repl_offset:225
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:224
# CPU
used_cpu_sys:0.64
used_cpu_user:0.04
used_cpu_sys_children:0.00
used_cpu_user_children:0.00
# Cluster
cluster_enabled:0
# Keyspace
127.0.0.1:6380> set key 'calue'
OK
- 哨兵sentinel实现主节点的高可用
哨兵sentinel是为可实现主节点高可用而设计的,哨兵sentinel会不间断的向主节点发送消息。如果在一定时间内,主节点没有响应,哨兵sentinel则认为该主节点已失效,切换从节点为主节点。具体配置如下:
# 外部可以访问
bind 0.0.0.0
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 10000
sentinel failover-timeout mymaster 60000
sentinel parallel-syncs mymaster 1
mymaster 表示配置主节点名称 ,后续一致即可。127.0.0.1 6379 表示主节点的ip地址和端口号 1表示只需要1个哨兵sentinel认为主节点已失效,则进行故障转移。注意 哨兵sentinel可以运行多个,实现高可用。
mymaster 10000表示当哨兵sentinel向主节点发送消息 1秒后如果没有收到主节点的响应,则认为主节点已失效。
mymaster 60000表示当哨兵sentinel执行故障转移6秒后,没有触发故障转移操作,则认为此次故障转移失效。
mymaster 1 表示执行故障转移后1个子节点向主节点同步消息。
具体代码如下:
[root@localhost bin]# redis-server /usr/local/redis-3.0.7/redis2.conf
[root@localhost bin]# redis-sentinel /usr/local/redis-3.0.7/sentinel1.conf
- redius cluster实现分布式存储
1 配置redis.conf文件,并启动,详细配置如下:
# 不能设置密码,否则集群启动时会连接不上
# Redis服务器可以跨网络访问
bind 0.0.0.0
# 修改端口号
port 7001
# Redis后台启动
daemonize yes
# 开启aof持久化
appendonly yes
# 开启集群
cluster-enabled yes
# 集群的配置 配置文件首次启动自动生成
cluster-config-file nodes.conf
# 请求超时
cluster-node-timeout 5000
2 启动redis 集群
安装ruby环境:
# 安装ruby
yum -y install ruby ruby-devel rubygems rpm-build
# 升级ruby版本,redis4.0.14集群环境需要2.2.2以上的ruby版本
yum install centos-release-scl-rh
yum install rh-ruby23 -y
scl enable rh-ruby23 bash
# 查看ruby版本
ruby -v
下载符合环境要求的gem,下载地址如下:
https://rubygems.org/gems/redis/versions/4.1.0 并安装
gem install redis-4.1.0.gem
进入redis安装目录,使用redis自带的集群管理脚本,执行命令:
# 进入redis安装包
cd /root/redis-4.0.14/src/
# 查看集群管理脚本
ll *.rb
# 使用集群管理脚本启动集群,下面命令中的1表示为每个主节点创建1个从节点
./redis-trib.rb create --replicas 1 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 127.0.0.1:7006
使用redis集群 ,一定要加 -c
# redis-cli -h 127.0.0.1 -p 7001 -c