https://github.com/lloydzhou/redisim
redis im server
https://github.com/lloydzhou/redisim
chat chat-application chatroom im redis redis-module redis-modules stream
Last synced: 11 months ago
JSON representation
redis im server
- Host: GitHub
- URL: https://github.com/lloydzhou/redisim
- Owner: lloydzhou
- License: mit
- Created: 2022-10-12T17:08:36.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-03-28T15:14:36.000Z (over 2 years ago)
- Last Synced: 2025-07-13T12:19:04.644Z (12 months ago)
- Topics: chat, chat-application, chatroom, im, redis, redis-module, redis-modules, stream
- Language: C
- Homepage:
- Size: 251 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 使用redis stream实现im
## redis key
1. `u:` hash, 存放用户信息,例如name/avatar等
2. `s:` stream, 这个队列用于接收/发送用户消息
3. `c:` sorted set, 用于存放用户联系人(包括群组)
4. `gm:` set, 用于存放群用户id
5. `gs:` stream, 用于接收/发送群消息
6. `gi:` 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
> IM.LINK [uid] [tuid]
> (add to user contact list)
### IM.UNLINK
> 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