什么是Redis?一篇文章让你一次了解个够

Redis简介

一 为什么会出现Redis?

不用说,如果你明白了这个问题,那么你就可以很轻松的知道Redis的一些特点和解决的问题。

  1. 在出现数据库之前,我们通过IO把数据放在文件中。在寻找该文件时,需要磁盘寻址(毫秒级 ms)(比内存寻址慢很多 纳秒级 ns),而且吞吐量也是有限的。
  2. 随着文件变大,检索文件中的数据会变慢,因为需要 全量读入内存。
  • 这时为了提升速度出现了数据库,底层采用分治的思想将数据分成若干个4kb(大小数据库中可调,4kb更接近文件系统底层)的data page,不用整个文件全量读入。还是存在浪费,有时为了存小于4kb的文件,会用4kb的大小存放;读时需将4kb全部读入。
    但全表扫描时,速度还是很慢,因为需要一个一个数据块的扫描。
  • 数据库建立了索引,它也是数据,索引中的数据只是全量中的1/n, 用于存储数据的唯一标识和全量数据存在的位置。检索时会索引全量扫描。索引也在磁盘中,为了提速利用数据结构将索引的树干放在在内存中,内存的树干可以理解为多级索引。
  1. 当今数据库中的表可能会很大很大,由于磁盘寻址和吞吐量的瓶颈,高并发查询不同的4kb的时会变得很慢。
    在避免磁盘的瓶颈的时候,可以将数据全量放在内存中。如,HANA数据库。但是硬件要求很高,产品很贵,现阶段无法推广。(ps:将数据放全部放入内存,会比放在磁盘节省空间,因为放磁盘时会有许多“副本”)该数据库类似享元模式
  2. 这时就有一种折中的方出现了,将热数据(频繁访问)放入内存中,而不是全量数据, 是全量的1/n,如,Redis、Memcached技术。

二 什么是Redis?

Redis是完全开源免费的,遵循BSD协议,是一款高性能(NoSQL)的key-value数据库,Redis是一个来源的使用ANSI C语言编写的、支持网络的、可基于内存也可基于持久化的日志型的、key-value数据库,并提供多种语言的API。

官方的bench-mark数据:

测试完成了50个并发执行100000个请求。设置和获取的值是一个256字节字符串。Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。文本执行使用loopback接口(127.0.0.1)。
结果:每秒约110000读,每秒约81000写。

ps:

  1. BSD(Berkeley Software Distribution):
是一种开源协议。可以自由使用、修改源代码、还可以将修改过的代码开源发行。如,linux就遵循该协议。
  1. NoSQl(Not-only SQL)
泛指非关系型数据库,它可以作为关系型数据库的 补充 。如,MongoDB等。当然还有Redis。

三 Redis是一种NoSQL ,那么就先来了解一下NoSQL吧!

1. 先了解关系型数据库存在的问题。

  1. High performance,对数据库高并发读写的需求,如,统计实时统计在线用户的状态、记录热门帖子的点击次数、投票计数等。

  2. Huge storage,对海量数据的高效存储和访问需求,如,QQ号的查询登录。

  3. High scalability && High Availability,对数据的高扩展性和高可用性需求。

    NoSQl的产生就是为了解决这些问题。

2. NoSQL的类别

类别名称简介优点缺点产品举例典型应用
键值(key-value)数据库主要用到一个哈希表简单、易部署,快速查询存储的数据缺少结构化,即能存的字段少Redis内容缓存,主要用于处理大量数据的高访问负载
列存储数据库key指向列,以列族式存储,将同一列数据放在一起查询速度快,可扩展性强更容易进行分布式扩展功能相对局限HBase分布式的文件系统
文档型数据库一系列键值对,可以看作是键值数据库的升级数据要求不严格查询性能不高,缺乏统一的查询语句MongolianDBweb应用(与key-value类似,value是结构化的,如,JSON)
图形(Graph)数据库图结构实现利用图结构的相关算法难以得出结果,需要对整个图计算,不容易做分布式的集群方案Neo4J社交网络

3. NoSQL应用场景总结:

1. 数据模型比较简单;
2. 需求灵活性更强的IT系统;
3. 对数据库性能要求较高;
4. 不需要高度的数据一致性;
5. 对于给定key,比较容易映射的复杂的环境;

一句话就是为了解决,高并发

四 Redis详解

1. Redis特点

  • 性能极高,读 110000次/s,写 81000次/s;
  • 丰富的数据类型,支持的类型 String,Hash,List,Set及Ordered Set数据类型操作。
  • 原子性,Redis操作都是原子性,及一个操作只会有完成和完全不执行两种情况。多操作支持 事务,及原子性,通过MULTI和EXEC指令包起来。
  • 丰富的特性,支持publish/subscrbe,通知,key过期等特性。
  • 高速读写,Redis使用自己实现的分离器,代码量很短,没有lock,因此效率非常高。

2. Resdis缺点

  • 持久化,Redis直接将数据存储到内存中,要将书保存到磁盘,有两种方式。一种,定时快照(snapshot):每隔义端时间将整个数据库写到磁盘上,每次写全部数据,代价非常高。另一种,基于语句追加(aof):只追踪变化的数据,追加的log可能过大,同时所有的操作均重新执行一遍,回复速度慢
  • 耗内存,占用内存过高。

3. Redis的应用场景

企业开发中:可以用作数据库缓存热点数据(经常查询,但是不会被经常查询或删除的数据)和消息中间件等大部分功能。

常用场景

  1. 缓存,在大型网站中提高网站访问速度,大大降低数据库的压力。Redis提供了key过期功能,也提供了灵活的淘汰机制。
  2. 排行榜,Redis提供的有序集合数据了构,能够实现各种复杂的排行榜。
  3. 计数器,如,电商网站的浏览量,视频网站的播放量等,为了保证数据的时效性,每次浏览+1,高并发时数据库压力很大。如果用Redis提供的incr命令实现计数器功能,内存操作,性能非常好。
  4. 分布式会话,集群模式下,在应用不多时,一般使用容器自带的session复制功能就能满足;在应用增多相对复杂的系统中,一般都会搭建以Redis为内存数据库为中心的session,不在有容器管理,而是由session服务和内存数据库管理。
  5. 分布式锁,分布式技术下对统一资源的并发访问,如全局id,减库存,秒杀场景,并发量不大的情况下,可以使用数据库的悲观锁、乐观锁来实现,并发量大会大大影响数据库的性能;可以利用Redis的setnx功能来编写分布式锁,设置返回1,获取锁成功,否则失败。
  6. 社交网络,点赞、踩、关注/被关注、共同好友等功能,传统数据库不合适存储这种数据,Redis的哈希、集合等很方便存储。
  7. 最新列表,Redis列表结构,LPUSH可以在列表头部插入一个内容ID作为关键字。LTRIM可用来限制列表的数量,这样列表永远为N个ID,无需查询最新的列表,直接根据ID去对饮的内容也即可。
  8. 消息系统,消息队列是大型网站比用的中间件,如,AciveMQ,RabbitMQ、kafka等,主要用于业务解耦、流量削峰及异步处理实时性低的业务。Redis提供发布、订阅及阻塞队列功能,能实现简单的消息队列系统。

感谢阅读!在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值