redis总结2-Redis六种数据类型命令总结(附命令实例)
redis总结3-持久化rdb,aof,运维命令,Sentinel监控
一.简介
1.1 NoSQL简介
1.1.1 定义
NoSQL(Not Only SQL),意为反SQL运动,是一项合新的数据库革命性运动,非关系型的数据库.
NoSQL是以key-value形式存储,和传统的关系型数据库不一样,不一定遵循传统数据库的一些基本要求,比如说遵循SQL标准(insert, delete,select)、ACID属性(事务处理)、表结构等等,这类数据库主要有以下特点:非关系型的、分布式的、开源的、水平可扩展的.
支持事务比较简单(不能满足现在的需求)
1.1.2 NoSQL特点
1.处理超大量的数据
2.运行在便宜的PC服务器集群上
3.击碎了性能瓶劲(性能高,无须优化)
1.1.3 NoSQL适用场景
1.对数据高并发读写(传统数据库上万次的写,硬盘I/O就会有问题)
2.对海量数据的高效率存储和访问(fielfeed:一个月有2.5亿用户动态)
3.对数据的高可扩展性和高可用性(nosql做分布式,很简单。没有固定的表结构,迭代开发时)
1.2 Redis简介
1.2.1 简介
redis是开源,BSD许可,高级的key-value存储系统.
可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务.
为了保证效率,数据都是缓存在内存中,它也可以(方式一)周期性的把更新的数据写入磁盘或者(方式二)把修改操作写入追加的记录文件(相当于log文件)。
Redis提供的API语言包括:C、C++、C#、Clojure、Common Lisp、Erlang、Haskell、Java、Javascript、Lua、Objective-C、Perl、PHP、Python、Ruby Scala、Go、Tcl
1.2.2 Redis具体适用场合
1.取最新N个数据的操作
2.排行榜应用,取TOP N操作
3.需要精确设定过期时间的应用
4.计数器应用
5.Uniq操作,获取某段时间所有数据排重值
6.实时系统,反垃圾系统
7.Pub/Sub构建实时消息系统
8.构建队列系统
9.缓存
1.2.3 redis和memcached相比
1: redis可以用来做存储(storge), 而memccached是用来做缓存(cache)
这个特点主要因为其有”持久化”的功能.
2: 存储的数据有”结构”,对于memcached来说,存储的数据,只有1种类型–”字符串”,
而redis则可以存储字符串,链表,哈希结构,集合,有序集合.
类型 | redis | memcached |
---|---|---|
用途 | 存储(storge) | 缓存(cache) |
数据格式 | 字符串,链表,哈希结构,集合,有序集 | 只有1种类型–”字符串”,k/v类型 |
集群方式 | Redis支持master-slave(主—从)模式应用 | 只支持单机,不支持主-从 |
持久化 | Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。 | 不支持持久化 |
值大小 | Redis单个value的最大限制是1GB | memcached只能保存1MB的数据 |
1.2.4 redis,mysql,mongodb对比
对比 | redis | mysql | mongoDB |
---|---|---|---|
库 | 有库 | 有库 | 有库 |
表 | 无表 | 有表 | 有库 |
字段 | 无字段 | 有字段 | 无字段 |
二.安装
官网地址: https://redis.io/
2.1 单机安装
2.1.1 更新gcc和tcl
[root@localhost ~]# yum install gcc tcl
Gcc参考文章
Tcl语言参考文章
注意:如果操作时请确认上网权限.如果需要登录,则用图形界面登录后再操作.
如果报错:” Loaded plugins: fastestmirror, refresh-packagekit, security No such command:”
参考文章
[root@pc]# vi /etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=0 //把1改为0
verbose=0
socket_timeout=3
hostfilepath=/var/cache/yum/timedhosts.txt
maxhostfileage=10
maxthreads=15
#exclude=.gov, facebook
#vi /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1 #将plugins的值修改为0
installonly_limit=5
2.1.2 下载安装包,上传文件,解压文件
redis官网:https://redis.io/
Redis 4.0.1下载地址:http://download.redis.io/releases/redis-4.0.1.tar.gz
[root@localhost ~]# tar -zxvf redis-3.0.7.tar.gz
2.1.3 创建安装目录,准备将redis安装到该目录下
[root@localhost ~]# mkdir /usr/local/redis
2.1.4 进入到第2步的解压后的redis文件夹中
2.1.4.1 进入目录
2.1.4.2 执行安装语句
[root@localhost ~]# make PREFIX=/usr/local/redis install
2.1.5 复制源文件中的配置文件
2.1.5.1 创建 conf文件夹
[root@localhost ~]# mkdir conf
创建之后:
2.1.5.2 复制配置文件
[root@localhost redis]# cp /usr/local/src/redis-3.0.7/redis.conf /usr/local/redis/conf/6379.conf
2.1.5.3 修改配置文件
1)将daemonize的值修改为yes
[:set number 显示行数]
2)pidfile的值修改为 /var/run/redis_6379.pid
配置详解
2.1.6 启动服务
2.1.6.1 进入文件目录
[root@localhost bin]# cd /usr/local/redis/bin
[root@localhost bin]# pwd
/usr/local/redis/bin
[root@localhost bin]# ./redis-server
2.1.6.2 测试使用
2.2 设值环境变量及服务
以上安装完之后通过命令启动服务之后,需要新开一个窗口来进行操作,没有将服务设值为后台服务.也没有配置环境变量.也没有设值随机启动.下步操作实现该功能.
2.2.1 配置环境变量
1)编辑
[root@localhost ~]# vi /etc/profile
2)在后面增加:
#Redis
export PATH=$PATH:/usr/local/redis/bin
保存退出:
3)生效
[root@localhost bin]# source /etc/profile
2.2.2 配置redis为服务
1) 默认启动脚本在 /usr/local/src/redis-3.0.7/utils/redis_init_script
2) 将启动脚本copy到/etc/rc.d/init.d/目录下,并命名为redis
[root@localhost bin]# cp /usr/local/src/redis-3.0.7/utils/redis_init_script /etc/rc.d/init.d/redis
3) 修改配置
需要修改的配置
A. 添加注册chkconfig
在注释的最后增加:
#chkconfig: 2345 80 90
如果不添加启动会报: :service redis does not support chkconfig
B. EXEC
修改前: EXEC=/usr/local/bin/redis-server
修改为: EXEC=/usr/local/redis/bin/redis-server
C. CLIEXEC
修改前: CLIEXEC=/usr/local/bin/redis-cli
修改为 CLIEXEC=/usr/local/redis/bin/redis-cli
D. CONF
修改前: CONF="/etc/redis/${REDISPORT}.conf"
修改后: CONF="/usr/local/redis/conf/${REDISPORT}.conf"
E. start
修改前: $EXEC $CONF
修改后: $EXEC $CONF &
修改前截图:
修改后截图:
(vi可以通过 通过 :set nu 来显示行数)
2.2.3 将Redis注册为服务
[root@localhost utils]# chkconfig --add redis
2.2.4 配置防火墙
1) 编辑配置
[root@localhost utils]# vi /etc/sysconfig/iptables
2) 在以前配置中增加配置
-A INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
此处一定要注意.添加在22后面.不要放在commit的前面.
3) 配置生效
[root@localhost utils]# service iptables restart
2.2.5 配置6379.conf
1) 修改daemonize 的值为yes(修改前为no) :
daemoniz yes
2) 修改pidfile为 /var/run/redis_6379.pid
pidfile /var/run/redis_6379.pid
2.2.6 测试服务
1) 启动 [root@localhost ~]#service redis start
2) 停止 [root@localhost ~]#service redis stop
2.2.7 服务随机启动
1) 配置启动服务
[root@localhost utils]# chkconfig redis on
2) 查看配置服务
[root@localhost utils]# chkconfig –list redis
3) 如果需要关闭启动服务
[root@localhost utils]# chkconfig redis off
4) 重启机器测试
Reboot
2.2.8 使用工具查看连接redis
2.3 安装后的目录结构:
文件名称 | 说明 |
---|---|
redisredis-cli | 客户端 |
redisredis-server | 服务端 |
rowredis-benchmark | 性能测试工具 |
redis-check-aof | aof日志文件检测工(比如断电造成日志损坏,可以检测并修复) |
redis-check-dump | rdb快照文件检测工具,效果同上 |
后台运行配置: conf中的daemonize yes
2.4 配置详解
名称 | 说明 | 备注 |
---|---|---|
daemonize | 如果需要在后台运行,把该项心为yes | |
pidfile | 配置多个pid的地址,默认在/var/run/redis.pid | |
bind | 绑定ip,设置后只接受来自该ip的请求 | |
port | 监听端口,默认为6379 | |
timeout | 设置客户端连接时的超时时间,单位为秒 | |
loglevel | 分为4级,debug、verbose、notice、warning | |
logfile | 配置log文件地址 | |
databases | 设置数据库的个数,默认使用的数据库为0 | |
save | 设置redis进行数据库镜像的频率 | |
rdbcompression | 在进行镜像备份时,是否进行压缩 | |
Dbfilename | 镜像备份文件的文件名 | |
Dir | 数据库镜像备份的文件放置路径 | |
Slaveof | 设置数据库为其他数据库的从数据库 | |
Masterauth | 主数据库连接需要的密码验证 | |
Requirepass | 设置登录登录时需要使用的密码 | |
Maxclients | 限制同时连接的客户数量 | |
Maxmemory | 设置redis能够使用的最大内存 | |
Appendonly | 开启append only模式 | |
Appendfsync | 设置对appendonly.aof文件同步的频率 | |
vm-enabled | 是否开启虚拟内存支持 | |
vm-swap-file | 设置虚拟内存的交换文件路径 | |
vm-max-memory | 设置redis使用的最大物理内存大小 | |
vm-page-size | 设置虚拟内存的页大小 | |
vm-pages | 设置交换文件的总的page数量 | |
vm-max-threads | 设置VMIO同时使用的线程数量 | |
Glueoutputbuf | 把小的输出缓存存放在一起 | |
hash-max-zipmap-entries | 设置hash的临界值 | |
Activerehashing | 重新hash |
2.5 关于rdp,和aof
2.5 集群
2.5.1 集群作用
- 主从备份,防止主机宕机,
- 读写分离,分担master的任务
- 任务分离,如由从服务器担任备份和计算工作
2.5.2 集群的两种方式及通信过程
集群的两种方式如上图,第二种集群方式更好,因master宕机后,可以直接切换到slave1
主动同步过程:
1) slave启动后发现master主服务,自动连接到master,
2) 然后就开始同步,master开始dump出rdb到,然后salve同步到rdb之后,直接放到slave内存中.
3) 在同步的过程中,产生的新的更新在aof,等rdb同步完成后,然后同步aof到slave中,
4) 然后master再有改变,则通过replicationFeedSavles同步到slave中.
2.5.2 redis集群配置
1) 6379为主,复制配置文件,6380,6381 为从
2) 6380,6381分别修改pidfile为6380,6381,port修改为6380,6381
3) 6379关rdb,开aof,6380开启rdb,不开aof,6381不开启rdb,不开aof
4) 申明6380,6381的为从服务,从属的主服务地址,端口
5) 6379主服务可以配置密码,从服务6380,6381配置对应的主服务的密码
Master配置:
1:关闭rdb快照(备份工作交给slave)
2:可以开启aofslave配置:
1: 声明slave-of
2: 配置密码[如果master有密码]
3: [某1个]slave打开 rdb快照功能
4: 配置是否只读[slave-read-only]缺陷:
每次salave断开后,(无论是主动断开,还是网络故障) ,再连接master
都要master全部dump出来rdb,再aof,即同步的过程都要重新执行1遍.
所以要记住—多台slave不要一下都启动起来,否则master可能IO剧增
配置的图示如下:
redis-集群-6379-1-关闭rdb:
redis-集群-6379-2-设置密码:
redis-集群-6380-1-修改pid和port:
redis-集群-6380-2-开启rdb:
redis-集群-6380-3-开启slaveof
redis-集群-6380-5-设置访问master的密码:
redis-集群-6381-1-pid和port:
redis-集群-6381-2-关闭aof:
redis-集群-6381-2-关闭rdb:
redis-集群-6381-4-设置访问master的密码: