Skip to main content

使用redis stream实现im

redis key

  1. u:<uid> hash, 存放用户信息,例如name/avatar等
  2. s:<uid> stream, 这个队列用于接收/发送用户消息
  3. c:<uid> sorted set, 用于存放用户联系人(包括群组)
  4. gm:<gid> set, 用于存放群用户id
  5. gs:<gid> stream, 用于接收/发送群消息
  6. gi:<gid> hash, 存放群信息,例如name,还有一些配置信息(例如加群是否需要验证?)

redis module

redis module实现IM

IM.RECIVE

IM.RECIVE [uid] BLOCK [ms] COUNT [count] START [start]
获取历史消息,以及监听新的消息

IM.MESSAGE

IM.RECIVE [GROUP | USER] [uid | gid] [mid]
获取单条消息

IM.SEND

IM.SEND [uid] [tuid] [field value] [field value ... ]
发送单聊消息

IM.GSEND

IM.GSEND [uid] [gid] [field value] [field value ... ]
发送群聊消息

IM.USER

IM.USER [uid]
(get user info) 获取用户信息
IM.USER [uid] [field value] [field value ... ]
(create user or update user info)

IM.GROUP

IM.GROUP [gid]
(get group info)
IM.GROUP [gid] [uid] [field value] [field value ... ]
(create group or update group info)

IM.LINK [uid] [tuid]
(add to user contact list)

IM.UNLINK [uid] [tuid]
(remove from user contact list)

IM.JOIN

IM.LINK [uid] [gid]
(add to user group)

IM.QUIT

IM.QUIT [uid] [gid]
(remove from user group)

GUI

  1. using tornado WebSocketHandler to create websocket.
  2. using svelte create simple ui to send message (using localStorage to save message)

docker

docker run --rm --name=redisim -p 8888:8888 lloydzhou/redisim

python sdk

pip install redisim

demo

import asyncio
import redis.asyncio as redis
import redisim

async def main():
    client = redis.Redis(decode_responses=True)
    res = await client.im().recive(user_id, **kwargs)
    print(res)

asyncio.run(main())

lua script version

im = client.im(module=False)

apache/kvrocks

using lua script version with apache/kvrocks

Metadata

Release files for redisim 0.0.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for redisim 0.0.5
File Size Uploaded
redisim-0.0.5.tar.gz 7.5 kB Details

Release files / redisim-0.0.5.tar.gz

Download URL redisim-0.0.5.tar.gz
Size 7.5 kB
Tags Source
SHA-256 checksum
How to use checksums
97b8e5897abd5d933943d85ff5235c84843885fce24edc6d4a1ad15cfc94eab9
BLAKE2b-256 checksum
How to use checksums
0c47ba1dfce782782c00f26885249430be00b60957aa512c39bbfb65fc4888b1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.8

Release history Release notifications | RSS feed

This release

0.0.5 This release

1 release file

0.0.4

1 release file

0.0.3

1 release file

0.0.2

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page