Redis开发与运维. 1.3 Redis使用场景

1.3 Redis使用场景

上节我们已经了解了Redis的若干个特性,本节来看一下Redis的典型应用场景有哪些?

1.3.1 Redis可以做什么

1.?缓存

缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。第11章将对缓存的设计与使用进行详细说明。

2.?排行榜系统

排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。

3.?计数器应用

计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数功能而且计数的性能也非常好,可以说是计数器系统的重要选择。

4.?社交网络

赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。

5.?消息队列系统

消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。

1.3.2 Redis不可以做什么

实际上和任何一门技术一样,每个技术都有自己的应用场景和边界,也就是说Redis并不是万金油,有很多适合它解决的问题,但是也有很多不合适它解决的问题。我们可以站在数据规模和数据冷热的角度来进行分析。

站在数据规模的角度看,数据可以分为大规模数据和小规模数据,我们知道Redis的数据是存放在内存中的,虽然现在内存已经足够便宜,但是如果数据量非常大,例如每天有几亿的用户行为数据,使用Redis来存储的话,基本上是个无底洞,经济成本相当的高。

站在数据冷热的角度看,数据分为热数据和冷数据,热数据通常是指需要频繁操作的数据,反之为冷数据,例如对于视频网站来说,视频基本信息基本上在各个业务线都是经常要操作的数据,而用户的观看记录不一定是经常需要访问的数据,这里暂且不讨论两者数据规模的差异,单纯站在数据冷热的角度上看,视频信息属于热数据,用户观看记录属于冷数据。如果将这些冷数据放在Redis中,基本上是对于内存的一种浪费,但是对于一些热数据可以放在Redis中加速读写,也可以减轻后端存储的负载,可以说是事半功倍。

所以,Redis并不是万金油,相信随着我们对Redis的逐步学习,能够清楚Redis真正的使用场景。

时间: 2024-10-27 01:40:45

Redis开发与运维. 1.3 Redis使用场景的相关文章

Redis开发与运维. 导读

数据库技术丛书 Redis开发与运维 付磊 张翼军编著   Redis作为基于键值对的NoSQL数据库,具有高性能.丰富的数据结构.持久化.高可用.分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用.掌握Redis已经逐步成为开发和运维人员的必备技能之一. 本书关注了Redis开发运维的方方面面,尤其对于开发运维中如何提高效率.减少可能遇到的问题进行详细分析,但本书不单单介绍怎么解决这些问题,而是通过对Redis重要原理的解析,帮助开发运维人员学会找到问题的方法,以及理解背后

Redis开发与运维. 3.2 Redis Shell

3.2 Redis Shell Redis提供了redis-cli.redis-server.redis-benchmark等Shell工具.它们虽然比较简单,但是麻雀虽小五脏俱全,有时可以很巧妙地解决一些问题. 3.2.1 redis-cli详解 第1章曾介绍过redis-cli,包括-h.-p参数,但是除了这些参数,还有很多有用的参数,要了解redis-cli的全部参数,可以执行redis-cli -help命令来进行查看,下面将对一些重要参数的含义以及使用场景进行说明. 1.?-r -r(

Redis开发与运维. 2.7 键管理

2.7 键管理 本节将按照单个键.遍历键.数据库管理三个维度对一些通用命令进行介绍. 2.7.1 单个键管理 针对单个键的命令,前面几节已经介绍过一部分了,例如type.del.object.exists.expire等,下面将介绍剩余的几个重要命令. 1.?键重命名 rename key newkey 例如现有一个键值对,键为python,值为jedis: 127.0.0.1:6379> get python "jedis" 下面操作将键python重命名为java: 127.

Redis开发与运维. 3.1 慢查询分析

3.1 慢查询分析 许多存储系统(例如MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作.所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能. 如图3-1所示,Redis客户端执行一条命令分为如下4个部分:   图3-1 一条客户端命令的生命周期 1)发送命令 2)命令排队 3)命令执行 4)返回结果 需要注意,慢查询只统计步骤3)的时间,所以没有慢查询并不

Redis开发与运维. 3.4 事务与Lua

3.4 事务与Lua 为了保证多条命令组合的原子性,Redis提供了简单的事务功能以及集成Lua脚本来解决这个问题.本节首先简单介绍Redis中事务的使用方法以及它的局限性,之后重点介绍Lua语言的基本使用方法,以及如何将Redis和Lua脚本进行集成,最后给出Redis管理Lua脚本的相关命令. 3.4.1 事务 熟悉关系型数据库的读者应该对事务比较了解,简单地说,事务表示一组动作,要么全部执行,要么全部不执行.例如在社交网站上用户A关注了用户B,那么需要在用户A的关注表中加入用户B,并且在用

Redis开发与运维. 1.5 正确安装并启动Redis

1.5 正确安装并启动Redis 通常来说,学习一门技术最好的方法就是实战,所以在学习Redis这样一个实战中产生的技术时,首先把它安装部署起来,值得庆幸的是,相比于很多软件和工具部署步骤繁杂,Redis的安装不得不说是非常简单,本节我们将学习如何安装Redis. 在写本书时,Redis 4.0已经发布RC版,但是大部分公司还都在使用3.0或更早的版本(2.6或2.8),本书所讲的内容基于Redis 3.0. 1.5.1 安装Redis 1.?在Linux上安装Redis Redis能够兼容绝大

Redis开发与运维. 1.6 Redis重大版本

1.6 Redis重大版本 Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7.2.9.3.1),如果是偶数,则为稳定版本(例如2.6.2.8.3.0.3.2).当前奇数版本就是下一个稳定版本的开发版本,例如2.9版本是3.0版本的开发版本.所以我们在生产环境通常选取偶数版本的Redis,如果对于某些新的特性想提前了解和使用,可以选择最新的奇数版本. 介绍一门技术的版本是很多技术图书的必备内容,通常读者容易忽略,但随着你对这门技术深入学习后

Redis开发与运维. 3.3 Pipeline

3.3 Pipeline 3.3.1 Pipeline概念 Redis客户端执行一条命令分为如下四个过程: 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间). Redis提供了批量操作命令(例如mget.mset等),有效地节约RTT.但大部分命令是不支持批量操作的,例如要执行n次hgetall命令,并没有mhgetall命令存在,需要消耗n次RTT.Redis的客户端和服务端可能部署在不同的机器上.例如客户端在北京,R

Redis开发与运维. 2.1 预备

2.1 预备 在正式介绍5种数据结构之前,了解一下Redis的一些全局命令.数据结构和内部编码.单线程命令处理机制是十分有必要的,它们能为后面内容的学习打下一个好的基础,主要体现在两个方面:第一.Redis的命令有上百个,如果纯靠死记硬背比较困难,但是如果理解Redis的一些机制,会发现这些命令有很强的通用性.第二.Redis不是万金油,有些数据结构和命令必须在特定场景下使用,一旦使用不当可能对Redis本身或者应用本身造成致命伤害. 2.1.1 全局命令 Redis有5种数据结构,它们是键值对