SkillAgentSearch skills...

Thinredis

A high performance cache server

Install / Use

/learn @VincentFF/Thinredis
About this skill

Quality Score

0/100

Supported Platforms

JetBrains

README

thinRedis

License: MIT Go Report Card
thinRedis is a high performance standalone cache server written by GO.
It implemented full RESP(Redis Serialization Protocol), so it supports all Redis clients.

Features

  • Support all Clients based on RESP protocol
  • Support String, List, Set, Hash data types
  • Support TTL(Key-Value pair will be deleted after TTL)
  • Full in-memory storage
  • Support atomic operation for some needed commands(like INCR, DECR, INCRBY, MSET, SMOVE, etc.)

Usage

Build thinRedis from source code:

$ go build -o thinRedis main.go

Start thinRedis server:

$ ./thinRedis
[info][server.go:26] 2022/09/08 13:23:50 [Server Listen at  127.0.0.1 : 6379]

Use start option commands or config file to change default settings:

$ ./thinRedis -h
Usage of ./thinredis:
  -config string
        Appoint a config file: such as /etc/redis.conf
  -host string
        Bind host ip: default is 127.0.0.1 (default "127.0.0.1")
  -logdir string
        Set log directory: default is /tmp (default "./")
  -loglevel string
        Set log level: default is info (default "info")
  -port int
        Bind a listening port: default is 6379 (default 6379)

Communication with thinRedis server

Any redis client can communicate with thinRedis server.
For example, use redis-cli to communicate with thinRedis server:

# start a thinRedis server listening at 12345 port
$ ./thinredis -port 12345
[info][server.go:26] 2022/09/08 13:31:47 [Server Listen at  127.0.0.1 : 12345]
                      ...

# start a redis-cli and connect to thinRedis server
$ redis-cli -p 12345
127.0.0.1:12345> PING
PONG
127.0.0.1:12345> MSET key1 a key2 b
OK
127.0.0.1:12345> MGET key1 key2 nonekey
1) "a"
2) "b"
3) (nil)
127.0.0.1:12345> RPUSH list1 1 2 3 4 5
(integer) 5
127.0.0.1:12345> LRANGE list1 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:12345> TYPE list1
list
127.0.0.1:12345> EXPIRE list1 100
(integer) 1
# wait for a few seconds
127.0.0.1:12345> TTL list1
(integer) 93
127.0.0.1:12345> PERSIST list1
(integer) 1
127.0.0.1:12345> TTL list1
(integer) -1

Benchmark

Benchmark result is based on redis-benchmark tool.
Testing on ThinkBook Laptop with AMD Ryzen 7 5800H@3.20GHz, 16.0 GB RAM, and on windows 11 wsl2 ubuntu 22.04 system.

benchmark -c 50 -n 200000 -t get

get: 168634.06 requests per second
set: 167644.59 requests per second
incr: 164068.91 requests per second
lpush: 165152.77 requests per second
rpush: 162601.62 requests per second
lpop: 165152.77 requests per second
rpop: 165562.92 requests per second
sadd: 161420.50 requests per second
hset: 162469.55 requests per second
spop: 168350.17 requests per second

lrange_100: 50620.10 requests per second
lrange_300: 20132.88 requests per second
lrange_500: 12051.10 requests per second
lrange_600: 11992.56 requests per second
mset: 109289.62 requests per second

Support Commands

All commands used as redis commands. You can use any redis client to communicate with thinRedis.

| key | string | list | set | hash | |---------|-------------|--------|-------------|--------------| | del | set | llen | sadd | hdel | | exists | get | lindex | scard | hexists | | keys | getrange | lpos | sdiff | hget | | expire | setrange | lpop | sdirrstore | hgetall | | persist | mget | rpop | sinter | hincrby | | ttl | mset | lpush | sinterstore | hincrbyfloat | | type | setex | lpushx | sismember | hkeys | | rename | setnx | rpush | smembers | hlen | | | strlen | rpushx | smove | hmget | | | incr | lset | spop | hset | | | incrby | lrem | srandmember | hsetnx | | | decr | ltrim | srem | hvals | | | decrby | lrange | sunion | hstrlen | | | incrbyfloat | lmove | sunionstore | hrandfield | | | append | | | |

View on GitHub
GitHub Stars113
CategoryDevelopment
Updated2mo ago
Forks11

Languages

Go

Security Score

100/100

Audited on Jan 15, 2026

No findings