引言:更多相关请看 Java缓存
redis全称Remote Dictionary Server是一个key-value存储系统,这点和Memcached类似。不同的是它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集。
和Memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。
同步对读取操作的可扩展性和数据冗余很有帮助。
适合场景:
1.会话缓存(Session Cache):用Redis缓存会话比其他存储(如memcached)的优势在于,redis提供持久化。
2.全页缓存(FPC):除基本的会话token之外,Redis还提供很简便的FPC平台。
3.队列:Redis在内存存储引擎领域的一大优点是提供list和set操作,这使得Redis能作为一个很好的消息队列平台来使用。
4.排行榜/计数器:Redis在内存中对数据进行递增递减的操作实现的非常好。
5.订阅/发布
缺点:
1.持久化。Redis直接将数据存储到内存中,要将数据保存到磁盘上,Redis可以使用两种方式实现持久化过程。
2.耗内存,占用内存过高。
Redis相比memcached的优势
(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型。
(2) redis的速度比memcached快很多。
(3) redis可以持久化其数据。
哨兵机制(redis2.6以后出现的)
哨兵机制:
监控:监控主数据库和从数据库是否正常运行;
提醒:当被监控的某个redis出现问题的时候,哨兵可以通过API向管理员或者其他应用程序发送通知;
自动故障迁移:主数据库出现故障时,可以自动将从数据库转化为主数据库,实现自动切换;
具体的配置步骤面试中可以说参考的网上的文档。要注意的是,如果master主服务器设置了密码,记得在哨兵的配置文件(sentinel.conf)里面配置访问密码。
事务
Redis是有事务的,redis中的事务是一组命令的集合,这组命令要么都执行,要不都不执行,redis事务的实现,需要用到MULTI(事务的开始)和EXEC(事务的结束)命令 ;
Redis的事务除了保证所有命令要不全部执行,要不全部不执行外,还能保证一个事务中的命令依次执行而不被其他命令插入。同时,redis的事务是不支持回滚操作的。
【扩展】
Redis的事务中存在一个问题,如果一个事务中的B命令依赖上一个命令A怎么办? 这会涉及到redis中的WATCH命令:可以监控一个或多个键,一旦其中有一个键被修改(或删除),之后的事务就不会执行,监控一直持续到EXEC命令(事务中的命令是在EXEC之后才执行的,EXEC命令执行完之后被监控的键会自动被UNWATCH)。 应用场景:待定