1.redis
1.什么是redis
1.1.Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。redis是将数据存放到内存中,由于内容存取速度快所以redis被广泛应用在互联网项目中。
哪儿用了:
首页轮播广告,因为商城首页访问量特别大,直接从数据库获取首页菜单和大广告位信息数据库压力过大,这些存贮量不大,但是高并发的页面可以使用Redis所以首页菜单和大广告位信息必须从缓存中获取。
为什么用:
因为mysql是存储到硬盘空间,在高并发的情况下并不好用;而redis是将数据存储到内存中,存取效率高;
2.redis下载
http://download.redis.io/releases/redis-3.0.0.tar.gz
3.安装redis
3.1.准备
Redis是c语言开发的。安装redis需要c语言的环境。
yum install gcc-c++
3.2.安装redis
将redis-3.0.0.tar.gz拷贝到/usr/upload下解压源码
tar -zxvf redis-3.0.0.tar.gz
进入解压后的目录进行编译
cd /usr/upload/redis-3.0.0
make
安装到指定目录
make install PREFIX=/usr/local/redis
3.3.启动和关闭redis
3.3.1.前端启动
1、启动方式:
直接运行bin/redis-server将以前端模式启动。
cd /usr/local/redis/bin
./redis-server
2、启动缺点:
ssh命令窗口关闭则redis-server程序结束,不推荐使用此方法
3、启动图例:
占用命令窗口
**4、前端启动的关闭:**ctrl+c
3.3.2.后端启动
第一步:进入源码目录,里面有一份配置文件 redis.conf,然后将其拷贝到安装路径下
cp /usr/upload/redis-3.0.0/redis.conf /usr/local/redis/bin
第二步:修改/usr/java/redis/bin下的redis.conf,将daemonize由no改为yes
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EUBzzVz6-1661337532541)(E:/每日资料/06-微服务/03-power_shop/动力优品05 - 前台系统搭建、商城首页展示、redis/课件/动力优品05 - 前台系统搭建、商城首页展示、redis/assets/1588858554831.png)]
第三步:启动
./redis-server redis.conf
3.3.3.关闭
到redis/bin目录下执行如下命令
./redis-cli -p 端口号 shutdown
3.3.4.redis的基本命令
redis-cli连上redis服务后,可以在命令行发送命令:
./redis-cli -h 127.0.0.1 -p 6379
4.持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合用。
4.1.RDB持久化
RDB方式的持久化是通过快照(snapshotting)完成的,当符合一定条件时Redis会自动将内存中的数据进行快照并持久化到硬盘。
RDB是Redis默认采用的持久化方式,在redis.conf配置文件中默认有此下配置:
save 900 1 #900秒内容如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000 #表示60秒内如果超过10000个key被修改,则发起快照保存
在redis.conf中:
配置dir指定rdb快照文件的位置
配置dbfilenam指定rdb快照文件的名称
Redis启动后会读取RDB快照文件,将数据从硬盘载入到内存。
4.1.1.实验
1、删除dump.rdb
2、set test abc
3、关闭服务端并观察bin目录的变化
总结:
优点:让redis的数据存取速度变快
缺点:服务器断电时会丢失部分数据(数据的完整性得不到保证)
4.2.AOF持久化
默认情况下Redis没有开启AOF(append onlyfile)方式的持久化,可以通过appendonly参数开启:
appendonly yes
AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改:
appendfilename appendonly.aof
AOF持久化策略如下:
#appendfsync always #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略。
#appendfsync no #从不同步。高效但是数据不会被持久化。
4.2.1.实验
1、设置appendonly为yes
2、设置一个key
3、观察appendonly.aof
总结:
优点:持久化良好,能包证数据的完整性
缺点:大大降低了redis系统的存取速度
5.主从配置
1、过程
a.从会往主发送sync命令
b.主会往从发送rdb文件
c.主会往从发送写命令
2.配置
1、拷贝redis
cd /usr/local
cp -r redis redis-6380
2、修改redis-6380的redis.conf
主:无需配置
从:slaveof 主ip 主port
实验:
1.往主写数据,观察从是否同步
2.关闭主,往从写数据(写失败)
3.从只读,不可写
3、redis主从复制
从发送一个sync请求同步给主
主接到请求,响应回去一个rdb文件保持数据一致性
之后主会把写的命令传给从,保证数据的一致性,达到主从复制
6.redis集群
1、redis集群是多少台?
投票容错超过半数:3台 高可用:再加3台备份,一共6台
2、为什么集群中有一台挂了,则整个集群都挂了呢?
redis集群中有16384个槽平分给集群的3个节点,存取数据时:crc16(key)%16384=0~16383,通过对key值得计算得到他要保存的槽,如果一个节点挂掉,会导致这个集群无法正常运行。
3、搭建步骤
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.conf
5)更改权限
chmod 777 nginx-cluster.sh
3、使用ruby脚本搭建redis集群
cd /usr/upload/redis.3.0.0/src
./redis-trib.rb create --replicas 1 192.168.163.134:7001 192.168.163.134:7002 192.168.163.134:7003 192.168.163.134:7004 192.168.163.134:7005 192.168.163.134:7006
4、测试redis cluster命令
./redis-cli -c -p 7001
cluster info #打印集群的信息
cluster nodes #列出集群当前已知的所有节点(node),以及这些节点的相关信息
1 192.168.163.134:7002 192.168.163.134:7003 192.168.163.134:7004 192.168.163.134:7005 192.168.163.134:7006
4、测试redis cluster命令
./redis-cli -c -p 7001
cluster info #打印集群的信息
cluster nodes #列出集群当前已知的所有节点(node),以及这些节点的相关信息