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
save 300 10
save 60 10000

     
appendonly yes/no 是否开启aof no
appendfilename "appendonly.aof" aof日志文件名称 "appendonly.aof"
appendfsync always/everysec/no

always:每次有数据修改发生时都会写入AOF文件

everysec:每秒钟同步一次,该策略为AOF的缺省策略
no:从不同步。高效但是数据不会被持久化

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 设置密码  
posted @ 2020-05-31 20:13  且行且码  阅读(385)  评论(0编辑  收藏  举报