用Node.js实现一个Redis
项目背景
利用Nodejs来实现一个Node存储服务(Node Dictionary Server)
源码
用到的编程语言和环境
操作系统:Windows10/MacOS
语言:JavaScript
框架:Node
API文档
命令字格式(Json)
命令字格式大小写任意,如ping,PING,Ping。
1.检查版本
type:"ping"
password:"password"
return
type:"ping"
result:"version"
2.检查权限
type:"check"
password:"password"
return
type:"check"
result:"code"
remark:"remark"
3.存入缓存
type:"add"
key:"key"
value:"value"
password:"password"
return
type:"add"
result:"code"
remark:"success"
4.获取元素
type:"get"
key:"key"
password:"password"
return
type:"get"
value:"json"
result:"code"
remark:"remark"
5.寻找元素是否存在
type:"find"
key:"key"
password:"password"
return
type:"find"
value:"code"
remark:"remark"
6.获得所有的Nodis缓存内容
type:"getAll"
password:"password"
remark:"remark"
return
type:"getAll"
result:"code"
value:"value"
7.增加某个key的值
type:"raise"
password:"password"
key:"key"
value:"value"
return
type:"raise"
result:"code"
remark:"remark"
8.减少某个key的值
type:"reduce"
password:"password"
key:"key"
value:"value"
return
type:"reduce"
result:"code"
remark:"remark"
9.开启一段事务
type:"trans"
password:"password"
value:"[{type:reduce,key:a,value:b},{type:getall},etc]"
return
type:"trans"
result:"code"
remark:"success" or "xxx command error" or "other"
10.删除某个缓存的内容
type:"delete"
password:"password"
key:"key"
return
type:"delete"
result:"code"
remark:"remark"
11.更新某个key的值
type:"update"
password:"password"
key:"key"
value:"value"
return
type:"update"
result:"code"
remark:"remark"
12.上锁
type:"setlock"
password:"password"
key:"key"
return
type:"setlock"
result:"code"
remark:"remark"
13.释放锁
type:"getlock"
password:"password"
key:"key"
return
type:"getlock"
result:"code"
remark:"remark""
14.清空锁
type:"clearlock"
password:"password"
return
type:"clearlock"
result:"code"
remark:"remark"
Nodis支持动态配置文件,配置文件示例:
[main]
#Nodis的IP 端口
ip=127.0.0.1
port=13000
[mysql]
#暂时没用
ip=127.0.0.1
name=root
password=123456
dbname=Nodis
[Nodis]
#Nodis的版本号 ping的时候会返回
version=V0.0.1
#用户密码的MD5
password=E10ADC3949BA59ABBE56E057F20F883E
#是否需要密码
usePassword=true
#AESKey=9cd5b4cf899492077b4a125a79af8e76
#AESiv=e6db271db12d4d47
[solid]
#是否固化
isSolid=true
#固化间隔(秒)
setTime=200
#固化的文件路径
logPathMac=/Users/hideyoshi/Desktop/codes/Nodis/
logPathWin=E:/gitee/Nodis/
logPathDef=./
#固化的文件名
logName=solid.json
logNameTemp=solid.json.temp
#useEncrypt=true
[lock]
#在无法得到锁的时候尝试多少次
trys=10
#每次尝试的时间间隔
ms=300
#是否启用锁
uselock=true