一、哪儿用了redis?为什么要用?
哪儿用了:app启动后的轮播广告
为什么用:mysql是硬盘,顶不住高并发;redis是内存;
二、什么是redis?
redis是c语言开发的高性能的k-v形式的数据库,数据存储在内存中,诞生于意大利
三、redis安装和启动
1、安装
安装c语言环境
yum install gcc-c++
上传并解压
cd /usr/upload
tar -zxvf redis-3.0.0.tar.gz
编译并安装
cd /usr/local/redis-3.0.0
make
make install PREFIX=/usr/local/redis
2.启动和关闭
拷贝并修改配置文件
cp /usr/upload/redis-3.0.7/redis.conf /usr/local/redis/bin
vim /usr/local/redis/bin/redis.conf
daemonize yes #改为yes
启动
./redis-server redis.conf
关闭
./redis-cli shutdown
./redis-cli -h 127.0.0.1 -p 6379 shutdown #指定端口
查看状态
ps -ef | grep redis
四、redis的多数据库实例
1、redis实例中提供了下标是0-15的16个数据库,不能修改下标,可通过select切换
2、清空数据库的命令:
flushdb:清空当前数据库的数据
flushall:清空所有数据库的数据
五、持久化
1、RDB:默认(数据)
策略:
save 900 1 #修改1条数据,900秒持久化一次
save 300 10
save 60 10000优点:不影响性能 缺点:不能保证数据的完整性
2、AOF:(命令)
策略:
# appendfsync always 服务器每写入一个命令,就调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。
appendfsync everysec #服务器每一秒调用一次 fsync 函数,将缓冲区里面的命令写入到硬盘。
# appendfsync no #服务器不主动调用 fsync 函数,由操作系统决定何时将缓冲区里面的命令写入到硬盘。缺点:影响性能 优点:保证数据的完整性
六、主从复制
1、过程
a、从往主发送sync命令
b、主往从发送rdb文件
c、主往从发送写命令 2、配置步骤
主:无需配置
从 ,修改配置文件:slaveof 主ip 主port
实验:
1.往主写数据,观察从是否同步
2.关闭主,往从写数据(主死了从只能读)
七、redis的五种数据类型
1.String(字符串)
string 是 redis 最基本的类型,一个 key 对应一个 value。string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型的值最大能存储 512MB。
Hash(哈希)
Redis hash 是一个键值(key=>value)对集合
Redis hash 是一个 string 类型的 field 和 value 的映射表,hash 特别适合用于存储对象。
List(列表)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
Set(集合)
Redis的Set是string类型的无序集合
zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。zset的成员是唯一的,但分数(score)却可以重复。
赋值 取值 删除 特点
string set k v get k del k string
hash hset k k-v hget k k hdel k k map
list lpush/rpush k v... lrange k 0 -1 lrem k 2 v list
set sadd k v... smembers k srem k v set
zset zadd k 1 v... zrange k 0 -1 withscores zrem k v sort set
八、redis集群
1、redis集群是多少台?
投票容错超过半数:3台 高可用:3台
2、为什么集群中有一个节点挂了,则整个集群都挂类?
redis集群中有16384个槽分给了3个节点,存取数据时:crc16(key)%16384=[0~16383]
3、搭建步骤
安装ruby环境
#切换目录
cd /usr/upload
#安装ruby
yum install ruby
yum install rubygems
gem install redis-3.0.0.gem
#查看脚本
cd /usr/upload/redis-3.0.0/src
ll *.rb
拷贝6个节点,并启动
要拷贝干净的redis,持久化文件删除掉,dump.rdb和appendonly.aof
cd /usr/local/redis/bin
cd /usr/local/redis/bin
rm -f dump.rdb
rm -f appendonly.aof
拷贝6个节点
cd /usr/local
#创建文件夹放redis
mkdir redis-cluster
cp -r redis redis-cluster/redis-7001
#重复上面拷贝个命令,修改名称
...
目录结构
依次修改redis配置文件,这里用的是7001-7006
vim /usr/local/redis-cluster/redis-7001/bin/redis.conf
#修改配置文件中的端口号
port 7001
#集群打开
cluster-enable yes
创建启动脚本
cd /usr/local/redis-cluster/
vim 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
创建关闭脚本
vim shutdown-all.sh
#关闭脚本内容编辑
cd /usr/local/redis-cluster/redis-7001/bin/
./redis-cli -p 7001 shutdown
cd /usr/local/redis-cluster/redis-7002/bin/
./redis-cli -p 7002 shutdown
cd /usr/local/redis-cluster/redis-7003/bin/
./redis-cli -p 7003 shutdown
cd /usr/local/redis-cluster/redis-7004/bin/
./redis-cli -p 7004 shutdown
cd /usr/local/redis-cluster/redis-7005/bin/
./redis-cli -p 7005 shutdown
cd /usr/local/redis-cluster/redis-7006/bin/
./redis-cli -p 7006 shutdown
启动脚本
./start-all.sh
查看redis运行状态
ps -ef | grep redis
启动成功
使用ruby脚本创建redis集群(记得修改ip地址)
#切换找到脚本所在目录
cd /usr/upload/redis-3.0.0/src
#运行命令启动集群
./redis-trib.rb create --replicas 1 192.168.226.205:7001 192.168.226.205:7002 192.168.226.205:7003 192.168.226.205:7004 192.168.226.205:7005 192.168.226.205:7006
测试
进去redis-7001
cd /usr/local/redis-cluster/redis-7001/bin/
./redis-server redis.conf
./redis-cli -c -p 7001
#查看集群详情
cluster nodes
执行关闭脚本
cd /usr/local/redis-cluster/
./shutdown-all.sh
九、测试
加入依赖
<!-- Spring Data Redis的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
配置文件
spring:
redis:
cluster:
nodes:
- 192.168.226.205:7001
- 192.168.226.205:7002
- 192.168.226.205