simpredis

command module
v0.0.0-...-262ee3b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 18, 2023 License: MIT Imports: 4 Imported by: 0

README

simpredis

license example workflow Coverage Status Go Report Card

Simpredis is a high performance In-Memory Database written by golang.

Features

  • RESP(REdis Serialization Protocol) implemented, support interaction with any standard redis-client
  • Support string, list, set, hash, bitmap data structure
  • Time To Live(TTL), based on timewheel
  • Atomic operations for some command, e.g., mset, incr, incrbyfloat.
  • Command function as same as redis
  • Concurrent execution
  • Connection logs

Supported Commands

string list set hash key connection
set lpush sadd hget ttl ping
setex lpop scard hset expire echo
setnx rpush smembers hlen expireat
getset rpop srem hkeys persist
get lindex sismember hvals del
mset lrange sinter hgetall exists
mget llen sinterstore hmset rename
msetnx lset spop hmget renamenx
incr lpushx srandmember hexists type
incrby rpushx sdiff hdel
incrbyfloat rpoplpush sdiffstore hsetnx
decr linsert smove hincrby
decrby lrem sunion hincrbyfloat
strlen ltrim sunionstore
append
setbit
getbit
bitcount
bitop
setrange
getrange

Performance

environment

  • OS: Ubuntu 20.04.2 VM, Linux 5.15.0
  • CPU: i9-12900K * 8, 3.2 GHz
  • RAM: 6GB in VM

benchmark

  • redis-benchmark
# simpredis
PING_INLINE: 244498.77 requests per second
PING_BULK: 253164.55 requests per second
SET: 255754.47 requests per second
GET: 255754.47 requests per second
INCR: 255754.47 requests per second
LPUSH: 246305.42 requests per second
RPUSH: 251889.16 requests per second
LPOP: 248756.22 requests per second
RPOP: 248138.95 requests per second
SADD: 254452.92 requests per second
HSET: 243309.00 requests per second
SPOP: 256410.27 requests per second
LPUSH (needed to benchmark LRANGE): 244498.77 requests per second
LRANGE_100 (first 100 elements): 142247.52 requests per second
LRANGE_300 (first 300 elements): 62853.55 requests per second
LRANGE_500 (first 450 elements): 47080.98 requests per second
LRANGE_600 (first 600 elements): 35536.61 requests per second
MSET (10 keys): 229357.80 requests per second

# redis
PING_INLINE: 240963.86 requests per second
PING_BULK: 238663.48 requests per second
SET: 238663.48 requests per second
GET: 263157.91 requests per second
INCR: 244498.77 requests per second
LPUSH: 247524.75 requests per second
RPUSH: 244498.77 requests per second
LPOP: 245098.05 requests per second
RPOP: 236966.83 requests per second
SADD: 243309.00 requests per second
HSET: 244498.77 requests per second
SPOP: 239808.16 requests per second
LPUSH (needed to benchmark LRANGE): 245098.05 requests per second
LRANGE_100 (first 100 elements): 178890.88 requests per second
LRANGE_300 (first 300 elements): 72674.41 requests per second
LRANGE_500 (first 450 elements): 51413.88 requests per second
LRANGE_600 (first 600 elements): 42698.55 requests per second
MSET (10 keys): 267379.66 requests per second

Usage

go build
./simpredis

Server will listen at port 7000. Config can be modified in simpredis.conf.

Interaction with standard redis-cli
$ redis-cli -p 7000
127.0.0.1:7000> set k v
OK
127.0.0.1:7000> get k
"v"
127.0.0.1:7000>

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
redis
utils

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL