一 redis简介
1、'运维人'的心态
学习历程: 先'实践-->搭建redis环境',再了解特性,再'实践-->生产环境中问题',再'深入了解特性'
++++++++++++ "分割线" ++++++++++++
1、 Redis是一种基于'键值对(key-value)'的NoSQL'非关系型'数据库
2、 Redis中的'值'有多种数据结构,可以'满足'很多的应用场景
常见: string'字符串'、hash'哈希'、list'列表'、set'集合'、zset'有序集合'等
3、 Redis会将所有数据都'存放在内存中',所以它的'读写性能'非常惊人-->用做'缓存'
4、 Redis还可以将内存的数据利用'快照(RDB)和日志(AOF)'的形式保存到硬盘上
优点: 这样在发生'类似断电或者机器故障'的时候,内存中的数据会'持久化'不会'丢失'
二 redis特性
① 速度快
1、 存储'介质'
Redis的所有数据都是'存放在内存中',这是Redis速度快的最'主要'原因
2、 语言'特性'
Redis是用'C语言'实现的,一般来说C语言实现的程序'距离'操作系统更近,执行速度相对会更快
3、 单线程
Redis使用了'单线程'架构,预防了多线程可能产生的'竞争'问题,已经上下文'切换性能损耗'
② 基于键值对的数据结构
1、Redis支持'多种数据结构'
2、Redis中的'值'主要有'5种数据结构':字符串、哈希、列表、集合、有序集合
设计原因: 这样不仅能便于在'许多应用场景'的开发,同时也能够提高'开发效率'
③ 简单稳定
1、首先
Redis的'源码很少','结构清晰' --> '源码面前没有秘密'
2、其次
Redis使用'单线程'模型,不仅使得Redis服务端'处理模型变得简单',而且使得'客户端开发'变得简单
3、最后
Redis'不需要依赖于操作系统中的类库',Redis'自己实现了事件处理'的相关功能
备注: Memcache需要'依赖libevent'这样的系统'类库'
④ 持久化
1、'持久化需求场景'
备注:通常将数据放在内存中是'不安全的',一旦发生'断电或者机器故障',重要的'数据'可能就会'丢失'
2、Redis两种'持久化方案':RDB和AOF
诶主: 即可以用两种策略'将内存的数据保存到硬盘中',这样就保证了数据的'可持久性'
⑤ 主从复制
Redis提供了复制功能,实现了'多个相同数据的Redis副本'
⑥ 高可用和分布式
1、Redis从2.8版本正式提供了'高可用实现'Redis Sentinel('哨兵模式')
特点: 它能够保证Redis节点的故障发现和故障自动转移'failover'
2、Redis从3.0版本正式提供了'分布式'实现Redis Cluster('集群模式')
特点: 它是Redis真正的'分布式实现',提供了高可用、读写和容量的'扩展'性
---------- '以需求为导向' ----------
1、'缓存' -->'热点数据'
合理地使用缓存不仅可以'加快数据的访问速度',而且能够有效地'降低后端数据源'的压力
'思考':后端数据库的'性能指标'?-->'mysql抗并发能力?'
2、排行榜系统
Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以'很方便'地构建各种排行榜系统
3、计数器应用
Redis天然支持计数功能而且'计数的性能'也非常好
4、社交网络;赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能
1) 由于'社交网站'访问量通常比较大,而且'传统的关系型数据'不太适合保存这种类型的数据
2) Redis提供的数据结构可以相对'比较容易'地实现这些功能
5、'消息队列系统' --> '发布/订阅'
1) 消息队列系统可以说是一个大型网站的必备'基础'组件
2) 因为其具有'业务解耦'、'非实时业务削峰'等特性
3) Redis提供了'发布订阅功能'和'阻塞队列'的功能
特点: 虽然和专业的消息队列比还'不够'足够强大,但是对于'一般'的消息队列功能基本可以满足