了解redis
redis 介绍
Redis是一个开放源代码(BSD许可)的内存中数据结构存储,用作数据库,缓存和消息代理。 它支持数据结构,例如string(字符串),hash(哈希),list(列表),set(集合),zset(有序集合),Bitmaps(位图),HyperLogLog(超日志),GEO(带有半径查询和流的地理空间索引)等多种数据结构组成,因此Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人。 Redis具有内置的复制,Lua脚本,LRU逐出,事务和不同级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
redis特性
一、速度快
正常情况下,Redis执行命令的速度非常快,官方给出的数字是读写性 能可以达到10万/秒,当然这也取决于机器的性能,但这里先不讨论机器性 能上的差异,只分析一下是什么造就了Redis除此之快的速度,可以大致归 纳为以下三点:
1、Redis的所有数据都是存放在内存中的,因此读写速度非常快。
2、Redis采用单线程,避免了不必要的上下文切换和竞争,预防了多线程可能产生的竞争问题
3、Redis采用C语言编写,一般来说用C语言实现的程序"距离"操作系统更近,执行速度都非常快
二、基于键值对的数据结构服务器
几乎所有的编程语言都提供了类似字典的功能,例如Java里的map、 Python里的dict,类似于这种组织数据的方式叫作基于键值的方式,与很多 键值对数据库不同的是,Redis中的值不仅可以是字符串,而且还可以是具 体的数据结构,这样不仅能便于在许多应用场景的开发,同时也能够提高开 发效率。Redis的全称是REmote Dictionary Server,它主要提供了5种数据结 构:字符串、哈希、列表、集合、有序集合,同时在字符串的基础之上演变 出了位图(Bitmaps)和HyperLogLog两种神奇的“数据结构”,并且随着 LBS(Location Based Service,基于位置服务)的不断发展,Redis3.2版本中 加入有关GEO(地理信息定位)的功能,总之在这些数据结构的帮助下,开 发者可以开发出各种“有意思”的应用。
丰富的功能
1、除了5种数据结构,Redis还提供 许多额外的功能
2、提供了简单的事务,在一定程度上保证事务的特性。
3、提供了发布订阅功能,可以用来实现消息系统。
4、提供了Lua脚本功能,可利用Lua创造出新的Redis命令。
5、提供了键过期的功能,来实现缓存。
6、提供了LRU缓存淘汰机制。
7、提供了主从复制故障转移。
三、简单稳定
简单主要体现在三个方面
1、Redis源码少,早期版本只有2万行左右,3.0版本以后添加了集群特性,代码增至5万行。
2、Redis使用单线层模型,这样不仅使用Redis服务端处理模型变得简单,而且也使得客户端开发变得简单
3、Redis不需要依赖操作系统的类库
稳定
redis虽然简单但不代表它不稳定,目前笔者维护的过几十个redis实例,并没有因为Redis自身的bug而宕掉的情况
四、客户端语言多
Redis提供了简单的TCP通信协议,很多编程语言可以很方便地接入到 Redis,并且由于Redis受到社区和各大公司的广泛认可,所以支持Redis的客 户端语言也非常多,几乎涵盖了主流的编程语言,例如Java、PHP、 Python、C、C++、Nodejs等
五、持久化
一般来说,将数据放在内存是不安全,一旦发生机器故障或者断电,重要的数据可能机会丢失,因此Redis提供了两种持久化的缓存机制:RDB和AOF,即可以使用这两种策略将将内存的数据保存到硬盘中
六、主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本,复制功能是分布式Redis的基础。
高可用和分布式
Redis从2.8版本正式提供了高可用实现Redis Sentinel,它能够保证Redis 节点的故障发现和故障自动转移。Redis从3.0版本正式提供了分布式实现 Redis Cluster,它是Redis真正的分布式实现,提供了高可用、读写和容量的 扩展性。
Redis使用场景
一、缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加 快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了 键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策 略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
二、排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照 发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表 和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行 榜系统。
三、计数应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有 浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如 果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数 功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
四、社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存 这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功 能。
五、消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务 解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功 能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功 能基本可以满足。