17. Next.js 实战开发 ,为什么需要使用Redis?

819 阅读3分钟

大家好,这里是梦兽编程。更多关于Next.js 13+ 实战开发点击立即查看!

url herf: 梦兽编程 next.js 13+ 实战开发
https://rexweb.link/category/technical-column/next-js13-project-in-action

为什么我们需要Redis

在我们日常开发过程,很多新人都会拿语言自身的性能来进行说是,那那个语言性能强!但有经验的老手都知道实战开发过程最后的难点都在数据库获取数据的压力上。

如果在QPS比较大情况下,比如你使用Golang开发的语言QPS是1000,PHP开发的QPS只有300。这个时候Mysql数据库的并发只有100。在这种情况下你会在访问Mysql获取数据的过程中形成了阻塞。形成一种很尴尬的局面,Golang也没比PHP快多少。

为了解决这个问题一般我们都需要使用到缓存,当然使用Redis做中间件也是有网络带宽和TCP长连接之间的耗时。如果你是单机服务使用本地语言的缓存能力是最快的,但是Redis能流行的主要一个原因是提还提供了很多数据结构,和数据存储。

想一想迭代的过程中,你的应用重启缓存情况是不是很尴尬呢?而Redis中间件服务就可以充分的提供了高性能、扩展性和灵活性成为了我们很多架构中首选的缓存中间件。

Redis常用的一些场景:

  1. 缓存:Redis可以用作高速缓存,从而减少数据库的负载。由于Redis是基于内存的,它可以快速地读取和写入数据。
  2. 会话存储:Redis可以用于存储会话数据,以便在多个服务器之间共享会话状态。(session)
  3. 消息队列:Redis支持发布/订阅模式,可以用作消息队列系统,从而实现异步通信。
  4. 计数器:Redis可以用作计数器,例如用于跟踪网站的页面浏览量或用户在线人数。

Next.js 如何使用Redis?

一般Redis数据类型里用的比较多的数据类型是String。所以梦兽编程这里也会以string进行今天的Redis案例讲解。

在node.js中梦兽编程推荐使用npmioredis提供了完整的redis bufferredis api操作。在page和api route中使用即可,这里梦兽编程使用api route进行讲解。

import Redis from 'ioredis'
// 可以写一个单列
let redis = new Redis(process.env.REDIS_URL)

export async funtion GET(req NextRequest) {
	// 获取出来时字符串
	let cache = await redis.get("cache")
	cache = JSON.parse(cache)
	if(cache) {
		result.data = cache
		return NextResponse.json(result)
	}else {
		// 没有缓存需要进行save
		// ... codeing
		// save key is cache ,the value should stringify to string set the redis string data
		redis.set("cache", JSON.stringify(result.data), "EX", 60)
	}
}

结束

这就是在Next.js里面使用Redis最简单。应用ioredis快速解决你的数据库请求压力吧。日常开发过程中,还有很多需要注意的点,比如缓存穿透,缓存击穿等等等。

有些时候使用redis的数据结构可以快速解决很多数据问题。比如早期的微博就是使用redis里面的交集做的寻早联系人。

梦兽编程倔强号

梦兽编程知乎

梦兽编程bilibili

#梦兽编程倔强号
https://juejin.cn/user/2066737588876983

#梦兽编程知乎
https://www.zhihu.com/people/mo-dong-74

#梦兽编程bilibili
https://space.bilibili.com/106325238?spm_id_from=333.1007.0.0