初识Redis

最近公司在进行压力测试时发现Mysql中的session表读写成为系统的瓶颈。于是,需要将其移到其他数据库中,调研后发现Redis比较适合。

Redis是一个基于内存的键值对存储数据库,由于内置了丰富的数据结构,其应用场景也较为广泛。这里是Redis作者列举的几种比较适合使用Redis的应用场景。现在,Redis大范围作为缓存使用的。这篇文章将其与Memcache, MemcacheDB以及Tokyo Tyrant做了对比。

除此外,Redis还内置了Pub/Sub,非常方便用于事件推送,同时还提供了Keyspace Notifications,通过Pub/Sub的方式提供消息通知。但是,Redis的Pub/Sub 方式还是比较原生的,其无法提供稳定性保障,即

Because Redis Pub/Sub is fire and forget currently there is no way to use this feature if you application demands reliable notification of events, that is, if your Pub/Sub client disconnects, and reconnects later, all the events delivered during the time the client was disconnected are lost.

初次使用NoSQL的同学可能对键值对设计比较迷茫,可以参考浅谈redis数据库的键值设计,进阶一点的还有这篇文章NoSQL Data Modeling Techniques(中文版NoSQL 数据建模技术)。

Redis现有的高可靠性架构一般通过以下方式实现:

1.Sentinel
Redis官方给出的一种分布式架构方式,通过部属Sentinel client可以实现监控,通知以及自动故障恢复。关于Sentinel可以参考官方文档,Redis Sentinel Documentation。但是,这种方式需要客户端来处理各种事件,而且相应的客户端对于Sentinel的支持不够完善。

2.Keepalived
在官方Sentinel没有推出之前,许多HA是使用Keepalived实现的,具体实现方式参考这里