Redis最常见的5种应用场景

redis,常见,应用,场景 · 浏览次数 : 4

小编点评

## Redis 的5种应用场景 1. **缓存对象:** 由于数据库数据经常被频繁访问,使用 Redis 来缓存数据可以降低数据库负载,提升应用程序响应速度。 2. **会话存储:** 使用 Redis 来存储会话数据可以实现无状态的服务器之间共享用户相关的状态数据,提升用户体验。 3. **分布式锁:** 使用 Redis 来实现分布式锁可以协调多个节点对共享资源的操作,提升系统性能。 4. **排行榜:** 使用 Redis 的 sorted sets 可以实现排行榜功能,方便用户根据分数查找排名。 5. **限速器:** 使用 Redis 的 throttle 命令可以实现请求限流,限制每个用户或 IP 的请求数量,提高网站性能。 ## 5种应用场景的具体例子 * **缓存对象:** 一种电商网站可能会使用 Redis 来缓存用户的购物车商品数据,以便在用户再次购买时更快地处理订单。 * **会话存储:** 一个在线聊天应用程序可以使用 Redis 来存储用户之间的聊天记录,并方便用户查找聊天记录。 * **分布式锁:** 一种社交网络应用程序可以使用 Redis 来实现用户之间的点赞、分享等操作,并防止恶意用户进行攻击。 * **排行榜:** 一种排名网站可以使用 Redis 来实现用户之间的排名榜,并方便用户查找排名。 * **限速器:** 一种在线游戏服务器可以使用 Redis 来限制每个玩家的登录次数或请求数量,防止恶意用户进行攻击。 ## 总结 Redis 是一个非常有应用场景的工具,可以用于各种不同的应用场景。其易于使用、高效的性能和丰富的功能,使其成为各种 web 应用的理想选择。

正文

Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中,已经有所介绍。

今天通过这篇,我们来了解一下Redis最常见的5种应用场景。您可以通过视频来学习,如果您不方便观看视频,也可以通过文字内容学习,文字部分做了更概要的总结。

缓存(Cache)

Redis的第一个应用场景是Redis作为缓存对象来加速Web应用的访问。

在该场景下,有一些存储于数据库中的数据会被频繁访问,如果频繁的访问数据库,数据库负载会升高,同时由于数据库IO比较慢,应用程序的响应会比较差。此时,如果引入Redis来存储这些被频繁访问的数据,就可以有效的降低数据库的负载,同时提高应用程序的请求响应。

会话存储(Session)

使用Redis来存储会话(Session)数据,可以实现在无状态的服务器之间共享用户相关的状态数据数据。

当用户登录Web应用时候,将会话数据存储于Redis,并将唯一的会话ID(Session ID)返回到客户端的Cookie中。当用户再向应用发送请求时,会将此会话ID包含在请求中。无状态的Web服务器,根据这个会话ID从Redis中搜索相关的会话数据来进一步请求处理。

这里需要注意的是,Redis是内存数据库,如果采用单实例部署。那么当Redis服务器故障重启之后,所有的Session会话会消失,用户不得不重新登录来获取新的Session。所以,当拿Redis来存储Session的时候,建议采用主从的集群模式来部署。这样,即使主服务器挂了,马上有从库接管流量,不影响用户的使用。

分布式锁(Distributed Lock)

当我们在应用中部署了多个节点,这些节点需要操作同一个资源的时候会存在竞争。此时,我们可以使用Redis来作为分布式锁,以协调多个节点对共享资源的操作。

这里主要是用Redis的原子操作命令:SETNX,该命令仅允许key不存在的时候才能设置key。

下图展示了一个简单用例。Client 1通过SETNX命令尝试创建lock 1234abcd。如果当前还没有这个key,那么将返回1。Client 1获得锁,就可以执行对共享资源的操作,操作完成之后,删除刚刚创建的lock(释放分布式锁)。如果Client 1在执行SETNX命令的时候,返回了0,说明有其他客户端占用了这key,那么等待一段时间(等其他节点释放)之后再尝试。

上面这个简单实现虽然可以满足很多用例,但它并不具备良好的容错机制。如果要在生产上是用的话,更推荐采用一些更高质量的分布式锁实现。比如,Java平台的话,可以选择:Redisson.

速率限制器(Rate Limiter)

由于Redis提供了计数器功能,所以我们可以通过该能力,配合超时时间,来实现速率限制器,最常见的场景就是服务端是用的请求限流。

一个基本的限速实现如下图:

根据用户id或者ip来作为key,使用INCR命令来记录用户的请求数量。然后将该请求数量与允许的请求上限数量做比较,只有低于限制的时候,才会执行请求处理。如果超过限制,就拒绝请求。

同时,请求数量的计数器需要设置一个时间窗口,比如:1分钟。也就是没过一分钟时间,计数器将被清零,重新计数。所以,当一个时间窗口中被限流之后,等到下一个时间窗口,就能恢复继续请求。以实现限制速率的效果。

除了时间窗算法之外,漏桶算法也能通过Redis来实现。

排行榜(Rank/Leaderboard)

由于Redis提供了排序集合(Sorted Sets)的功能,所以很多游戏应用采用Redis来实现各种排行榜功能。

Sorted Sets

排序集合是唯一元素(比如:用户id)的集合,每个元素按分数排序,这样可以快速的按分数来检索元素

小结

Redis的应用非常广泛,这里仅总结了一些常见的用法。除此之外,还有很多有意思的应用,这取决于业务场景。大家可以举一反三。

如果您平时也有上油管看前沿视频的话也可以装一个Youtube中文配音,它可以有效地提高学习效率。如果您因为网络原因不方便查看这些内容,也可以关注我的视频号「程序猿DD」或者B站频道,我会经常分享一些日常看到的精华学习资料,感兴趣的小伙伴根据自己平时习惯选择订阅即可。

欢迎关注我的公众号:程序猿DD。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

与Redis最常见的5种应用场景相似的内容:

Redis最常见的5种应用场景

Redis作为当今最流行的内存数据库,已经成为服务端加速的必备工具之一。对于Redis为什么那么快?以及Redis采用单线程,但为什么反而获得更高的性能的疑问,在之前的Redis为什么那么快?一文中,已经有所介绍。 今天通过这篇,我们来了解一下Redis最常见的5种应用场景。您可以通过视频来学习,如

带有ttl的Lru在Rust中的实现及源码解析

TTL是Time To Live的缩写,通常意味着元素的生存时间是多长。 应用场景 数据库:在redis中我们最常见的就是缓存我们的数据元素,但是我们又不想其保留太长的时间,因为数据时间越长污染的可能性就越大,我们又不想在后续的程序中设置删除,所以我们此时需要设置过期时间来让数据自动淘汰。 sete

[转帖]Spring-data-redis操作redis知识总结

https://www.yisu.com/zixun/218120.html 什么是spring-data-redis spring-data-redis是spring-data模块的一部分,专门用来支持在spring管理项目对redis的操作,使用java操作redis最常用的是使用jedis,但

缓存空间优化实践

缓存Redis,是我们最常用的服务,其适用场景广泛,被大量应用到各业务场景中。也正因如此,缓存成为了重要的硬件成本来源,我们有必要从空间上做一些优化,降低成本的同时也会提高性能。下面以我们的案例说明,将缓存空间减少70%的做法。

[转帖]解码Redis最易被忽视的CPU和内存占用高问题

https://ost.51cto.com/posts/12514 我们在使用Redis时,总会碰到一些redis-server端CPU及内存占用比较高的问题。下面以几个实际案例为例,来讨论一下在使用Redis时容易忽视的几种情形。 一、短连接导致CPU高 某用户反映QPS不高,从监控看CPU确实偏

[转帖]Redis:我是如何与客户端进行通信的

江湖上说,天下武功,无坚不摧,唯快不破,这句话简直是为我量身定制。 我是一个Redis服务,最引以为傲的就是我的速度,我的 QPS 能达到10万级别。 在我的手下有数不清的小弟,他们会时不时到我这来存放或者取走一些数据,我管他们叫做客户端,还给他们起了英文名叫 Redis-client。 有时候一个

Redis缓存的主要异常及解决方案

作者:京东物流 陈昌浩 1 导读 Redis 是当前最流行的 NoSQL数据库。Redis主要用来做缓存使用,在提高数据查询效率、保护数据库等方面起到了关键性的作用,很大程度上提高系统的性能。当然在使用过程中,也会出现一些异常情景,导致Redis失去缓存作用。 2 异常类型 异常主要有 缓存雪崩 缓

通过redis学网络(1)-用go基于epoll实现最简单网络通信框架

![image.png](https://img2023.cnblogs.com/blog/1382767/202306/1382767-20230607105418219-574417823.png) > 本系列主要是为了对redis的网络模型进行学习,我会用golang实现一个reactor网络

RedisStack部署/持久化/安全/与C#项目集成

前言 Redis可好用了,速度快,支持的数据类型又多,最主要的是现在可以用来向量搜索了。 本文记录一下官方提供的 redis-stack 部署和配置过程。 关于 redis-stack redis-stack installs a Redis server with additional datab

[转帖]开箱即用的Redis发行版 —— Pigsty v1.3

https://cdn.modb.pro/db/181251 啊!标题写错了吗?Pigsty不是PostgreSQL的发行版吗? 不过,标题没有写错: Pigsty v1.3 现在也支持Redis啦! 虽然PostgreSQL是世界上最先进的开源关系型数据库,但一个好汉三个帮,一个篱笆三个桩。红花也