两句话能够作下归纳:
1. 是一个彻底开源免费的key-value内存数据库
2. 一般被认为是一个数据结构服务器,主要是由于其有着丰富的数据结构 strings、map、 list、sets、 sorted sets前端
一样从两个方面来作下对比:
1. 不是sql server、mySQL等关系型数据库,主要缘由是:
. redis目前还只能做为小数据量存储(所有数据可以加载在内存中) ,海量数据存储方面并非redis所擅长的领域
. 设计、实现方法很不同.关系型数据库经过表来存储数据,经过SQL来查询数据。而Redis通上述五种数据结构来存储数据,经过命令 来查询数据
2. 不是Memcached等缓存系统,主要缘由有如下几个:
.网络IO模型方面:Memcached是多线程,分为监听线程、worker线程,引入锁,带来了性能损耗。Redis使用单线程的IO复用模型,将速度优点发挥到最大,也提供了较简单的计算功能
mysql
.内存管理方面:Memcached使用预分配的内存池的方式,带来必定程度的空间浪费 而且在内存仍然有很大空间时,新的数据也可能会被剔除,而Redis使用现场申请内存的方式来存储数据,不会剔除任何非临时数据 Redis更适合做为存储而不是cache
.数据的一致性方面:Memcached提供了cas命令来保证.而Redis提供了事务的功能,能够保证一串 命令的原子性,中间不会被任何操做打断
. 存储方式方面:Memcached只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能web
一句话小结一下: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这种技术把负载分布到多个特理节点上去的横向扩展方式用处愈来愈多。sql
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,由于写内存基本上没有问题安全
对比是否可取代,要找出重要三点:
一、Redis数据持久化仍是有问题。
二、不支持事务严格ACID
三、不支持复杂条件查询。服务器
生产环境中,redis多用来作缓存或者队列,数据的存储仍是要放到mysql之类的关系型数据库中。网络
前端读取数据redis 后台操做用mysql 后台mysql同步到redis 前端redis数据队列到mysql