一.核心能力
Redis
1.In-memory data structures 内存数据结构
Redis以"键值对" 的方式来存储数据, 是一种"非关系型数据库"
ps: MySQL以"表"的方式来存储数据, 是一种"关系型数据库"
2.Programmability 可编程性
Redis可以用脚本(Lua)来执行一些操作 (也可以直接执行一些简单交互式命令)
3.Extensibility 可扩展性
通过 C, C++, Rust这几个语言来编写Redis扩展
很好理解~就是虽然有很好用的功能,但是还是不合心意~那就自己搞出一个更匹配的咯
4.Persistence 持久性
Redis存在内存上~但是呢,数据很容易丢吖~比如突然程序关闭什么的
所以,Redis在硬盘上也存了一份数据, 内存为主,硬盘为辅~~ 若果真没了,就拿硬盘的数据顶上
5.Clustering 集群
水平可扩展性~
我们说了~Redis存内存上,但是内存空间小啊~引入了分布式,多台主机~~所以在多个主机部署多个Redis节点,每个节点存一部分数据(yep,是很像我们之前说的分库分表~)
6.High availability 高可用性
或者说备份~~就是,结合一下4,丢了内存主数据,就让硬盘从数据直接顶上 -> 系统可用性提升
二.应用场景
这个也可以说是,展开说说Redis用来干嘛的~~比如,我们上篇文章谈到的,用为数据库,缓存,消息队列
1.Real-time data store 实时数据存储
就是相当于一个低延迟和高吞吐量的数据库咯~~比如搜索这方面~响应要很快(结合核心功能想)~就可以用Redis
敲黑板~~这里的Redis要存所有数据,不可以随便丢失数据
2.Caching & session storage 缓存和会话存储
会话缓存-> 我们之前谈这个就要说说 cookie,session~ 有了他们才能确认身份,不重复进行一些验证操作
但是,现在搞成了分布式,多台应用是服务器~谁知道负载因子把用户请求分配到哪台上?这就说明 , 每一次都要验证->天啊,我已经烦躁了,但是我却没遇到这种情况 所以,必然有了解决方案的!
i)让负载因子把同一个用户请求,打在同一个机器上(不能利用之前说的"轮询"了, 要用useId 比如~五台应用服务器,那就%5 根据余数看,扔哪台)
ii)用Redis, 将这些会话数据放在一台独立机器上存储~~ 这样应用服务器就可以再去这上面找咯~
缓存->辅助MySQL, 因为它慢 so我们利用二八原则(就是数据很多,但高频需要之占十分之二), 将那十分之二存Redis上~
敲黑板~~这里的Redis只是一个辅助加速,丢了也无所谓,因为MySQL里面存了所有数据
3.Streaming & messaging 流媒体和消息传递
就是它的初心啦~消息队列(可惜,它火不是因为这个~~, 毕竟优秀的消息队列很多~比如RabbitMQ, Kafka....)
消息队列 =>实现: 生产者消费者模型 => 好处: 解耦合, 削峰填谷(不易因为抗压不行而崩溃~~这个我介绍过的~)
三.Redis为什么快
okkk~~说完这几个 其实还有一个问题 就是 Redis快! 那具体我们只知道是因为在内存,so 还有没有别的原因?
1.核心功能都是简单逻辑 (就是存个数据)(不像MySQL,又是外键,又是索引........)
2.使用单线程(逻辑简单~so也不占太多CPU->不用多线程反而快了,节省一些开销)
3.IO多路复用(epoll) (一个线程管多个socket)
四.小结
我们现在已经了解了
Redis 内存数据 很快 分布式 和新特性 应用方面
话说得好 手下见真章 我们去用用~~