Redis是什么?


Redis (REmote DIctionary Server)是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列,是一个高性能的key-value数据库.
Redis与其他key-value缓存产品有以下三个特点:

  • Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用.
  • Redis不仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储.
  • Redis支持数据的备份,即master-slave模式的数据备份.

为什么要用Redis

  • 性能极高 – Redis读的速度是110000次/s,写的速度是81000次/s .
  • 丰富的数据类型 – Redis支持Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作.
  • 原子 – Redis的所有操作都是原子性的,即要么成功执行要么失败完全不执行.单个操作是原子性的.多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来.
  • 丰富的特性 – Redis还支持publish/subscribe, key过期等特性.

总结:

  1. Redis(Remote Dictionary Server远程字典服务器),是一款高性能的分布式数据库,基于内存运行并支持持久化NoSQL数据库.

  2. 它可以储存键(key)与stringhashlistset和sorted set五种不同类型的值(value)之间的映射.

  3. 使用redis可能出现缓存雪崩缓存击穿缓存穿透和数据库和缓存的双写一致性问题等问题.

[1] 什么是远程字典服务器?

远程:有远程的就有本地的.本地的意思就是你自己的电脑,远程就是指别人的电脑.
字典:就像普通的字典一样,数据字典就是用来对数据进行定义和解释的.它可以用作:数据库、缓存和消息中间件.
服务器:服务器就是远程电脑,服务器可以在网络中为其它客户机提供计算或者应用服务.

[2] 为什么redis是高性能的?

1)基于内存实现,完全内存计算;
2)单线程操作,避免了线程上下文切换操作;
3)多路I/O复用的线程模型,实现了一个线程监控多个IO流,及时响应请求;
4)Redis对外部的依赖比较少,属于轻量级内存数据库.

内存: 内存的访问速度是很快的,常用的DDR4内存的读写速度是机械硬盘的30倍;

单线程:避免了线程上下文切换和竞争条件.也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗

什么是线程上下文切换?
即使是单核CPU也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制.时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程时同时执行的,时间片一般是几十毫秒(ms).CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务.但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再次加载这个任务的状态,从任务保存到再加载的过程就是一次上下文切换.
这就像我们同时读两本书,当我们在读一本英文的技术书籍时,发现某个单词不认识, 于是便打开中英文词典,但是在放下英文书籍之前,大脑必须先记住这本书读到了多少页的第多少行,等查完单词之后,能够继续读这本书.这样的切换是会影响读书效率的,同样上下文切换也会影响多线程的执行速度.
I/O多路复用技术是什么,为什么很快?
常见的IO模型有阻塞模型、非阻塞模型、IO多路复用,信号驱动IO,异步.

  1. 阻塞式IO: 使用系统调用,并一直阻塞直到内核将数据准备好,之后再由内核缓冲区复制到用户态,在等待内核准备的这段时间什么也干不了.
  2. 非阻塞式IO:内核在没有准备好数据的时候会返回错误码,而调用程序不会休眠,而是不断轮询询问内核数据是否准备好
  3. IO多路复用:类似非阻塞,只不过轮询不是由用户线程去执行,而是由内核去轮询,内核监听程序监听到数据准备好后,调用内核函数复制数据到用户空间
  4. 信号驱动IO: 应用进程使用 sigaction 系统调用,内核立即返回,应用进程可以继续执行,也就是说等待数据阶段应用进程是非阻塞的.
  5. 异步IO:应用进程执行 aio_read 系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号.

不好理解?举例说明:

  1. 阻塞:比如某个时候你在去餐厅吃饭,又想出去逛街.但是你不知道饭菜什么时候来,只好坐在餐厅里面等.直到做好,然后吃完才离开去做逛街.这就是典型的阻塞.
  2. 非阻塞忙轮询:接着上面的例子,如果用忙轮询的方法,出去我们逛一会,然后每分钟回来问一下服务员:“饭菜好了没?”
  3. IO多路复用:餐厅安装了电子屏幕用来显示点餐的状态,逛街一会,回来就不用去询问服务员了,直接看电子屏幕就可以了.
  4. 异步IO:不想逛街,餐厅太吵了,回家好好休息一下.于是我们叫外卖,打个电话点餐,然后我可以在家好好休息一下,饭好了送货员送到家里来.这就是典型的异步,只需要打个电话说一下,然后可以做自己的事情,饭好了就送来了.
  5. 异步 I/O 与信号驱动 I/O 的区别在于,异步 I/O 的信号是通知应用进程 I/O 完成,而信号驱动 I/O 的信号是通知应用进程可以开始 I/O.

阻塞是个什么概念呢?
比如某个时候你在去餐厅吃饭,又想出去逛街.但是你不知道饭菜什么时候来,只好坐在餐厅里面等.直到做好,然后吃完才离开去做逛街.这就是典型的阻塞.

[3] 分布式的含义?

把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果

[4] NoSQL的含义?

NoSQL泛指非关系型的数据库.与之对应的是关系数据库SQL.关系数据库的查询经常会关联两个表的数据,而NoSQL不关联表.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值