传统MySQL架构难以满足的现代应用程序需求包括:
传统数据库的读/写速度对会话存储等用例不友好;
引入新表或修改现有模式非常复杂,这也导致了添加新功能和应用程序会有困难;
传统数据库会受到每秒可执行操作的数量和并发连接数的限制,所以在数据库实例增多的情况下,基础架构和维护成本也会增加。
Redis和传统数据库结合会产生哪些化学反应呢?首先,如果应用程序的数据是存储在MySQL或其它关系型数据库中,那么Redis可以作为前端数据库处于应用程序和MySQL之间;其次,还可以利用Redis来设计旁路读出式和写通式缓存解决方案、会话存储和速率限制器,这样可以提高性能、加速创新,以更少的资源扩展来获得最佳的用户体验。
Redis作为“参与型系统”
Redis内存中键值数据存储可为用户提供低延迟响应,其内置的数据结构(例如Lists、Hashes、 Sets、Sorted Sets、Bitmaps、Hyperloglog和Geospatial Indices),较于关系型数据库能够更有效地执行某些数据操作。
所以,我们建议在数据访问层后使用Redis作为“参与型系统”来存储热数据,同时将MySQL指定为“记录系统”。
另外,Redis如果应用于以下用例,那么就可以规避掉很多可能在原有应用程序、数据库或网络层中出现的瓶颈:
- 缓存:为内存访问提供一个分层模型,Redis中存储应用程序中常用、重复读取的数据。缓存也可帮助应用程序快速检索数据并限制数据库服务器上的负载。
- 会话存储:在所有交互式应用程序中,服务器为每个活动用户维护一个唯一会话。相比于依赖MySQL等关系型数据库来持久化会话数据,Redis在具有足够RAM大小的服务器上,单个集群就可以管理数千个会话。
- 实时分析:通过排行榜、仪表板、民意测验、消息、计数器和其他实时聚合器进行的游戏或操作需要与最终用户进行持续的互动和通信。而Redis强大、高效的数据结构可以收集和处理数百万个同时进行的活动或对象,并将其发送到活动用户手中。
- 度量:Redis可以通过速率限制应用程序在一定时间内的调用次数,帮助开发人员在高峰使用时间内高效地管理传统服务器上的负载。
当然,除了上面的用例,Redis在消息代理、数据结构存储和临时数据存储等用例中表现也很突出。总结一下就是Redis能更快地收集和获取数据并反馈给终端用户。再进一步的话,Redis Enterprise提供高可用性、内存复制、自动伸缩和重新分片,以及基于前沿CRDT的分布式数据库和内置Redis模块(如RediSearch、ReJSON、Rebloom和Redis Graph)。
借助于Redis,我们在传统解决方案中也可以享受到“即时体验”,其在性能、灵活性和可扩展性方面的优势值得我们尝试!