-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathredis_client.js
75 lines (61 loc) · 1.6 KB
/
redis_client.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import redis from 'redis'
import rejson from 'redis-rejson'
import redisearch from 'redis-redisearch'
import { promisify } from 'util'
import config from './config.js'
rejson(redis)
redisearch(redis)
// add ft.aggregate command from redisearch
redis.addCommand('ft.aggregate')
// new command since 6.2.0 for lists
redis.addCommand('lmove')
const client = redis.createClient({
host: config.redisHost,
password: config.redisPassword,
port: config.redisPort,
})
const ftcreateAsync = promisify(client.ft_create).bind(client)
const keysAsync = promisify(client.keys).bind(client)
const del = promisify(client.del).bind(client)
const roomsIndex = 'roomsIndex'
client.on('error', err => {
console.error(err)
})
client.on('ready', async () => {
// delete stale data
const roomKeys = await keysAsync('room:*')
const queueKeys = await keysAsync('queue:*')
const socketKeys = await keysAsync('socket:*')
if (roomKeys?.length) {
await del(roomKeys)
}
if (queueKeys?.length) {
await del(queueKeys)
}
if (socketKeys?.length) {
await del(socketKeys)
}
// indices on:
// - name
// - description
// - genres
// - numMembers
// - private
// create index for room searching
try {
await ftcreateAsync(roomsIndex,
'PREFIX', '1', 'room:',
'SCHEMA',
'name', 'TEXT', 'SORTABLE',
'description', 'TEXT', 'SORTABLE',
'genres', 'TAG', 'SORTABLE',
'numMembers', 'NUMERIC', 'SORTABLE',
'private', 'TAG', 'SORTABLE'
)
} catch (err) { }
console.log(`Connected to Redis at ${config.redisHost}!`)
})
export default client
export {
roomsIndex
}