这两天和哥们聊天,他说最近在面试中频频被问到关于redis的相关问题,不可否认,目前非关系型数据库的使用很普遍,尤其是redis更是被很多互联网公司所钟爱,面试中也成为了肯定会被问到的一个点。刚好今天有抽出点时间,就对我所认识的redis的简单的知识点做一些小小的总结。
我们在了解一个新鲜事物(新的技能)的时候一般都是从下边这几个问题开始的:
1、它是什么?
2、它有什么用?
3、我为什么要用它(它的优点是什么)?
那么我们今天就围绕着这三个开始今天的总结吧。
redis是什么呢?在解决这个问题之前,我们首先应该先熟悉一个新的单词NoSQL
1.1NoSQL
NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充。随着互联网web2.0网站的兴起,非关系型的数据库现在成了了一个极其热门的新领域,非关系数据库产品的发展非常迅速
1.2NoSQL的类别
此处做简单列举,不具体说明(个人觉得这些东西了解就行)
- 键值(Key-Value)存储数据库:代表redis
- 列存储数据库
- 文档型数据库
- 图形(Graph)数据库
1.3redis是什么呢?
Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如下:
- 字符串类型
- 散列类型
- 列表类型
- 集合类型
- 有序集合类型
简单点说redis就是一个非关系型数据库(高性能键值对数据库)。
了解了redis是什么,我们再简单说说redis有什么用。
2.redis的应用场景
- 取最新的N个数据(取最新文档、排行榜等)
- 比较常见的情景就是游戏中的排行榜,这个一般设置为从redis中获取的
- 需要精确设定过期时间的应用
- 一般商城类项目中的秒杀
- 购物车中物品过期自动取消
- 计数器应用
- Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。比如:微博中的点赞数、查看数等。
- 实时性要求高并发读写
- 某些网站首页的信息,首页上的信息可能同意时间被很多人查看,属于高并发数据,从redis中读取。
- 消息系统Pub/Sub
- 构建队列列
- Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用
- 缓存
- 最常用的一种使用Redis的情景是会话缓存(session cache)。用Redis缓存会话比其他存储(如Memcached)的优势在于:Redis提供持久化。
大家觉得不满意的话,可参考:http://blog.jobbole.com/88383/
我们再来聊聊redis有哪些优缺点,这些决定了我们为什么选择使用它。
3.redis的优缺点
3.1Redis 优势
对数据高并发读写(基于内存)
对海海量量数据的高效率存储和访问(基于内存) 对数据的可扩展性和高可用性
垂直扩展:提升硬件
⽔水平扩展:集群
3.2Redis 缺点
redis(ACID处理理⾮非常简单)无法做到太复杂的关系数据库模型
补充一个小知识点:
4、Redis面向互联网的解决方案
-主从:一主多从,主机可写,从机备份。类似于Mysql的读写分离,存在问题是一但主节点down掉, 整个Redis不不可用。
-哨兵(2.x):启用一个哨兵程序(节点),监控其余节点的状态,根据选举策略略,进行行主从切换。缺点:每个节点的数据依旧是一致的,仍无法实现分布式的数据库。
-集群(3.x):结合上述两种模式,多主多从,实现高可用、分布式数据存储
关于redis的安装及具体命令、使用等有机会的话我再个大家做些分享!有问题欢迎留言,也希望大家能支出我的问题,进步是相互的!谢谢