redis简介及应用场景
简介
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
其中,值(value)可以是字符串(String), 哈希(Map), 列表(list), 集合(sets) 和有序集合(sorted sets)等类型。
Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到磁盘来保证持久化。
redis和mongodb对比
-
简介
mongoDb解决了mysql大数据量下效率下降的问题,但是在复杂查询及事务处理这块也相对弱了很多。redis相对MongoDb而言,提供了更好的内存级存取数据及主从读写分离,效率更高。
MongoDB更类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。Mysql在大数据量时效率显著下降,MongoDB更多时候作为关系数据库的一种替代。 -
内存管理机制
Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。
MongoDB数据存在内存,由Linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。 -
支持的数据结构
Redis支持的数据结构丰富,包括hash、set、list等。
MongoDB数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。 -
性能
redis性能优于mogodb,但二者性能都比较高,应该说都不会是瓶颈。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,同步使用的是发布/订阅机制。业务软件往主服务器写数据,通过从服务器读数据,读写分离,相比mongoDb性能也更高。
mongoDb则 -
可靠性
二者均支持持久化。 -
集群
MongoDB集群技术比较成熟,Redis从3.0开始支持集群。MongoDB建议集群部署,更多的考虑到集群方案,Redis更偏重于进程顺序写入,虽然支持集群,也仅限于主-从模式。 -
不适用场景
Ø 需要使用复杂sql的操作
Ø 事务性系统 -
使用便捷性
redis是主要把数据存储在内存中(当然可以把其存储至硬盘上,这也是写shell的必要条件之一),其“缓存”的性质远大于其“数据存储”的性质,其中数据的正删改查也只是像变量操作一样简单。而mongodb却是一个“存储数据”的系统,增删改查数据的时候有“与或非”条件,查询数据的方式也能像SQL数据库一样灵活,这是redis所不具备的。
如何设计redis+mysql
-
核心原理:
保持数据库与redis的数据一致性。类似如下图:
- 具体请查看:
Redis和MySQL的结合方案
建立一套MySQL及Redis搭建统一的KV存储服务
蚂蜂窝一个朋友,他们公司是直接把sql这块封装了orm,在使用其orm进行写操作时候,同时把数据写到数据库及redis中,进行读操作时,则从redis中直接读取。
应用场景
缓存
消息队列
Redis作者谈Redis应用场景
Redis 的 5 个常见使用场景
徐汉彬:Web系统大规模并发——电商秒杀与抢购
【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合 PHP解决抢购、秒杀
【高并发简单解决方案】redis队列缓存 + mysql 批量入库 + php离线整合
利用redis + lua解决抢红包高并发的问题
秒杀系统架构优化思路