这是一篇晚上下班,回家路上的15min短文。
本文主要从功能方面整理下Pika目前的API;同时,系统的可运维性也是一个特别重要的指标,因此我们总结下Pika在高可运维方面的一些特性;
1 API 支持100+命令
支持5大类型接口:String、Hash、List、ZSet、Set, 接口相当丰富;
支持bitset;
支持多个管理命令,可运维性高;
DEL可以秒删、支持所有类型
过期功能支持所有类型(TTL)
Scan接口支持所有数据类型;
ZSet的score支持一定范围的浮点数;
命令列表图例:
√ : 表示该接口完全支持,使用方式与redis没有任何区别;
!: 表示功能支持,但使用或输出与redis有部分差异,需注意;
× : 暂不支持;
1.1 String类型35个接口
| Cmd | set | get | del | scan | exists |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | expire | expireat | persist | ttl | append |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | mget | mset | msetnx | decr | decrby |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | getrange | getset | incr | incrby | incrbyfloat |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | setex | setnx | setrange | strlen | pexpire |
| 状态 | √ | √ | √ | √ | ! |
| Cmd | pexpireat | pttl | type | keys | bitcount |
| 状态 | ! | √ | √ | √ | ! |
| Cmd | bitop | getbit | setbit | bitpos | scan |
| 状态 | ! | ! | ! | ! | ! |
| Cmd | rename | renamenx | psetex | dump | migrate |
|---|---|---|---|---|---|
| 状态 | × | × | × | × | × |
| Cmd | move | object | randomkey | restore | sort |
| 状态 | × | × | × | × | × |
1.2 Hash类型完全支持15个接口
| Cmd | hset | hget | hdel | hsetnx | hmget |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | hmset | hincrby | hincrbyfloat | hexists | hgetall |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | hlen | hkeys | hvals | hscan | hstrlen |
| 状态 | √ | √ | √ | √ | √ |
1.3 List类型支持13个接口
| Cmd | lindex | linsert | llen | lpop | lpush |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | lpushx | lrange | lrem | lset | ltrim |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | rpop | rpoplpush | rpush | ||
| 状态 | √ | √ | √ |
1.4 Set支持全部15个接口
| Cmd | sadd | scard | sdiff | sdiffstore | sinter |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | sinterstore | sismember | smembers | smove | spop |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | srandmember | srem | sunion | sunionstore | sscan |
| 状态 | √ | √ | √ | √ | √ |
spop:spop的随机实际上为伪随机,实现方式为从头部抽取100个元素然后从其中抽取一个进行返回,在pika中不建议使用spop实现真正需要随机返回的需求
srandmember:时间复杂度O(n),耗时较多
1.5 ZSet支持全部20个接口
| Cmd | zadd | zcard | zcount | zincrby | zrange |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | zrangebyscore | zrank | zrem | zremrangebyrank | zremrangebyscore |
| 状态 | √ | √ | √ | √ | √ |
| Cmd | zrevrange | zrevrangebyscore | zrevrank | zscore | zunionstore |
| 状态 | √ | √ | √ | ! | √ |
| Cmd | zinterstore | zscan | zrangebylex | zlexcount | zremrangebylex |
| 状态 | √ | √ | √ | √ | √ |
zscore:目前支持的数据范围是[-10^13, 10^13]。精度支持10e-5(小数点后5位),小于Redis的数据范围
2 完善的主从复制
通过全同步+增量同步实现
BGSave基本秒级导出数据,通过rsync实现快速全同步
增量同步功能是通过Binlog模块实现;
3 高可运维
| Cmd | info | config | client | ping | bgsave |
|---|---|---|---|---|---|
| 状态 | √ | √ | √ | √ | √ |
| Cmd | shutdown | select | monitor | ||
| 状态 | √ | ! | √ |
3.1 高效备份BGSave:
更可控:BGSave BGSaveoff
性能很好(数据基本秒级备份);
备份过程中,IO消耗较低,不需要额外空间;
3.2 权限管理:
主从或者单机支持:
requirepass、userpass;
命令黑名单;
3.3 可配置程度高:
配置文件可配,大部分配置项支持config命令动态配置
配置项包括:
server运行基本配置:目录、线程、端口等;
客户端相关配置;
BinLog配置;
引擎相关配置:memory、cache、compact线程;
3.4 易于监控
info信息丰富:
clients状态;
QPS
当前引擎内存使用;
主从状态;
BinLog状态及配置;
统计信息包括:
db size、keyspace及状态;
3.5 Binlog套件,易于管理、备份及恢复数据
binlog_sync工具:
稳定、实时备份binlog
binlog_sender恢复工具:
基于log文件恢复数据;
基于时间区间恢复数据;
binlog_parser解析工具:
方便查看log;
根据时间过滤log;
3.6 数据迁移工具:
aof_to_pika: 支持通过Redis aof导入pika;
ssdb_to_pika: 支持ssdb导入pika;
pika_to_redis: 支持pika导入redis
4 其他
客户端直接使用Redis客户端;
github有编译安装、设计实现相关的wiki;
我们也提供了编译好的binary,方便大家试用;
联系我们
QQ群:294254078




