redis的特性
承接上文redis入门篇,本文具体介绍一下redis的特性,以及与另外一个nosql数据库memcached的对比。
一、redis的优点
根据上文,我们知道redis的如下特性成为了他的竞争力:
- key-value对应的内存数据库,高效。
- value支持着五种丰富的数据类型,更加强大,memcache只是简单地key-value存储,但value的数据类型单一。
- 操作原子性(redis的每一个指令都是具有原子性的),支持简单的事务(更类似于批处理,因为不支持回滚)。
- 丰富的指令集合,可以设置key的过期时间等。
二、redis的高级特性
- redis有虚拟内存的概念,可以将不常访问的数据放入磁盘,相对于memcache来说,它不是完全的内存数据库。
- redis支持持久化操作,memcache不支持。
- redis支持主从同步配置,支持集群搭建。
三、redis的持久化策略
redis有两种持久化方案快照,RDB和aof:
1、快照
redis默认使用快照的方式持久化,当满足一定条件时,redis就会将内存中的数据持久化到硬盘中,可在redis.conf中配置,如下:
save 900 1表示在900s内,如果至少有一条写操作,就会发生持久化操作。
持久化文件为二进制文件,是在redis的安装目录底下的rdb结尾文件:
若是redis突然宕机,此方法会丢失最后一次快照后修改的内容,具有不可靠性。
2、aof(日志追加方式)
该方法需要手动开启,将配置文件中的appendonly设置为yes,默认是no:
开启以后,持久化的文件为appendonly.aof,也在redis的安装路径底下。
同时的,也可以设置append发生时机,有如下三种:
分别代表每一次写操作都持久化,每一秒执行一次持久化,以及第三种方式,完全依赖操作系统,性能最好,持久化没保证。
aof方式会将每一次写的命令都写进文件中,也就意味着,文件会越来越大,如,当操作了一百次incr时,就会记录一百条该指令进持久化文件,但实际上,只需要记录一条set就可以了。
两者孰优孰劣很难确定,后者用性能换可靠,前者用青春赌明天(啊呸,是可靠换性能)。
四、redis的主从同步
redis支持一个master可以配多个slave服务器,master服务器的数据将会被同步到slave上,可以大大地提高读性能。
配置slave的方式很简单,只需要在slave的配置文件中写slaveof的ip地址加端口号即可:
可以禁用主节点的持久化,以提高性能。
主从复制不会阻塞主节点,但是会阻塞从节点,从节点阻塞时无法响应客户端请求。
redis的哨兵机制
redis主从同步会有一个问题--若是主节点宕机,主从复制就扯淡了。
这时,可以起一个哨兵服务,来监控主节点的状态,当主节点发生故障时,可以让从节点转化为主节点。
需要注意的是,哨兵最好应该是奇数个,因为,当有哨兵监控到主节点故障,会发生选举,即,多个哨兵节点通过投票选举是否让发现故障的哨兵节点处理这次主节点转移。
五、redis的应用场景
- 实现会话缓存(session cache)
- 队列,由于redis中value数据结构的特性,可以实现一些缓存队列
- 排行榜,同样的sorted set能轻易地帮我们实现这一功能
- 发布/订阅,redis支持这一特性,但是使用较少