一、哪儿用了redis?为什么用?
- 哪儿用了:首页大广告等数据量不大,但是并发量高的
- 为什么用:因为mysql走的是走硬盘,redis是走内存;首页数据量小,访问量大;
二、redis介绍
redis是c语言编写的高性能(读110000次/s)的k-v形式的数据库,数据存储在内存中
三、redis的安装和启动
- 1、安装
- 1、安装c语言环境
yum install gcc-c++
- 2、上传并解压
cd /usr/upload
tar -zxvf redis-3.0.0.tar.gz
- 3、编译并安装
cd redis-3.0.0
make
make install PREFIX=/usr/local/redis
- 4、拷贝并修改配置文件
cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin/redis.conf
vim /usr/local/redis/bin/redis.conf
:
daemonize yes
- 1、安装c语言环境
- 2、启动和关闭
cd /usr/local/redis/bin
启动:
./redis-server redis.conf
测试:
./redis-cli [-h 192.168.204.132 -p 6379]
关闭:
./redis-cli [-h 192.168.204.132 -p 6379] shutdown
四、基本命令
keys *:查看所有key值
exists:判断key值是否存在
incr和decr:自增和自减
expire和ttl:设置和查看key的失效时间
五、持久化
-
1、RDB:默认,数据
策略:
save 900 1
save 300 10
save 60 10000缺点:不能保证数据的完整性 优点:不影响性能
实现:
1、set str sb
2、./redis-cli shutdown------>数据持久化 -
2、AOF:命令
策略:
# appendfsync always
appendfsync everysec
# appendfsync no优点:保证数据完整性 缺点:影响性能
实验:
1、设置appendonly为yes
2、set str1 sb,等待一秒---->数据持久化
六、redis的多数据库实例
- 1、redis实例中提供了下标是0-15的16个数据库,不能修改下标,可通过select切换
- 2、清空数据库的命令:
flushdb:清空当前数据库的数据
flushall:清空所有数据库的数据
七、主从复制
- 1、过程
a、从往主发送sync命令
b、主往从发送rdb
c、主往从发送命令 - 2、配置步骤
主:无须配置
从:slaveof masterip masterport - 3、实验
1、往主写数据,观察从是否同步
2、关闭主,往从写数据—>主死了从只能读
八、redis-cluster
- 1、为什么节点之间要相互ping pong?
投票容错 - 2、为什么要投票容错?
集群中有一个节点fail整个集群都会fail - 3、为什么连哪一台都行?集群中有一个节点fail整个集群都会fail?
redis集群中有16384个槽,分给了3个节点,存取数据时:crc16(key) % 16384=0~16383 - 4、redis集群是多少台?
投票容错超过半数:3台 高可用:3台 - 5、搭建步骤
- 1)删除redis中的持久化文件
cd /usr/local/redis/bin
rm -f dump.rdb
rm -f appendonly.aof
- 2)安装ruby环境
yum install ruby
yum install rubygems
cd /usr/upload
gem install redis-3.0.0.gem
cd redis-3.0.0/src
ll *.rb
- 3)开启集群
vim /usr/local/redis/bin/redis.conf
:
cluster-enabled yes - 4)拷贝6个节点
cd /usr/local
mkdir redis-cluster
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7002
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7003
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7004
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7005
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7006
- 5)修改端口号
vim /usr/local/redis-cluster/redis-7001/bin/redis.conf
:
port 7001
vim /usr/local/redis-cluster/redis-7002/bin/redis.conf
:
port 7002
vim /usr/local/redis-cluster/redis-7003/bin/redis.conf
:
port 7003
vim /usr/local/redis-cluster/redis-7004/bin/redis.conf
:
port 7004
vim /usr/local/redis-cluster/redis-7005/bin/redis.conf
:
port 7005
vim /usr/local/redis-cluster/redis-7006/bin/redis.conf
:
port 7006 - 6)编写启动集群的脚本
vim /usr/local/redis-cluster/start-all.sh
:
cd /usr/local/redis-cluster/redis-7001/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7002/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7003/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7004/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7005/bin
./redis-server redis.conf
cd /usr/local/redis-cluster/redis-7006/bin
./redis-server redis.conf
chmod 777 start-all.sh
./start-all.sh
- 7)使用ruby脚本搭建redis集群
cd /usr/upload/redis-3.0.0/src
./redis-trib.rb create --replicas 1 192.168.204.132:7001 192.168.204.132:7002 192.168.204.132:7003 192.168.204.132:7004 192.168.204.132:7005 192.168.204.132:7006
- 8)测试
- ①测试存储数据
./redis-cli -c -p 7001
set str 123
… … - ②测试高可用
127.0.0.1:7001> cluster nodes
./redis-cli -p 7001 shutdown
127.0.0.1:7002> cluster nodes
- ①测试存储数据
- 1)删除redis中的持久化文件