Redis 源码安装
安装:
yum -y install gcc gcc-c++
tar zxf redis-5.0.3.tar.gz
cd redis-5.0.3 && make && make install
配置:
cp redis.conf /etc/
vim /etc/redis.conf
daemonize yes
bind 0.0.0.0
启动redis
redis-server /etc/redis.conf
Reids客户端命令的使用: redis-cli
redis-cli -h -a -p
-h redis-server的IP地址
-a 连接的密码
-p 连接的端口
常用的redis命令:
set key valuse 创建一个键值对儿
get key 查看一个键的值
keys * 查看所有的键
例子:
创建一个键值对儿: set name tom
Redis 数据类型
Redis 实现php的session共享
LAMP
-
在php的服务器上安装php的redis扩展
yum -y install epel-release
yum -y install php-pecl-redis
-
修改redis保存session的方式为redis
vim /etc/php.ini
php_value session.save_handler “redis” \保存session的方式
php_value session.save_path “tcp://192.168.189.173:6379” \redis服务器的地址和端口vim /etc/httpd/conf.d/php.conf
php_value session.save_handler “redis” \保存session的方式
php_value session.save_path “tcp://192.168.189.173:6379” \redis服务器的地址和端口 -
重启httpd
systemctl restart httpd
给电商权限:
chmod -R 777 .*
LNMP
- 在php的服务器上安装php的redis扩展
yum -y install php-fpm
yum -y install epel-release
yum -y install php-pecl-redis
- 修改redis保存session的方式为redis
vim /etc/php-fpm.d/www.conf
php_value session.save_handler “redis” \保存session的方式
php_value session.save_path “tcp://192.168.189.173:6379” \redis服务器的地址和端口 - 重启php-fpm
systemctl restart php-fpm
Reids 口令认证
给redis设置连接密码
vim /etc/redis.conf
requirepass 123 \指定密码为123
重启redis:
kill -15 $(cat /var/run/redis_6379.pid)
redis-server /etc/redis.conf
Redis 主从复制
只需要在从节点配置即可,配置如下
286行:
replicaof 192.168.189.173 6379 \master的ip和端口
masterauth 123 \可选参数,master的连接密码,若没有可以不写
临时主从复制:
进入到redis-cli中执行
slaveof host(主的IP) port(主的端口)
注意,一旦redis成为从节点,将会变成只读的,不可写入数据
Redis 哨兵集群模式
cp /root/redis-5.0.3/sentinel.conf /etc
vim /etc/sentinel.conf
bind 0.0.0.0 \取消注释 改为监听所有ip
protected-mode no \取消注释 关闭保护模式
port 26379 \监听端口
daemonize yes \以守护进程的方式运行
logfile “/tmp/sentinel.log” \日志的目录
sentinel monitor mymaster 192.168.79.22 6379 2 \指定master的ip地址 端口 客观下线的票数
将修改好的配置文件发送到两台从的机器上面:
scp /etc/sentinel.conf root@192.168.79.33:/etc/
scp /etc/sentinel.conf root@192.168.79.44:/etc/
在每台主机上启动redis哨兵:
redis-sentinel /etc/sentinel.conf
查询一下日志,可以看到他们已经在互相监控
tail -f /tmp/sentinel.log
测试:
停掉 redis master 然后查看日志,哨兵是否有动作,是否选取出新的master
然后登录到被选取的master上验证一下是否已经升级为master拥有一个slave
redis-cli
info \查看状态 验证
Redis Cluster分布式集群
Redis 常见故障
雪崩:
雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,
因为大部分数据在Redis层已经失效,请求渗透到数据库层,大
批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。
解决办法:
我们的redis是高可用的,通过主从+哨兵,redis cluster,这样一来,我们的一个redis崩盘了,我们还有我们的redis集群。
redis持久化,我们的redis一旦重启,会自动从磁盘上加载数据,恢复我们缓存的数据
击穿:
缓存击穿,就是说某个 key 非常热点,访问非常频繁,处于集中式高并
发访问的情况,当这个 key 在失效的瞬间,大量的请求就击穿了缓存,
直接请求数据库,就像是在一道屏障上凿开了一个洞。
解决方法:
可以将热点数据设置为永远不过期;或者基于 redis or zookeeper 实现互斥锁,等待第一个请求构建完缓存之后,再释放锁,
进而其它请求才能通过该 key 访问数据。
穿透:
遭受恶意攻击,故意去寻找没有的键值,这样就会直接访问到后端的DB中,这样就会给DB很大的压力,容易造成DB的宕机
解决方法:
它查询数据库没有查到,那我们就放一个空值到缓存中,然后设置一个过期时间,那它接下来的操作,肯定就需要和缓存打交道了。