Redis笔记
Posted 王一土
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis笔记相关的知识,希望对你有一定的参考价值。
Redis
NoSql数据库
1. 什么是NoSql
为了解决高并发、高可用、高可扩展,大数据存储等一系列问题而产生的数据库解决方案,就是NoSql。
NoSql,叫非关系型数据库,它的全名Not only sql。它不能替代关系型数据库,只能作为关系型数据库的一个良好补充。
Redis是使用c语言开发的一个高性能键值数据库。Redis可以通过一些键值类型来存储数据。
键值类型:
String字符类型 map散列类型 list列表类型 set集合类型 sortedset有序集合类型
2. redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)。(最多使用)
分布式集群架构中的session分离。
聊天室的在线好友列表。
任务队列。(秒杀、抢购、12306等等)
应用排行榜。
网站访问统计。
数据过期处理(可以精确到毫秒)
3. redis安装
3.1 redis下载
官网地址:http://redis.io/
下载地址:http://download.redis.io/releases/redis-3.2.4.tar.gz
(之前的cent os6.几版本的系统 而 7.0的系统可以装上,3.2.7版本的redis
装不上3.2.7版本的redis 换成3.2.4低几个版本的可以装上,应该是系统兼容不好)
3.2 redis的安装
redis的安装环境会安装到linux系统中。
第一步:安装VMware,并且在VMware中安装centos系统(参考linux教程)。
第二步:将redis的压缩包,上传到linux系统
第三步:对redis的压缩包进行解压缩
Redis解压缩之后的文件是用c语言写的源码文件
tar -zxf redis-3.0.0.tar.gz
第四步:安装c语言环境(安装centos之后,自带c语言环境)
yum install gcc-c++
第五步:编译redis源码
cd redis-3.0.0
make
第六步:安装redis
make install PREFIX=/usr/local/redis( 指明安装到哪儿) 默认安装在当前路径下
第七步:查看是否安装成功
3.3 redis启动
3.3.1 前端启动
前端启动的命令:
[root@itheima bin]# ./redis-server
前端启动的关闭:
强制关闭:Ctrl+c
正常关闭:[root@itheima bin]# ./redis-cli shutdown
启动界面:
前端启动的问题:
一旦客户端关闭,则redis服务也停掉。
3.3.2 后端启动
第一步:需要将redis解压之后的源码包中的redis.conf文件拷贝到bin目录下
[root@itheima bin]# cp /root/redis-3.0.0/redis.conf ./
第二步:修改redis.conf文件,将daemonize改为yes
先要使用vim redis.conf
第三步:使用命令后端启动redis
[root@itheima bin]# ./redis-server redis.conf
第四步:查看是否启动成功
关闭后端启动的方式:
强制关闭:[root@itheima bin]# kill -9 5071
正常关闭:[root@itheima bin]# ./redis-cli shutdown
在项目中,建议使用正常关闭。
因为redis作为缓存来使用的话,将数据存储到内存中,如果使用正常关闭,则会将内存数据持久化到本地之后,再关闭。
如果是强制关闭,则不会进行持久化操作,可能会造成部分数据的丢失。
4 Redis客户端
4.1 Redis自带的客户端
*****启动
启动客户端命令:[root@itheima bin]# ./redis-cli -h 127.0.0.1 -p 6379
-h:指定访问的redis服务器的ip地址
-p:指定访问的redis服务器的port端口
还可以写成:[root@itheima bin]# ./redis-cli
使用默认配置:默认的ip【127.0.0.1】,默认的port【6379】
*****关闭
Ctrl+c
127.0.0.1:6379> quit
5 Redis的主从复制
5.1 什么是主从复制
持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后会将硬盘上持久化的数据恢复到内存中,但是当redis服务器的硬盘损坏了可能会导致数据丢失,如果通过redis的主从复制机制就可以避免这种单点故障,如下图:
说明:
1. 主redis中的数据有两个副本(replication)即从redis1和从redis2,即使一台redis服务器宕机其它两台redis服务也可以继续提供服务。
2. 主redis中的数据和从redis上的数据保持实时同步,当主redis写入数据时通过主从复制机制会复制到两个从redis服务上。
3. 只有一个主redis,可以有多个从redis。
4. 主从复制不会阻塞master,在同步数据时,master 可以继续处理client 请求
5. 一个redis可以即是主又是从,如下图:
5.2 主从复制设置
5.2.1 主机配置
无需配置
5.2.2 从机配置
第一步:复制出一个从机
[root@itheima redis19]# cp bin/ bin2 –r
第二步:修改从机的redis.conf
语法:Slaveof masterip masterport
slaveof 192.168.242.137 6379 (配置是谁的从机)
第三步:修改从机的port地址为6380
在redis.conf中修改
第四步:清除从机中的持久化文件
[root@itheima bin2]# rm -rf appendonly.aof dump.rdb
第五步:启动从机
[root@itheima bin2]# ./redis-server redis.conf
第六步:启动6380的客户端
[root@itheima bin2]# ./redis-cli -p 6380
注意:
主机一旦发生增删改操作,那么从机会将数据同步到从机中
从机不能执行写操作
127.0.0.1:6380> set s2 222
(error) READONLY You can\'t write against a read only slave.
6 Redis集群
6.1 redis-cluster架构图
架构细节:
(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.
(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.
(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可
(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
示例如下:
6.2 redis-cluster投票:容错
(1)集群中所有master参与投票,如果半数以上master节点与其中一个master节点通信超过(cluster-node-timeout),认为该master节点挂掉.
(2):什么时候整个集群不可用(cluster_state:fail)?
- 如果集群任意master挂掉,且当前master没有slave,则集群进入fail状态。也可以理解成集群的[0-16383]slot映射不完全时进入fail状态。
- 如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态。
6.3 安装ruby
集群管理工具(redis-trib.rb)是使用ruby脚本语言编写的。
第一步:安装ruby
[root@itheima bin2]# yum install ruby
[root@itheima bin2]# yum install rubygems
第二步:将以下文件上传到linux系统
第三步:安装ruby和redis接口
[root@itheima ~]# gem install redis-3.0.0.gem
第四步:将redis-3.0.0包下src目录中的以下文件拷贝到redis19/redis-cluster/
[root@itheima src]# cd /usr/local/redis19/
[root@itheima redis19]# mkdir redis-cluster
[root@itheima redis19]# cd /root/redis-3.0.0/src/
[root@itheima src]# cp redis-trib.rb /usr/local/redis19/redis-cluster
第五步:查看是否拷贝成功
6.4 搭建集群
搭建集群最少也得需要3台主机,如果每台主机再配置一台从机的话,则最少需要6台机器。
端口设计如下:7001-7006
第一步:复制出一个7001机器
[root@itheima redis19]# cp bin ./redis-cluster/7001 –r
第二步:如果存在持久化文件,则删除
[root@itheima 7001]# rm -rf appendonly.aof dump.rdb
第三步:设置集群参数
第四步:修改端口
第五步:复制出7002-7006机器
[root@itheima redis-cluster]# cp 7001/ 7002 -r
[root@itheima redis-cluster]# cp 7001/ 7003 -r
[root@itheima redis-cluster]# cp 7001/ 7004 -r
[root@itheima redis-cluster]# cp 7001/ 7005 -r
[root@itheima redis-cluster]# cp 7001/ 7006 –r
第六步:修改7002-7006机器的端口
第七步:启动7001-7006这六台机器
第八步:修改start-all.sh文件的权限
[root@itheima redis-cluster]# chmod u+x start-all.sh
[root@itheima redis-cluster]# ./start-all.sh
第九步:创建集群
以上是关于Redis笔记的主要内容,如果未能解决你的问题,请参考以下文章