'id': id, 'title': title, 'classification': classification })
asyncio.run(main())
每个新添加的流事情都有一个独一标识符, 其中包含自 1970 年末尾的时间戳(毫秒)和一个用破折号衔接的序列号。 例如, 当我写这篇文章的时分, 1970 年 1 月 1 日(Unix纪元)午夜曾经过去了 1,593,120,357,193 毫秒(1.59千兆秒)。 因此当我运转下面这段代码的时分, 命令将创立出 ID 为 1593120357193-0 的事情。这段代码中最重要的就是第 17 行和第 18 行, 它运用了 redis.xadd 函数将一次目击事情的字段添加到流外面。
我们在添加事情的时分可以运用 * 来替代详细的 ID , 这样 Redis 就会依据以后时间来自动生成事情的 ID , 这也是 redis.xadd 函数的默许行为。
正如接上去的代码所示, 在读取流元素的时分, 我们需求设置一个起始 ID 。 你可以看到, 在第 10 行, 顺序将变量 last_id 设置成了 0-0 , 这个 ID 代表流的起始位置。
import asyncio
import aioredis
from pprint import pp
async def main():
redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf8')
last_id = '0-0'
while True:
events = await redis.xread(['bigfoot:sightings:stream'], timeout=0, count=5, latest_ids=[last_id])
for key, id, fields in events:
pp(fields)
last_id = id
asyncio.run(main())
顺序的第 12 行运用 redis.xread 函数从流中央求最多 5 个 0-0 之后的事情。 该调用将前往一个列表, 然后顺序将对其停止循环和解构, 以取得事情的字段和标识符。 事情的标识符会被贮存起来, 以便未来调用 redis.xread 时可以取得新的事情并在有需求时重新读取之前读取过的旧事情
。
将 Redis 用作搜索引擎
Redis 可以经过模块(Module)扩展来添加新的命令和功用。 有 少量的模块 可以用于 AI 模型效劳、图形数据库、时间序列数据库以及本例中的搜索引擎。
RedisSearch 是一个弱小的搜索引擎, 它摄取数据的速度快得惊人。 有些人喜欢用它来停止 瞬时搜索 , 但除此之外它也可以用来停止其他搜索。 下面是运用该模块的一个例子:
import asyncio
import aioredis
from pprint import pp
async def main():
redis = await aioredis.create_redis('redis://:foobared@localhost:6379/0', encoding='utf-8')
await redis.execute('FT.DROP', 'bigfoot:sightings:search')
await redis.execute('FT.CREATE', 'bigfoot:sightings:search',
'SCHEMA', 'title', 'TEXT', 'classification', 'TEXT')
await asyncio.gather(
add_document(redis, 1, 'Possible vocalizations east of Makanda', 'Class B'),
(责任编辑:admin)