Redis 入门实战(1)--简介
Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写、高性能的key-value数据库,是当前使用最广泛的NoSQL之一。
1、简介
Redis是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询,bitmaps,hyperloglogs和地理空间(geospatial) 索引半径查询。 Redis内置了复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions)和不同级别的磁盘持久化(persistence), 并通过Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性(high availability)。
2、模式
2.1、单机模式
该模式只安装一个节点,一般用于测试学习。
2.2、主从模式
主节点处理写请求,从节点处理读请求;可以达到读写分离、backup等目的。
2.3、哨兵模式
为了保证redis的高可用,哨兵模式在组从模式的基础上引入哨兵(Sentinel)来管理Redis的主从节点:
1.监控(Monitoring):Sentinel会不断地检查你的主服务器和从服务器是否运作正常。
2.提醒(Notification):当被监控的某个Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
3.自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作,它会将其中一个从服务器升级为新的主服务器,并让其他的从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址,使得集群可以使用新主服务器代替失效服务器。
2.3、集群模式(cluster)
当缓存数据量增加以后,无法用单体服务器承载缓存服务时,需要把缓存的数据切分成不同的分区,将数据分区放到不同的服务器中,用分布式的缓存来承载高并发的缓存访问。Redis Cluster是官方在3.0版本后推出的分布式方案。
Redis Cluster 采用虚拟槽分区算法来对数据进行拆分。槽是用来存放缓存信息的单位,在Redis中将存储空间分成了16384个槽,也就是说Redis Cluster槽的范围是0 -16383(2^4 * 2^10)。缓存信息通常是用Key-Value的方式来存放的,在存储信息的时候,集群会对Key进行CRC16校验并对16384取模(slot=CRC16(key)%16383)。得到的结果就是Key-Value所放入的槽,从而实现自动分割数据到不同的节点上。然后再将这些槽分配到不同的缓存节点中保存。
3、持久化
3.1、RDB 持久化
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储。redis.conf中配置如下:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。 save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。 save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
dbfilename dump.rdb #快照文件名称
3.2、AOF 持久化
AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。redis.conf中配置如下:
appendonly no #是否开启aof appendfilename "appendonly.aof" #日志文件名称 #appendfsync always #每次有数据修改发生时都会写入AOF文件 appendfsync everysec #每秒钟同步一次,该策略为AOF的缺省策略 #appendfsync no #从不同步。高效但是数据不会被持久化
4、redis 常用配置
4.1、redis.conf
配置项 | 说明 | 默认值 |
daemonize yes/no | 是否启用守护进程 | no |
pidfile /var/run/redis_6379.pid | 设置进程文件 | /var/run/redis_6379.pid |
logfile "" | 设置日志文件 | "" |
protected-mode yes/on |
protected-mode 为 no 时,其他机器可以访问 redis protected-mode 为 yes 时,需设置 bind ip 或者设置访问密码,其他机器才可以访问 redis |
yes |
bind ip1 ip2 | 绑定主机地址 | |
requirepass password | 设置密码 | |
port 6379 | 设置监听端口 | |
timeout 300 | 设置客户端空闲一定时间后关闭该客户端连接,单位 秒;如果指定为 0,表示关闭该功能。 | 0 |
dbfilename dump.rdb | Redis 导出的文件名称 | dump.rdb |
dir ./ | Redis 导出的文件目录 | ./ |
slaveof | 主从模式时,从节点配置的主节点地址 | |
masterauth | 主从模式时,从节点配置的主节点密码 | |
save m n | 在 m 秒之内,如果至少有 n 个 key 发生变化,则 dump 内存快照。 |
save 900 1 |
appendonly yes/no | 是否开启aof | no |
appendfilename "appendonly.aof" | aof日志文件名称 | "appendonly.aof" |
appendfsync always/everysec/no |
always:每次有数据修改发生时都会写入AOF文件 everysec:每秒钟同步一次,该策略为AOF的缺省策略 |
everysec |
4.2、sentinel.conf
配置项 | 说明 | 默认值 |
daemonize yes/no | 是否启用守护进程 | no |
pidfile /var/run/redis-sentinel-26379.pid | 设置进程文件 | /var/run/redis-sentinel-26379.pid |
logfile "" | 日志文件 | "" |
protected-mode yes/on |
protected-mode 为 no 时,其他机器可以访问 redis protected-mode 为 yes 时,需设置 bind ip 或者设置访问密码,其他机器才可以访问 redis |
yes |
port 26379 | 设置哨兵端口 | 26379 |
sentinel monitor <主节点别名> <主节点host> <主节点端口> <票数> |
配置哨兵,如: sentinel monitor mymaster 10.49.196.20 6379 2 |
|
sentinel auth-pass mymaster 123456 | 设置密码 |