1. 认识 Redis1.1 用途用于存储数据内存中存储定义变量不就是在内存中存储数据为什么还要使用RedisRedis在分布式系统中可以发挥其功能如果是单机程序直接通过变量存储数据的方式比Redis更优进程具有隔离性进程间的通信基于网络Redis就是基于网络可以把自己内存中的变量给别的进程甚至在别的主机的进程进行使用1.2 Redis主要可以用作数据库缓存数据消息队列用作数据库MySQL是最常用的数据库最大的问题在于访问速度比较慢在很多互联网产品中对于性能要求是很高的Redis作为数据库使用可以快很多但和MySQL相比最大的劣势是存储空间有限用作缓存如何使存储空间大而且访问速度快典型的案例是把Redis 和 MySQL 结合起来使用“二八原则” 20%的热点数据能够满足80%的访问需求缺点系统的复杂程度大大提高而且如果数据发生修改还涉及到 Redis 和MySQL 之间的数据同步问题用作消息队列Redis最初是用来作为一个“消息中间件”的“消息队列”分布式系统下的生产者消费者模型当前很少会直接使用Redis作为消息中间件使用1.3 Redis特性1.3.1 在内存中存储数据MySQL主要通过“表”的方式来存储组织数据成为“关系型数据库”Redis主要通过“键值对”的方式来存储组织数据称为“非关系型数据库”key 都是 stringvalue 则可以是上述的这些数据结构1.3.2 可编程性针对Redis的操作可以直接通过简单的交互式命令进行操作也可以通过一些脚本的方式批量进行一些操作1.3.3 可扩展性可以在Redis原有的功能上进行扩展Redis提供了一组API1.3.4 持久化Redis把数据存储在内存上内存的数据是很容易丢失的进程退出/重启Redis会把数据存储在硬盘上内存为主硬盘为辅硬盘相当于对内存的数据备份了一下如果Redis重启了就会在重启时加载硬盘中的备份数据使Redis的内存恢复到重启前的状态1.3.5 支持集群Redis作为一个分布式系统中的中间件能够支持集群是很关键的这个水平拓展类似于分库分表一个Redis能存储的数据是有限的引入多个主机部署多个Redis节点每个Redia存储数据的一部分1.3.6 高可用冗余 / 备份Redis自身也是支持“主从”结构的从节点就相当于主节点的备份1.3.7 访问速度快1. Redis数据在内存中就比访问硬盘的数据库要快很多2. Redis核心功能都是比较简单的逻辑核心功能都是比较简单的操作内存的数据结构3. 从网络角度上Redis使用IO多路复用的方式使用一个线程管理多个socket4. Redis使用单线程模型减少了不必要的线程之间的竞争开销5. 待考量Redis使用C语言开发MySQL也是C语言开发的1.3.8 功能丰富除了提供5种数据结构Redis还提供了许多额外的功能1. 提供了键过期功能可以用来实现缓存2. 提供了发布订阅功能可以用来实现消息系统3. 支持 Lua 脚本功能可以利用Lua 创造出新的Redis命令4. 提供了简单是事务功能能在一定程度上保证事务特性5. 提供了流水线功能这样客户端能将一批命令一次性传到Redis减少网络的开销1.3.9 客户端语言多Redis提供了简单的TCP通信协议很多编程语言可以很方便地接入到Redis并且由于Redis收到社区和各大公司的广泛认可所以支持Redis的了护短语言非常多几乎涵盖了主流的编程语言1.4 Redis使用场景数据库大多数情况下考虑到数据库存储有限考虑的是“大”但是仍然有一些场景考虑的是“快”缓存 / 会话存储消息队列分布式系统来说服务器和服务器之间有时候也需要使用到生产这消费者模型如果当前场景中对于消息队列的功能依赖不是很多并且不想引入额外的依赖了Redis可以作为一个选择1. 缓存缓存机制几乎所有大型网站都有使用合理使用缓存不仅可以加速数据的访问速度而且能有效降低后端数据源的压力。Redis提供了键值过期时间设置并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说一个合理的缓存设计能够为一个网站的稳定保驾护航。2. 排行榜系统排行榜系统几乎存在于所有的网站例如按照热度排名的排行榜按照时发布的排行榜按照各种复杂维度计算出的排行榜Redis提供了列表和有序集合的结构合理使用这些数据结构可以很方便的构建各种排行榜系统。3. 计数器应用计数器在网站中的作用至关重要例如视频网站有播放数、电商网站有浏览数为了保证数据的实时性每一次播放和浏览都要做加1的操作如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持技术功能且技术的性能也非常好可以说是计数系统的重要选择。4. 社交网路赞/踩、分析、共同好友/喜好、推送、下拉刷新等是社交网络的必备功能由于社交网站访问量通常比较大而且传统的关系型数据库不太适合保存这种类型的数据Redis提供的数据结构可以相比较容易地实现这些功能。5. 消息队列系统消息队列系统可以说是一个大型网站的必备基础组件因为其具有业务解耦非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能虽然和专业的消息队列还不够强大但是对于一般的消息队列功能基本可以满足Redis不能做的事是存储大规模数据Redis的快是相对于MySQl这样的关系型数据库但如果直接和内存中的操作变量相比就没有优势了甚至更慢单机系统用一个Redis来存还是直接在内存中搞一个hash map使用hash map 是直接操作内存使用Redis 是先通过网络再操作内存2. Reids操作Redis也是一个客户端-服务器 机构的程序Redis 客户端和服务器可以在同一个主机上也可以在不同的主机上Redis的客户端也有很多种形态1. 自带了命令行客户端redis-cli2. 图形化界面的客户端桌面系统web程序向这样图形化程序依赖windows系统在实际工作中用来办公的windows系统连接到服务器可能会有很多限制3. 基于Redis 的api 自行开发客户端
Redis初识
1. 认识 Redis1.1 用途用于存储数据内存中存储定义变量不就是在内存中存储数据为什么还要使用RedisRedis在分布式系统中可以发挥其功能如果是单机程序直接通过变量存储数据的方式比Redis更优进程具有隔离性进程间的通信基于网络Redis就是基于网络可以把自己内存中的变量给别的进程甚至在别的主机的进程进行使用1.2 Redis主要可以用作数据库缓存数据消息队列用作数据库MySQL是最常用的数据库最大的问题在于访问速度比较慢在很多互联网产品中对于性能要求是很高的Redis作为数据库使用可以快很多但和MySQL相比最大的劣势是存储空间有限用作缓存如何使存储空间大而且访问速度快典型的案例是把Redis 和 MySQL 结合起来使用“二八原则” 20%的热点数据能够满足80%的访问需求缺点系统的复杂程度大大提高而且如果数据发生修改还涉及到 Redis 和MySQL 之间的数据同步问题用作消息队列Redis最初是用来作为一个“消息中间件”的“消息队列”分布式系统下的生产者消费者模型当前很少会直接使用Redis作为消息中间件使用1.3 Redis特性1.3.1 在内存中存储数据MySQL主要通过“表”的方式来存储组织数据成为“关系型数据库”Redis主要通过“键值对”的方式来存储组织数据称为“非关系型数据库”key 都是 stringvalue 则可以是上述的这些数据结构1.3.2 可编程性针对Redis的操作可以直接通过简单的交互式命令进行操作也可以通过一些脚本的方式批量进行一些操作1.3.3 可扩展性可以在Redis原有的功能上进行扩展Redis提供了一组API1.3.4 持久化Redis把数据存储在内存上内存的数据是很容易丢失的进程退出/重启Redis会把数据存储在硬盘上内存为主硬盘为辅硬盘相当于对内存的数据备份了一下如果Redis重启了就会在重启时加载硬盘中的备份数据使Redis的内存恢复到重启前的状态1.3.5 支持集群Redis作为一个分布式系统中的中间件能够支持集群是很关键的这个水平拓展类似于分库分表一个Redis能存储的数据是有限的引入多个主机部署多个Redis节点每个Redia存储数据的一部分1.3.6 高可用冗余 / 备份Redis自身也是支持“主从”结构的从节点就相当于主节点的备份1.3.7 访问速度快1. Redis数据在内存中就比访问硬盘的数据库要快很多2. Redis核心功能都是比较简单的逻辑核心功能都是比较简单的操作内存的数据结构3. 从网络角度上Redis使用IO多路复用的方式使用一个线程管理多个socket4. Redis使用单线程模型减少了不必要的线程之间的竞争开销5. 待考量Redis使用C语言开发MySQL也是C语言开发的1.3.8 功能丰富除了提供5种数据结构Redis还提供了许多额外的功能1. 提供了键过期功能可以用来实现缓存2. 提供了发布订阅功能可以用来实现消息系统3. 支持 Lua 脚本功能可以利用Lua 创造出新的Redis命令4. 提供了简单是事务功能能在一定程度上保证事务特性5. 提供了流水线功能这样客户端能将一批命令一次性传到Redis减少网络的开销1.3.9 客户端语言多Redis提供了简单的TCP通信协议很多编程语言可以很方便地接入到Redis并且由于Redis收到社区和各大公司的广泛认可所以支持Redis的了护短语言非常多几乎涵盖了主流的编程语言1.4 Redis使用场景数据库大多数情况下考虑到数据库存储有限考虑的是“大”但是仍然有一些场景考虑的是“快”缓存 / 会话存储消息队列分布式系统来说服务器和服务器之间有时候也需要使用到生产这消费者模型如果当前场景中对于消息队列的功能依赖不是很多并且不想引入额外的依赖了Redis可以作为一个选择1. 缓存缓存机制几乎所有大型网站都有使用合理使用缓存不仅可以加速数据的访问速度而且能有效降低后端数据源的压力。Redis提供了键值过期时间设置并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说一个合理的缓存设计能够为一个网站的稳定保驾护航。2. 排行榜系统排行榜系统几乎存在于所有的网站例如按照热度排名的排行榜按照时发布的排行榜按照各种复杂维度计算出的排行榜Redis提供了列表和有序集合的结构合理使用这些数据结构可以很方便的构建各种排行榜系统。3. 计数器应用计数器在网站中的作用至关重要例如视频网站有播放数、电商网站有浏览数为了保证数据的实时性每一次播放和浏览都要做加1的操作如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持技术功能且技术的性能也非常好可以说是计数系统的重要选择。4. 社交网路赞/踩、分析、共同好友/喜好、推送、下拉刷新等是社交网络的必备功能由于社交网站访问量通常比较大而且传统的关系型数据库不太适合保存这种类型的数据Redis提供的数据结构可以相比较容易地实现这些功能。5. 消息队列系统消息队列系统可以说是一个大型网站的必备基础组件因为其具有业务解耦非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能虽然和专业的消息队列还不够强大但是对于一般的消息队列功能基本可以满足Redis不能做的事是存储大规模数据Redis的快是相对于MySQl这样的关系型数据库但如果直接和内存中的操作变量相比就没有优势了甚至更慢单机系统用一个Redis来存还是直接在内存中搞一个hash map使用hash map 是直接操作内存使用Redis 是先通过网络再操作内存2. Reids操作Redis也是一个客户端-服务器 机构的程序Redis 客户端和服务器可以在同一个主机上也可以在不同的主机上Redis的客户端也有很多种形态1. 自带了命令行客户端redis-cli2. 图形化界面的客户端桌面系统web程序向这样图形化程序依赖windows系统在实际工作中用来办公的windows系统连接到服务器可能会有很多限制3. 基于Redis 的api 自行开发客户端