# Sharpdis **Repository Path**: zhang-haoww/sharpdiss ## Basic Information - **Project Name**: Sharpdis - **Description**: 基于c# 实现的redis 服务端,使用了 多路复用 跳表 等技术 - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 2 - **Created**: 2022-11-13 - **Last Updated**: 2024-07-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: Redis, redis-server, dotnetty, dotNET ## README # Sharpdis ![](https://img.shields.io/badge/mit-Passing-green) ![](https://img.shields.io/badge/c%23-9.0-green) - 本项目目的使用实现c#来实现redis-server ,项目使用.net 8+dotnetty 实现。 - [github](https://github.com/adminoryuan/Sharpdis) - # 基准测试对比 - 性能可以达到redis的75% - # redis ``` java ====== PING_INLINE ====== 100000 requests completed in 1.19 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.33% <= 1 milliseconds 100.00% <= 1 milliseconds 84033.61 requests per second ====== PING_BULK ====== 100000 requests completed in 1.18 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.67% <= 1 milliseconds 100.00% <= 1 milliseconds 85034.02 requests per second ====== SET ====== 100000 requests completed in 1.19 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.68% <= 1 milliseconds 99.99% <= 2 milliseconds 100.00% <= 2 milliseconds 83822.30 requests per second ====== GET ====== 100000 requests completed in 1.17 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.23% <= 1 milliseconds 100.00% <= 1 milliseconds 85689.80 requests per second ====== INCR ====== 100000 requests completed in 1.16 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.71% <= 1 milliseconds 99.95% <= 2 milliseconds 99.95% <= 7 milliseconds 99.96% <= 8 milliseconds 99.97% <= 9 milliseconds 99.97% <= 10 milliseconds 99.98% <= 11 milliseconds 99.98% <= 12 milliseconds 99.99% <= 13 milliseconds 99.99% <= 14 milliseconds 99.99% <= 15 milliseconds 100.00% <= 16 milliseconds 100.00% <= 17 milliseconds 86132.64 requests per second ====== LPUSH ====== 100000 requests completed in 1.20 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.39% <= 1 milliseconds 99.85% <= 2 milliseconds 99.86% <= 3 milliseconds 99.89% <= 4 milliseconds 99.90% <= 5 milliseconds 99.93% <= 6 milliseconds 99.93% <= 7 milliseconds 99.94% <= 8 milliseconds 99.94% <= 9 milliseconds 99.95% <= 10 milliseconds 99.99% <= 11 milliseconds 100.00% <= 12 milliseconds 100.00% <= 13 milliseconds 83612.04 requests per second ====== RPUSH ====== 100000 requests completed in 1.16 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.92% <= 1 milliseconds 100.00% <= 1 milliseconds 86206.90 requests per second ====== LPOP ====== 100000 requests completed in 1.18 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.75% <= 1 milliseconds 100.00% <= 2 milliseconds 85034.02 requests per second ====== RPOP ====== 100000 requests completed in 1.17 seconds 50 parallel clients 3 bytes payload keep alive: 1 99.65% <= 1 milliseconds 99.92% <= 2 milliseconds 99.93% <= 3 milliseconds 99.95% <= 7 milliseconds 99.96% <= 8 milliseconds 100.00% <= 8 milliseconds 85689.80 requests per second ``` - # sharpdis ``` java ====== PING_INLINE ====== 100000 requests completed in 3.27 seconds 50 parallel clients 3 bytes payload keep alive: 1 17.91% <= 1 milliseconds 88.80% <= 2 milliseconds 99.78% <= 3 milliseconds 99.89% <= 7 milliseconds 99.92% <= 8 milliseconds 99.94% <= 80 milliseconds 99.95% <= 81 milliseconds 99.95% <= 161 milliseconds 99.95% <= 162 milliseconds 99.96% <= 239 milliseconds 99.97% <= 240 milliseconds 99.99% <= 241 milliseconds 100.00% <= 241 milliseconds 30543.68 requests per second ====== PING_BULK ====== 100000 requests completed in 1.59 seconds 50 parallel clients 3 bytes payload keep alive: 1 96.50% <= 1 milliseconds 100.00% <= 2 milliseconds 100.00% <= 2 milliseconds 62932.66 requests per second ====== SET ====== 100000 requests completed in 1.70 seconds 50 parallel clients 3 bytes payload keep alive: 1 88.65% <= 1 milliseconds 99.92% <= 2 milliseconds 99.95% <= 3 milliseconds 100.00% <= 3 milliseconds 58962.27 requests per second ====== GET ====== 100000 requests completed in 1.62 seconds 50 parallel clients 3 bytes payload keep alive: 1 94.57% <= 1 milliseconds 100.00% <= 1 milliseconds 61766.52 requests per second ====== INCR ====== 100000 requests completed in 1.60 seconds 50 parallel clients 3 bytes payload keep alive: 1 95.74% <= 1 milliseconds 100.00% <= 2 milliseconds 100.00% <= 2 milliseconds 62344.14 requests per second ====== LPUSH ====== 100000 requests completed in 1.68 seconds 50 parallel clients 3 bytes payload keep alive: 1 92.12% <= 1 milliseconds 98.84% <= 2 milliseconds 99.94% <= 3 milliseconds 99.95% <= 7 milliseconds 99.99% <= 8 milliseconds 100.00% <= 8 milliseconds 59630.29 requests per second ====== RPUSH ====== 100000 requests completed in 1.67 seconds 50 parallel clients 3 bytes payload keep alive: 1 94.30% <= 1 milliseconds 99.01% <= 2 milliseconds 99.90% <= 3 milliseconds 99.90% <= 5 milliseconds 99.93% <= 6 milliseconds 99.94% <= 7 milliseconds 99.96% <= 8 milliseconds 100.00% <= 8 milliseconds 59844.41 requests per second ====== LPOP ====== 100000 requests completed in 1.60 seconds 50 parallel clients 3 bytes payload keep alive: 1 94.84% <= 1 milliseconds 99.98% <= 2 milliseconds 100.00% <= 2 milliseconds 62460.96 requests per second ====== RPOP ====== 100000 requests completed in 1.59 seconds 50 parallel clients 3 bytes payload keep alive: 1 96.20% <= 1 milliseconds 100.00% <= 1 milliseconds 62932.66 requests per second ====== SADD ====== 100000 requests completed in 1.67 seconds 50 parallel clients 3 bytes payload keep alive: 1 89.85% <= 1 milliseconds 99.98% <= 2 milliseconds 100.00% <= 2 milliseconds 59772.86 requests per second ====== HSET ====== 100000 requests completed in 1.70 seconds 50 parallel clients 3 bytes payload keep alive: 1 91.00% <= 1 milliseconds 99.85% <= 2 milliseconds 100.00% <= 2 milliseconds 58997.05 requests per second ====== SPOP ====== 100000 requests completed in 1.62 seconds 50 parallel clients 3 bytes payload keep alive: 1 95.07% <= 1 milliseconds 99.94% <= 2 milliseconds 99.95% <= 3 milliseconds 99.96% <= 4 milliseconds 100.00% <= 4 milliseconds 61881.19 requests per second ====== LPUSH (needed to benchmark LRANGE) ====== 100000 requests completed in 1.66 seconds 50 parallel clients 3 bytes payload keep alive: 1 93.67% <= 1 milliseconds 99.09% <= 2 milliseconds 99.95% <= 6 milliseconds 100.00% <= 6 milliseconds 60204.70 requests per second ``` # 实现功能 - # 数据类型 - [x] String - [x] Set - [x] List - [x] hash - [x] zset - # 通信协议 - [x] RESP 实现 - # 网络模型 - [x] 采用reactor模型 - # 持久化 - [x] Aof - [ ] RDB - # 集群 - [ ] 使用raft 构建集群 # 如何使用 - 下载本仓库 - 运行Sharpdis.app 屏幕输出Sharpdis 则表示服务端运行成功 - 打开redis-cli 即可链接服务端