⛅ Cloudflare Workers KV 的键值存储(第 4 课)
无服务器键值存储或 KV 提供了一种为 Cloudflare Workers 存储/检索数据的简单方法。最重要的是,Cloudflare 最近为 KV 推出了免费层!
https://www.youtube.com/watch?vu003d5dkzFrJ044o
Cloudflare Workers 课程大纲
1.Serverless Cloudflare Workers 入门
2.Cloudflare Workers 作为 Web 服务器(带有 Webpack)
3.从 Cloudflare Worker 进行 API 调用
- 使用 Cloudflare Workers KV 存储键值对
5.[Bonus] Cloudflare Workers 智能路由
关于工人KV
Workers KV 读取的响应速度非常快。根据 Cloudflare 的说法,速度与缓存的静态文件一样快。
Workers KV 是一个最终一致的数据库。更改可能需要长达 60 秒才能传播(尽管根据我的经验,它要少得多)。这意味着 KV 不能用于需要原子事务的应用程序。
Workers KV 是一个键值存储。典型的 KV 存储解决方案,没有搜索。但是有列表操作。
更多关于 KV 是如何工作的
我们将要做什么
在本课中,我们将使用 Cloudflare KV 对put密钥、get密钥和list密钥进行操作。
从我们离开的地方开始
如果您没有跟随之前的课程(您不必),您可以从这里开始:
# continue where we left off
$ git clone https://github.com/joelnet/cloudflare-worker-website.git
$ cd cloudflare-worker-website
$ git checkout f6a224b37010d76d694320d4748ac07cb75f7369
$ npm ci
创建KV命名空间
命名空间是隔离 KV 存储的一种方式。如果您在 Cloudflare 下运行许多应用程序或在应用程序中分离,这将非常有用。例如,您可能想要创建 LOGINS 和 PROFILES 命名空间。您也可以使用诸如logins:<login>或profiles:<profile>之类的键前缀来执行此操作。
可以在 Cloudflare 网站内或使用wranglerCLI 创建命名空间。
我将创建一个名为FILES的新命名空间。
$ wrangler kv:namespace create "FILES"
输出应该看起来像这样。请务必将底部部分粘贴到您的wrangler.toml中。
🌀 Creating namespace with title "my-website-FILES"
✨ Success!
Add the following to your configuration file:
kv_namespaces = [
{ binding = "FILES", id = "529b4c9be8b344f59adfe89cc9765879" }
]
ESLint
通过打开.eslintrc.yml添加一个 ESLint Global。这将防止 ESLint 抱怨FILES全局。
globals:
FILES: readonly
设置
计划是创建 3 个文件。每个人读、写和列出密钥。然后使用 KV 存储 markdown 文件,然后将它们显示为 HTML。
首先,设置到新文件的路由。
打开src/index.js并添加导入。
import filesPost from './pages/files.post'
import files from './pages/files'
import filesList from './pages/files.list'
然后添加一个新的路线。/?是可选/的正则表达式。.+是一个或多个字符的正则表达式。
router.post('/files/?', () => filesPost(request))
router.get('/files/.+', () => files(request))
router.get('/files/?', () => filesList(request))
添加密钥
创建src/pages/files.post.js。要创建密钥,请使用以下格式:await NAMESPACE.put(key, value)。
import { htmlResponse } from '../lib/responses'
const filePost = async request => {
const { filename, contents } = await request.json()
await FILES.put(filename, contents)
return htmlResponse('SUCCESS')
}
export default filePost
密钥可以通过设置expiration自动过期。过期密钥
读取密钥
创建src/pages/files.js。读取密钥使用格式:await NAMESPACE.get(key)。
注意:有更复杂的方法可以从 URL 中提取文件名,为了简单起见,我使用substring。
import marked from 'marked'
import { htmlResponse } from '../lib/responses'
import marked from 'marked'
import { htmlResponse } from '../lib/responses'
const files = async request => {
const url = new URL(request.url)
const id = url.pathname.substring(7)
const file = await FILES.get(id)
const html = marked(file)
return htmlResponse(html)
}
export default files
列表键
创建src/pages/files.list.js。该列表使用格式:await NAMESPACE.list()。
import { htmlResponse } from '../lib/responses'
const fileToLi = file => `
<li>
<a href="/files/${file.name}">${file.name}</a>
</li>
`
const fileList = async () => {
const files = await FILES.list()
const lis = files.keys.map(fileToLi).join('')
return htmlResponse(`<ul>${lis}</ul>`)
}
export default fileList
列表还支持按前缀分页和列出。检查文档以获取有关列表的更多信息。
额外信用
-
使用相同的模式,使用方法
await NAMESPACE.delete(key)实现删除。 -
实现列表页分页,支持>1000个条目。
-
使用过期密钥进行实验。
参考API。
总结
我们使用 Workers KV 创建文件上传来上传markdown文件,并将这些markdown文件显示为HTML。作为奖励,有一个页面列出了上传的FILES。
浏览历史上此时的存储库。
订阅我的时事通讯以继续了解 Cloudflare Workers!
干杯🍻
-
加入我的📰时事通讯
-
订阅我的📺 YouTube,JoelCodes
-
在 Twitter 上向我问好@joelnet
更多推荐
所有评论(0)