一、问题
1. 什么是redis?哪儿用了redis?为什么用?
什么是redis:Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中
哪用了:首页轮询广告
为什么用:因为mysql是走硬盘,顶不住高并发;redis是走内存;
2.reids的持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据 不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合用
3.redis主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。 前者称为主节点(master),后者称为从节点(slave); 数据的复制是单向的,只能由主节点到从节点。 默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
4. redis集群是多少台?
Redis集群至少需要6台服务器( 投票容错超过半数:3台 高可用:3台)
5.为什么集群中有一台挂了,则整个集群都挂了呢?
redis集群中有16384个槽分给了3个节点,存取数据时:crc16(key)%16384=0~16383
二、Redis基本命令
key * :查看所有key
expire和ttl :设置和查看key的失效时间
exists:判断key值是否存在
incr和decr: 自增和自减
三、Redis的安装和启动
1、安装
yum install gcc-c++
tar -zxvf redis-3.0.0.tar.gz
cd /usr/upload/redis-3.0.0
make
make install PREFIX=/usr/local/redis
2、启动和关闭
cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin
vim /usr/local/redis/bin/redis.conf:
daemonize yes
启动:
./redis-server redis.conf
关闭:
./redis-cli -h 127.0.0.1 -p 6379 shutdown
四、持久化
1、RDB:默认(数据)
策略:
900 1
300 10
60 10000
缺点:不能保证数据的完整性
优点:不形象性能
实验:
1.删除dump.rdb
2.set str abc
3../redis-cli shutdown(生成持久化文件)2、AOF:(命令)
策略:
#appendfsync always
appendfsync everysec
优点:保证数据完整性
缺点:影响性能
实验:
1.设置appendonly为yes
2.set str abc
3.等待1秒打开appendonly.aof
五、主从复制过程
主从复制过程如下图:
复制过程说明:
1、slave 服务启动,slave 会建立和master 的连接,发送sync 命令。
2、master启动一个后台进程将数据库快照保存到RDB文件中
3、master 就发送RDB文件给slave
4、slave 将文件保存到磁盘上,然后加载到内存恢复
5、master把缓存的命令转发给slave
注意:主死了,从只能读
六、Redis集群的搭建
1.redis-cluster框架图
架构细节:
(1)所有的Redis彼此互联(PING-PONG机制),节点的fail是通过集群中超过半数的节点检测时才生效。
(2)存取数据时连接任意节点都可以,但集群中有一个节点fail整个集群都会fail
Redis 集群中内置了 16384 个哈希槽,当需要在Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
2.集群搭建步骤
1、安装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
2、拷贝6台redis,并启动
1)必须删除dump.rdb和appendonly.aof文件
2)拷贝6个节点
cp -r /usr/local/redis /usr/local/redis-cluster/redis-7001
... ...
3)修改配置文件
port 7001
cluster-enable yes
... ...
4)创建启动脚本(v-y-p)
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.conf3、使用ruby脚本搭建redis集群
cd /usr/upload/redis.3.0.0/src
./redis-trib.rb create --replicas 1 192.168.116.134:7001 192.168.116.134:7002 192.168.116.134:7003 192.168.116.134:7004 192.168.116.134:7005 192.168.116.134:7006
4、测试
./redis-cli -c -p 7001
七、Redis的五种数据类型
类型 | 赋值 | 取值 | 删除 |
String | set k v | get k | del |
hash | hset k kv | hget k k | hdel k k |
list | lpush/rpush k v.. | lrange k 0 -1 | lrem k -2 v |
set | sadd k v... | smembers k | srem k v |
zset | zadd k 59 v... | zrange k 0 -1 withscores | zrem k v |