NoSQL数据库实战派

第二章 Redis基础

缓存通过“用空间换时间”来达到数据获取的目的。

缓存的成本较高,在实际设计架构中需要权衡访问延迟和成本。

通过缓存,可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。

一般情况下,数据被存放在数据库中,应用程序直接操作数据库。当应用程序访问量达到上万条时,数据库服务器的压力会增大。如果需要减轻数据库服务器的压力:

1.实现数据库的读写分离。

2.实现数据库的分库分表。

3.使用缓存,并实现读写分离。

缓存的原理是:将应用程序已经访问过的内容或数据存储起来,当应用程序再次访问这些内容或数据时先从缓存中查找:如果缓存命中,则返回数据;如果缓存不命中,则再次查找数据库,并将得到的内容或数据保存到缓存中。

缓存具有以下缺点:

1.在系统中引入缓存,会增加系统的复杂度。

2.缓存比数据库的存储成本更高,系统部署及运行的费用也更高。

3.由于一份数据被同时存放到缓存和数据库中,甚至缓存中也会有多个数据副本,所以会存在多份数据不一致的问题。

Redis是完全开源的,并遵守BSD协议,它是一个高性能的Key-Value数据库。具有以下三个特点:

1.支持数据持久化,可以将缓存中的数据保存到磁盘中,重启后可以再次加载到这些数据进行使用。

2.不仅支持Key-Value类型的数据,还支持基于list、set、zset、hash等数据结构的存储。

3.支持Master-Salve模式的数据备份。

2.1.2 Redis的优势

Redis是基于内存的数据库,读操作和写操作都在内存中完成,速度完全超过磁盘数据库的读写速度。

Redis之所以具有很高的性能,主要得益于以下几点:

1.纯内存操作。一般都是简单的读写操作,,线程占用的时间很少,时间的花费主要集中在I/O上,所以读写数据快。

2.采用单线程模型。从而保证每个操作的原子性,也减少了线程上下文切换和竞争。

3.使用I/O多路复用模型。非阻塞I/O;使用单线程来轮询描述符;将数据库的开、关、读、写都转换成了事件;Redis采用自己实现的事件分离器,效率比较高。

4.高效的数据结构。

 · 整个Redis就是一个全局哈希表,其时间复杂度是O(1),而且Redis会执行再哈希操作以防止因哈希冲突导致链表过长。并且为防止一次性重新映射时数据过大导致线程阻塞,Redis采用了渐进式再哈希,巧妙地将一次性复制分摊到多次操作中,从而避免了阻塞。

 · Redis使用哈希结构和有序的数据结构加快了读写速度。

 · Redis对数据存储进行了优化,对数据进行压缩存储,还可以根据实际存储的数据类型选择不同编码。

2.1.3 Redis与其他Key-Value数据库有何不同

Redis有着更为复杂的数据结构,并且提供了对它们的原子性操作(这一个不同于其他Key-Value数据库的重点)。Redis的数据类型都是基本数据结构,并且对程序员透明,程序员无需进行额外的抽象。

Redis运行在内存中,但是其数据可以持久化到磁盘中,所以在对不同数据进行高速读写时,数据量不能多于内存的存储空间。

Redis的另一个优点是:对于在磁盘上操作比较复杂的数据结构,在内存中操作它们非常简单,这样Redis可以做很多复杂性很强的事情。同时,在磁盘格式方面,内存数据库以追加方式写入数据,因为它不需要进行随机访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值