Redis 概述
Redis 一个开源的基于键值对(Key-Value)NoSQL 数据库。使用 ANSI C 语言 编写、支持网络、基于内存但支持持久化。性能优秀,并提供多种语言的 API。
我们要首先理解一点,我们把 Redis 称为 KV 数据库,键值对数据库,那就 可以把 Redis 内部的存储视为存在着一个巨大的 Map,对 Map 的操作无非就是 get 和 put,然后通过 key 操作这个 key 所对应的 value,而这个 value 的类型可 以多种多样,也就是 Redis 为我们提供的那些数据结构,比如字符串(String)、 哈希(Hash)等等。
Redis 会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如 此,Redis 还可以将内存的数据利用快照和日志的形式保存到硬盘上,这样在发 生类似断电或者机器故障的时候,内存中的数据不会“丢失”。除了上述功能以 外,Redis 还提供了键过期、发布订阅、事务、流水线、Lua 脚本等附加功能。
Redis 应用场景
1.缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数 据的访问速度,而且能够有效地降低后端数据源的压力。Redis 提供了键值过期 时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么 说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
2.排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布 时间的排行榜,按照各种复杂维度计算出的排行榜,Redis 提供了列表和有序集 合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
3.计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览 数,为了保证数据的实时性,每一次播放和浏览都要做加 1 的操作,如果并发量 很大对于传统关系型数据的性能是一种挑战。Redis 天然支持计数功能而且计数 的性能也非常好,可以说是计数器系统的重要选择。
4.社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能, 由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型 的数据,Redis 提供的数据结构可以相对比较容易地实现这些功能。
5.消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、 非实时业务削峰等特性。Redis 提供了发布订阅功能和阻塞队列的功能,虽然和 专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。
Redis 特性
1.速度快
正常情况下,Redis 执行命令的速度非常快,官方给出的数字是读写性能可以 达到 10 万/秒,当然这也取决于机器的性能,但这里先不讨论机器性能上的差异, 只分析一下是什么造就了 Redis 除此之快的速度,可以大致归纳为以下几点:
Redis 的所有数据都是存放在内存中的,按照谷歌公司 2009 年给出的各层级 硬件执行速度,所以把数据放在内存中是 Redis 速度快的最主要原因。

Redis 是用 C 语言实现的,一般来说 C 语言实现的程序“距离”操作系统更 近,执行速度相对会更快。
Redis 使用了单线程架构,预防了多线程可能产生的竞争问题。
2.基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如 Java 里的 map,类似于 这种组织数据的方式叫作基于键值的方式,与很多键值对数据库不同的是,Redis 中的值不仅可以是字符串,而且还可以是具体的数据结构,这样不仅能便于在许 多应用场景的开发,同时也能够提高开发效率。Redis 的全称是 REmote Dictionary Server,它主要提供了 5 种数据结构:字符串、哈希、列表、集合、有序集合,同 时在字符串的基础之上演变出了位图(Bitmaps)和 HyperLogLog 两种“数据结构”, 并且随着 LBS (Location BasedService,基于位置服务)的不断发展,Redis 中加入有 关 GEO(地理信息定位)的功能。
3.丰富的功能
除了 5 种数据结构,Redis 还提供了许多额外的功能:提供了键过期功能,可以用来实现缓存。提供了发布订阅功能,可以用来实现消息系统。支持 Lua 脚本功能,可以利用 Lua 创造出新的 Redis 命令。提供了简单的事务功能,能在一定程度上保证事务特 性。提供了流水线( Pipeline)功能,这样客户端能将一批命令一次性传到 Redis, 减少了网络的开销。
4.简单稳定
Redis 的简单主要表现在三个方面。首先,Redis 的源码很少,早期版本的 代码只有 2 万行左右,3.0 版本以后由于添加了集群特性,代码增至 5 万行左右。 其次,Redis 使用单线程模型,这样不仅使得 Redis 服务端处理模型变得简单,而 且也使得客户端开发变得简单。最后,Redis 不需要依赖于操作系统中的类库。
Redis 虽然很简单,但是不代表它不稳定。实际的运行中很少出现因为 Redis 自身 bug 而宕掉的情况。
5.客户端语言多
Redis 提供了简单的 TCP 通信协议,很多编程语言可以很方便地接人到 Redis。
6.持久化
通常看,将数据放在内存中是不安全的,一旦发生断电或者机器故障,重要的 数据可能就会丢失,因此Redis提供了两种持久化方式:RDB 和 AOF,即可以用两种 策略将内存的数据保存到硬盘中,这样就保证了数据的可持久性。
7.主从复制
Redis 提供了复制功能,实现了多个相同数据的 Redis 副本,复制功能是分布式Re

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



