or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

bitmap-operations.mdcore-clients.mdgeneric-operations.mdgeospatial-operations.mdhash-operations.mdindex.mdlist-operations.mdlua-scripting.mdpubsub-operations.mdserver-management.mdserver-operations.mdset-operations.mdsorted-set-operations.mdstack-extensions.mdstream-operations.mdstring-operations.mdtransaction-operations.mdvalkey-support.md

server-management.mddocs/

0

# Server Management

1

2

Server instances that manage Redis state, databases, and connections with support for different Redis-compatible server types. FakeServer provides the central coordination for all Redis operations and maintains consistency across multiple clients.

3

4

## Capabilities

5

6

### Core Server Management

7

8

Central server instance that manages databases, script cache, pub/sub subscribers, and connection state.

9

10

```python { .api }

11

class FakeServer:

12

def __init__(

13

self,

14

version: VersionType = (7,),

15

server_type: ServerType = "redis",

16

config: Optional[Dict[bytes, bytes]] = None

17

): ...

18

19

@property

20

def connected(self) -> bool: ...

21

22

@property

23

def lock(self) -> threading.RLock: ...

24

25

def get_server(self) -> FakeServer: ...

26

def get_next_client_id(self) -> int: ...

27

def flush_all(self) -> None: ...

28

def save(self) -> None: ...

29

def shutdown(self) -> None: ...

30

```

31

32

### TCP Server Implementation

33

34

Full TCP server implementation for network testing with Redis protocol support and multi-threaded connection handling.

35

36

```python { .api }

37

class TcpFakeServer(ThreadingTCPServer):

38

def __init__(

39

self,

40

server_address: Tuple[str, int],

41

server_type: ServerType = "redis",

42

server_version: VersionType = (8, 0),

43

RequestHandlerClass: type = StreamRequestHandler

44

): ...

45

46

def server_bind(self) -> None: ...

47

def server_activate(self) -> None: ...

48

def shutdown(self) -> None: ...

49

def get_server(self) -> FakeServer: ...

50

```

51

52

## Usage Examples

53

54

### Basic Server Usage

55

56

```python

57

import fakeredis

58

59

# Create a server with default settings (Redis 7.0)

60

server = fakeredis.FakeServer()

61

62

# Create clients that share the same server

63

client1 = fakeredis.FakeRedis(server=server)

64

client2 = fakeredis.FakeRedis(server=server)

65

66

# Both clients operate on the same data

67

client1.set('shared_key', 'value')

68

result = client2.get('shared_key') # Returns b'value'

69

```

70

71

### Version Configuration

72

73

```python

74

import fakeredis

75

76

# Configure for specific Redis versions

77

redis_6_server = fakeredis.FakeServer(version=(6, 2, 7))

78

redis_7_server = fakeredis.FakeServer(version=(7, 0, 5))

79

redis_8_server = fakeredis.FakeServer(version=(8, 0))

80

81

# Clients inherit server version behavior

82

client_v6 = fakeredis.FakeRedis(server=redis_6_server)

83

client_v7 = fakeredis.FakeRedis(server=redis_7_server)

84

```

85

86

### Server Type Configuration

87

88

```python

89

import fakeredis

90

91

# Configure for different server types

92

redis_server = fakeredis.FakeServer(server_type="redis")

93

dragonfly_server = fakeredis.FakeServer(server_type="dragonfly")

94

valkey_server = fakeredis.FakeServer(server_type="valkey")

95

96

# Server type affects command behavior and compatibility

97

dragonfly_client = fakeredis.FakeRedis(server=dragonfly_server)

98

# Now supports Dragonfly-specific commands like SADDEX

99

```

100

101

### Server Configuration

102

103

```python

104

import fakeredis

105

106

# Configure server with Redis-style config

107

config = {

108

b'requirepass': b'mypassword',

109

b'maxmemory': b'1gb',

110

b'maxmemory-policy': b'allkeys-lru',

111

b'save': b'900 1 300 10'

112

}

113

114

server = fakeredis.FakeServer(config=config)

115

client = fakeredis.FakeRedis(server=server)

116

117

# Client must authenticate

118

try:

119

client.set('key', 'value') # Will fail without auth

120

except redis.AuthenticationError:

121

pass

122

123

# Authenticate first

124

client.auth('mypassword')

125

client.set('key', 'value') # Now works

126

```

127

128

### TCP Server for Network Testing

129

130

```python

131

import fakeredis

132

import redis

133

import threading

134

import time

135

136

# Start a TCP server on localhost:6380

137

tcp_server = fakeredis.TcpFakeServer(

138

('localhost', 6380),

139

server_type="redis",

140

server_version=(7, 0)

141

)

142

143

# Run server in background thread

144

server_thread = threading.Thread(target=tcp_server.serve_forever)

145

server_thread.daemon = True

146

server_thread.start()

147

148

# Connect with regular redis-py client

149

real_client = redis.Redis(host='localhost', port=6380, decode_responses=True)

150

151

# Test network operations

152

real_client.set('network_key', 'network_value')

153

result = real_client.get('network_key')

154

print(f"Result from TCP server: {result}")

155

156

# Shutdown server

157

tcp_server.shutdown()

158

```

159

160

### Multiple Isolated Servers

161

162

```python

163

import fakeredis

164

165

# Create isolated servers for different test scenarios

166

test_server_1 = fakeredis.FakeServer()

167

test_server_2 = fakeredis.FakeServer()

168

169

# Each server maintains separate data

170

client_1a = fakeredis.FakeRedis(server=test_server_1)

171

client_1b = fakeredis.FakeRedis(server=test_server_1) # Shares with 1a

172

173

client_2a = fakeredis.FakeRedis(server=test_server_2) # Isolated from server 1

174

175

# Operations on different servers are independent

176

client_1a.set('key', 'value1')

177

client_2a.set('key', 'value2')

178

179

print(client_1b.get('key').decode()) # 'value1' (same server as 1a)

180

print(client_2a.get('key').decode()) # 'value2' (different server)

181

```

182

183

### Server State Management

184

185

```python

186

import fakeredis

187

188

server = fakeredis.FakeServer()

189

client = fakeredis.FakeRedis(server=server)

190

191

# Add some data

192

client.set('key1', 'value1')

193

client.set('key2', 'value2')

194

client.lpush('list', 'item1', 'item2')

195

196

# Check server connection state

197

print(f"Server connected: {server.connected}") # True

198

199

# Flush all data

200

server.flush_all()

201

print(f"Keys after flush: {client.keys()}") # []

202

203

# Shutdown server (disconnects all clients)

204

server.shutdown()

205

print(f"Server connected: {server.connected}") # False

206

```

207

208

### Server with Custom Database Count

209

210

```python

211

import fakeredis

212

213

# Create server with specific database configuration

214

config = {

215

b'databases': b'32' # Support 32 databases (default is 16)

216

}

217

218

server = fakeredis.FakeServer(config=config)

219

220

# Create clients for different databases

221

client_db0 = fakeredis.FakeRedis(server=server, db=0)

222

client_db15 = fakeredis.FakeRedis(server=server, db=15)

223

client_db31 = fakeredis.FakeRedis(server=server, db=31)

224

225

# Each database is isolated

226

client_db0.set('key', 'db0_value')

227

client_db15.set('key', 'db15_value')

228

229

print(client_db0.get('key').decode()) # 'db0_value'

230

print(client_db15.get('key').decode()) # 'db15_value'

231

print(client_db31.get('key')) # None (not set)

232

```