以前,一直拿redis当memcached来用,今天才真天了解到了Redis真正比memcached强大到了什么地方,他的真正的强势到了什么地方。
首先最让我困惑的一点是,Redis是所有数据都存储到内存里面的吗?这让我费解,如果是,何来keys存在内存,从而提高性能。我很困惑,看了RDB、AOF以后,发现不像是数据的存储查询数据库文件。后来我决定重新学习Redis相关资料,得到的总结如下:
Redis里的数据存储在哪里了?
Redis的Key是绝对存储在内存里面的,这也是Redis高性能的一个依仗,哪么Value存到什么地方了?默认是存在Virtual Memery里面了,所谓虚拟内存,需要注意的是,这里的虚拟内存并不是系统的虚拟内存,而是Redis里的一个数据存储文件,这尼马让我郁闷良久。因为Redis里可以设置vm.swap文件的存放目录。
Redis的内存的使用分析
Redis为什么叫数据库文件叫虚拟内存,不叫数据库文件,这大有文章,所谓Redis的设计理念上数据是存储在内存中设计的,因为就算设置了虚拟内存,Redis会自动将热的数据放在内存,直接提供读取,把经常不读的数据放到虚拟内存中,从而提高性能。而Keys里己经记录了虚拟内存文件中的寻址数据,读取也是比一般数据库要快很多倍的。
Redis的集群
http://www.redis.cn/topics/cluster-tutorial.html
redis分片,Redis高可用性,Redis主从备份,可以参考上文中,Redis-trip工具实现Redis-cluster真正集群。
Redis分片是通过哈希算法将key区分几个区间,然后由划分库或服务器实现分片的。通过redis-trip工具实现非常智能。
Redis的存储结构
Redis支持Map、List、string、int等数据类型,为了减少Key的数量,减少内存的使用,合理使用Map、List可以减少内存和清晰程序逻辑。
Redis的可靠性
Redis官方就宣称Redis并不是一个数据绝对安全的数据存储引擎,当存储时Redis会先存储到内存,就返回了状态,在这期间并没有写入磁盘,这很有可能数据就没有了,但只因为这样,Redis的性能大大提升,减少了磁盘的写入频率。
Redis应用场景
Redis完全可以做数据高速缓存数据库、时时计数、时时统计