1 、redis 介绍
Redis:Remote Dictionary Server 远程字典服务器
是完全开源免费的,用 C 语言编写的,遵守 BSD协议,是一个高性能的 (key/value) 分布式内存数据库,基于内存运行,并支持持久化的 NoSQL 数据库,是当前最热门的 NoSql 数据库之一,也被人们称为数据结构服务器。
2 、安装
wget http://download.redis .io /redis-stable.tar .gz
tar -zxvf redis-stable.tar .gz
cd redis-stable
make
make install
注意:redis包需要依赖gcc,本地机器若没有安装gcc需要安装。
3 、功能和比较:
Redis 与其他 KV缓存产品的优点:
Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载使用
Redis 不仅支持简单的KV类型数据,同时还提供list,set ,zset,hash等数据结构存储。
Redis支持数据备份,即master-slave模式的数据备份。
redis的场景:
发布,订阅消息系统
定时器,计数器
4 、操作Redis
在Redis的安装目录中复制 redis.conf ,并修改redis.conf 里面,设置 daemonize yes,开启后台进程。
启动:
redis-server redis.conf &
连接Redis:
redis-cli -p 6379
输入ping ,返回PONG,则Redis正常。
关闭:
单实例关闭 redis-cli shutdown
多实例关闭指定端口 redis-cli -p 6379 shutdown
5 、Redis 其他内容
1 ,redis是单进程的。
单进程模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。Redis的实际处理速度完全依靠主进程的执行效率,Epoll是Linux内核为处理大批量文件描述符而作了改进的epoll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
2 ,默认16 个数据库,类似数组下标,默认从零开始。
3 ,Select +数据库id 切换数据库
4 ,Dbsize 查看当前数据库的key
5 ,Flushdb:清空当前库
6 ,Flushall:清空全部库
7 ,16 个数据库统一密码管理
8 ,Redis索引也是从零开始
9 ,默认端口6379
6 、Redis持久化策略
持久化策略:
rdb:
fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。save, shutdown, slave 命令会触发这个操作。粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复。
aof:
把写操作指令,持续的写到一个类似日志文件里。持续的用日志记录写操作,crash后利用日志恢复。
7 、Redis 配置
Redis Replication 主从集群
主从复制,主机数据更新后根据配置和策略,自动同步到备机的 master/slaver 机制,Master 以写为主, Slave 以读为主。
读写分离,容灾恢复
原则:
1 :配从(库)不配主(库)
2 :从库配置,修改从库的配置文件redis.conf ,slaveof +主库ip +主库redis端口号 ,例如 slaveof 127.0 .0 .1 6370
{注意,若在同一台机器下开启两个redis实例进行模拟,需要修改Redis实例的配置文件,以保证两个redis实例的pid文件名,端口号,log文件名dump.rdb 文件名,aof文件等不同}
redis.conf 配置文件的修改 ,开启deamonize yes,pid文件名[pidfile],端口[port ],Log文件名[logfile],dump.rdb 文件名[dbfilename] [appendfilename]
3 :开启主redis服务,根据2 的命令修改从Redis的配置文件,并启动从Redis服务。
info replication 查看当前redis数据库的主从状态
redis-sentinel(哨兵机制)集群
配置主Redis的 sentinel.conf
sentinel monitor <master-name> <ip> <redis-port> <quorum>
例如:
sentinel monitor masterip 127.0 .0 .1 6379 1
host6379 :被监控数据库名字,自定义数据库名称
ip地址 redis端口号
最后一个数字1 ,表示主机挂掉后salve投票看让谁接替成为主机,得票数超过多少后成为主机。
启动Redis服务,以及哨兵服务
Redis-sentinel sentinel.conf
配置从Redis的sentinel.conf
假设主Redis的Ip为 192.168 .12 .2 port为6379 那么从Redis的sentinel.conf
sentinel monitor masterip 192.168 .12 .2 6379 1
启动哨兵模式
Redis-sentinel sentinel.conf
当主库宕机之后,可以通过哨兵模式,自动选取其中的某一个从库作为主库。编辑redis-sentinel的client-reconfig-script脚本,client-reconfig-script脚本如果配置了,在sentinel failover时会执行,用于手动做一些主从切换的操作,比如切换VIP(虚拟IP)指向,发送短信通知等。
sentinel.conf 的配置文件
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
添加host实现ip指向的定义:
#vim /etc/hosts
10.66 .1 .9 redis.test .com
编辑/var/redis/reconfig.sh 脚本,实现主从切换的操作。
echo "Master move from $4:$5 to $6:$7" >> /Data/logs/redis/sentinel.log
sed -i '/redis.zhibo.com/d' /etc/hosts
sed -i '$a '$6' redis.zhibo.com' /etc/hosts
client-reconfig -script 脚本会在选举出做switch操作的sentinel机上执行一次,在其他运行sentinel的集群成员机上也会各执行一次,这样所有集群机上访问redis. test. com 这个域名都会指向正常运行的redis的ip上去。
redis 性能分析:
修改配置文件中的最大内存
maxmemory
修改配置文件中的内存策略
LRU means Least Recently Used
LFU means Least Frequently Used
Redis的INFO – Redis命令可以查看当前内存使用情况
提前做好内存容量规划,防止out of max memory;通常来讲实际内存达到最大内存的3 /4 时就要考虑加大内存或者拆分数据。
参考如下文件,https:
查看机器的redis读写速率
redis-benchmark -n 1000000 -t set ,get -P 16 -q
SET : 1145475.38 requests per second
GET: 1536098.25 requests per second