redis是什么?

1 redis是什么?web

 

 

 

一般而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等 等,分类的标准也不以,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特色的同时,又吸取了部分关系数据库的优势。从而使它的位置处于关系数据库和键值数 据库之间。Redis不只能保存Strings类型的数据,还能保存Lists类型(有序)和Sets类型(无序)的数据,并且还能完成排序(SORT) 等高级功能,在实现INCR,SETNX等功能的时候,保证了其操做的原子性,除此之外,还支持主从复制等功能。redis

 

2 Redis用来作什么? sql

 

一般局限点来讲,Redis也以消息队列的形式存在,做为内嵌的List存在,知足实时的高并发需求。而一般在一个电商类型的数据处理过程之中,有关商品,热销,推荐排序的队列,一般存放在Redis之中,期间也包扩Storm对于Redis列表的读取和更新。数据库

 

3 Redis的优势缓存

性能极高 – Redis能支持超过 100K+ 每秒的读写频率。安全

丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操做。服务器

原子 – Redis的全部操做都是原子性的,同时Redis还支持对几个操做全并后的原子性执行。网络

丰富的特性 – Redis还支持 publish/subscribe, 通知, key 过时等等特性。数据结构

 

4 Redis的缺点多线程

是数据库容量受到物理内存的限制,不能用做海量数据的高性能读写,所以Redis适合的场景主要局限在较小数据量的高性能操做和运算上。

 

 总结: Redis受限于特定的场景,专一于特定的领域之下,速度至关之快,目前还未找到能替代使用产品。

 

 

 

在使用缓存的时候,redis比memcached具备更多的优点,而且支持更多的数据类型。

 

Redis是什么?两句话能够作下归纳: 

1. 是一个彻底开源免费的key-value内存数据库 

2. 一般被认为是一个数据结构服务器,主要是由于其有着丰富的数据结构 strings、map、 list、sets、 sorted sets

 

Redis不是什么?一样从两个方面来作下对比: 

1. 不是sql server、mySQL等关系型数据库,主要缘由是: 

     . redis目前还只能做为小数据量存储(所有数据可以加载在内存中) ,海量数据存储方面并非redis所擅长的领域 

     . 设计、实现方法很不同.关系型数据库经过表来存储数据,经过SQL来查询数据。而Redis通上述五种数据结构来存储数据,经过命令 来查询数据 

2.   不是Memcached等缓存系统,主要缘由有如下几个: 

     .网络IO模型方面:Memcached是多线程,分为监听线程、worker线程,引入锁,带来了性能损耗。Redis使用单线程的IO复用模型,将速度优点发挥到最大,也提供了较简单的计算功能 

     .内存管理方面:Memcached使用预分配的内存池的方式,带来必定程度的空间浪费 而且在内存仍然有很大空间时,新的数据也可能会被剔除,而Redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据 Redis更适合做为存储而不是cache 

     .数据的一致性方面:Memcached提供了cas命令来保证.而Redis提供了事务的功能,能够保证一串 命令的原子性,中间不会被任何操做打断 

     . 存储方式方面:Memcached只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能

 

   一句话小结一下:Redis是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合能够对关系数据库起到很好的补充做用。

 

Redis有什么用?只有了解了它有哪些特性,咱们在用的时候才能扬长避短,为咱们所用: 

1. 速度快:使用标准C写,全部数据都在内存中完成,读写速度分别达到10万/20万 

2. 持久化:对数据的更新采用Copy-on-write技术,能够异步地保存到磁盘上,主要有两种策略,一是根据时间,更新次数的快照(save 300 10 )二是基于语句追加方式(Append-only file,aof) 

3. 自动操做:对不一样数据类型的操做都是自动的,很安全 

4. 快速的主--从复制,官方提供了一个数据,Slave在21秒即完成了对Amazon网站10G key set的复制。 

5. Sharding技术: 很容易将数据分布到多个Redis实例中,数据库的扩展是个永恒的话题,在关系型数据库中,主要是以添加硬件、以分区为主要技术形式的纵向扩展解决了不少的应用场景,但随着web2.0、移动互联网、云计算等应用的兴起,这种扩展模式已经不太适合了,因此近年来,像采用主从配置、数据库复制形式的,Sharding这种技术把负载分布到多个特理节点上去的横向扩展方式用处愈来愈多。

 

 

 

这里对Redis数据库作下小结: 

1. 提升了DB的可扩展性,只须要将新加的数据放到新加的服务器上就能够了 

2. 提升了DB的可用性,只影响到须要访问的shard服务器上的数据的用户 

3. 提升了DB的可维护性,对系统的升级和配置能够按shard一个个来搞,对服务产生的影响较小 

4. 小的数据库存的查询压力小,查询更快,性能更好

 

   写到这里,可能就会有人急不可待地想用它了,那怎么用呢?能够直接到官方文档,里面帮咱们整理好了各个语言环境下的客户端,主要有Ruby、Python、 PHP、Perl、Lua、Java、C#....有几种语言,我也没见过,因此就很少说了,你懂的....

 

 

 

 

 

最后,把我使用过程当中的一些 经验与教训,作个小结: 

1. 要进行Master-slave配置,出现服务故障时能够支持切换。 

2. 在master侧禁用数据持久化,只需在slave上配置数据持久化。 

3. 物理内存+虚拟内存不足,这个时候dump一直死着,时间久了机器挂掉。这个状况就是灾难! 

4. 当Redis物理内存使用超过内存总容量的3/5时就会开始比较危险了,就开始作swap,内存碎片大 

5. 当达到最大内存时,会清空带有过时时间的key,即便key未到过时时间. 

6. redis与DB同步写的问题,先写DB,后写redis,由于写内存基本上没有问题

相关文章
相关标签/搜索