Redis简介

一、Redis是什么?

  Redis(Remote Dictionary Server:远程字典服务)是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。

  传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式,而分布式一般遵循 CAP 定理。

二、Redis优缺点?

【优点1—性能出色】:

  Redis本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。

  因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过10万次读写操作,是已知性能最快的Key-Value DB。

【优点2—支持多种数据结构】:

  Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能。

【缺点1–容量受限】:

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

【缺点2–只能使用单线程】:

  Redis只能使用单线程。

三、Redis应用场景

做热点数据的缓存(Redis提供持久化),适合经常用来被查,不经常修改或删除的数据。网站访问数据的特点大多数呈现在"二八定律":80%的业务访问集中在20%的数据上。这时为了减轻数据的压力和提高网站的数据访问速度,则可以使用缓存机制来优化网站。如一个小说网站,每天有100W人访问某部小说中的某篇文章,这篇文章若是从数据库那拿,每天都要消耗100W次数据库请求,这样很消耗数据库资源,若把这篇文章放入redis,数据库资源消耗小,性能高。

计数器,统计网站点击数,因为单线程,可以避免并发,而且性能高。

排行榜,统计比赛排名,或者活跃度排名。

消息中间件,和ActivitiMQ,RocketMQ类似,做消息队列,但不推荐。但是可以用来作为用户列表,比如好友列表,求集合的交集、并集、差集。

重复请求的记录或秒杀系统,可以用来限制一段时间内数据的重复提交,如你要做限购商品的功能,规定一个IP当天只能买10次,一个用户名当天只能买5次,把买的次数数据记录下来,然后设置有效时间,超过次数的不准买。也可用在秒杀系统,记录商品库存,卖掉一次就在Redis减库存,因为Redis的操作是原子性的。

发布订阅功能,关注的某个公众号或者版主发布了新的文章,直接推送到每一个订阅用户。

四、Redis安装和使用

1、更新源并安装redis
sudo apt-get update
sudo apt-get install redis-server

2、查看版本
redis-server -v 

3、修改配置文件,注释掉bind 127.0.0.1
/etc/redis/redis.conf 

4、重启redis-server
sudo service redis-server restart

5、查看 redis 是否启动,输入ping(测试Redis的连通性),回复pong
redis-cli

五、Redis为什么这么快?

  Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到每秒10万+查询次数。主要设计如下:

完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。

采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作。

使用多路I/O复用模型,非阻塞IO。

1、为什么采用单线程

  我们对多线程的第一印象就是多线程要快些,是哪方面快 ?很多人都能想到是计算能力,没错,我们对cpu的利用率提高了。那么我们设想下独立模式下单台redis的性能瓶颈是什么了?

  我们知道Redis是基于内存的操作,CPU不是Redis的瓶颈,其实Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了。(毕竟采用多线程会有很多麻烦!)。

2、Redis的I/O多路复用

  传统的Blocking IO操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以 I/O 操作在一般情况下往往不能直接返回,这会导致某一文件的 I/O 阻塞导致整个进程无法对其它客户提供服务。

  而 I/O 多路复用就是为了解决这个问题而出现的。这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗)。

  I/O多路复用实际上就是用select, poll, epoll技术等监听多个IO对象,当IO对象有变化(有数据)的时候就通知用户进程。好处就是单个进程可以处理多个socket。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值