-
Notifications
You must be signed in to change notification settings - Fork 1.2k
pika 支持的redis接口及兼容情况
pika当前支持的redis接口 pika支持redis五种类型(分别为string、hash、list、set、zset)的接口,先列出其对redis的五种数据结构兼容统计。
图标 | 含义 |
---|---|
o | 该接口完全支持,使用方式与redis没有任何区别 |
! | 功能支持,但使用或输出与redis有部分差异,需注意 |
× | 当前还未支持 |
接口 | DEL | DUMP | EXISTS | EXPIRE | EXPIREAT | KEYS | MIGRATE | MOVE | OBJECT |
---|---|---|---|---|---|---|---|---|---|
状态 | o | x | o | o | o | o | x | x | x |
接口 | PERSIST | PEXPIRE | PEXPIREAT | PTTL | PANDOMKEY | RENAME | RENAMENX | RESTORE | SORT |
状态 | o | ! | ! | o | x | x | x | x | x |
接口 | TOUCH | TTL | TYPE | UNLINK | WAIT | SCAN | |||
状态 | x | o | ! | x | x | ! |
备注:
-
PEXPIRE:无法精确到毫秒,底层会自动截断按秒级别进行处理;
-
PEXPIREAT:无法精确到毫秒,底层会自动截断按秒级别进行处理;
-
SCAN:会顺序迭代当前db的快照,由于pika允许重名五次,所以scan有优先输出顺序,依次为:string -> hash -> list -> zset -> set;
-
TYPE:另外由于pika允许重名五次,所以type有优先输出顺序,依次为:string -> hash -> list -> zset -> set,如果这个key在string中存在,那么只输出sting,如果不存在,那么则输出hash的,依次类推。
-
KEYS: KEYS命令支持参数支持扫描指定类型的数据,用法如 "keys * [string, hash, list, zset, set]"
接口 | APPEND | BITCOUNT | BITFIELD | BITOP | BITPOS | DECR | DECRBY | GET | GETBIT |
---|---|---|---|---|---|---|---|---|---|
状态 | o | o | x | ! | o | o | o | o | ! |
接口 | GETRANGE | GETSET | INCR | INCRBY | INCRBYFLOAT | MGET | MSET | MSETNX | STRLEN |
状态 | o | o | o | o | o | o | o | o | o |
接口 | PSETEX | SET | SETBIT | SETEX | SETNX | SETRANGE | |||
状态 | x | o | ! | o | o | o |
备注:
- BIT操作:与Redis不同,Pika的bit操作范围为2^18
接口 | HDEL | HEXISTS | HGET | HGETALL | HINCRBY | HINCRBYFLOAT | HKEYS | HLEN | HMGET | HMSET |
---|---|---|---|---|---|---|---|---|---|---|
状态 | o | o | o | o | o | o | o | o | o | o |
接口 | HSET | HSETNX | HVALS | HSCAN | HSTRLEN | |||||
状态 | o | o | o | o | o |
接口 | LINDEX | LINSERT | LLEN | LPOP | LPUSH | LPUSHX | LRANGE | LREM | LSET | LTRIM |
---|---|---|---|---|---|---|---|---|---|---|
状态 | o | o | o | o | o | o | o | o | o | o |
接口 | RPOP | RPOPLPUSH | RPUSH | RPUSHX | BLPOP | BRPOP | BRPOPLPUSH | |||
状态 | o | o | o | o | x | x | x |
接口 | SADD | SCARD | SDIFF | SDIFFSTORE | SINTER | SINTERSTORE | SISMEMBER | SMEMBERS | SMOVE | SPOP |
---|---|---|---|---|---|---|---|---|---|---|
状态 | o | o | o | o | o | o | o | o | o | o |
接口 | SRANDMEMBER | SREM | SUNION | SUNIONSTORE | SSCAN | |||||
状态 | ! | o | o | o | o |
备注:
- SRANDMEMBER:时间复杂度O( n ),耗时较多
接口 | ZADD | ZCARD | ZCOUNT | ZINCRBY | ZRANGE | ZRANGEBYSCORE | ZRANK | ZREM | ZREMRANGEBYRANK | ZREMRANGEBYSCORE |
---|---|---|---|---|---|---|---|---|---|---|
状态 | o | o | o | o | o | o | o | o | o | o |
接口 | ZREVRANGE | ZREVRANGEBYSCORE | ZREVRANK | ZSCORE | ZUNIONSTORE | ZINTERSTORE | ZSCAN | ZRANGEBYLEX | ZLEXCOUNT | ZREMRANGEBYLEX |
状态 | o | o | o | ! | o | o | o | o | o | o |
备注:
- ZSCORE:目前支持的数据范围是[-10^13, 10^13]。精度支持10e-5(小数点后5位),小于Redis的数据范围;
接口 | PFADD | PFCOUNT | PFMERGE |
---|---|---|---|
状态 | o | o | o |
备注:
- 50w以内误差均小于1%, 100w以内误差小于3%, 但付出了时间代价.
接口 | GEOADD | GEODIST | GEOHASH | GEOPOS | GEORADIUS | GEORADIUSBYMEMBER |
---|---|---|---|---|---|---|
状态 | o | o | o | o | o | o |
备注:
- GEO实现依赖
Sorted Sets
数据结构, 所以HASH位数只有13位, 与Redis精度有所差距. -
GEORADIUS
和GEORADIUSBYMEMBER
默认输出是无序的.
接口 | INFO | CONFIG | CLIENT | PING | BGSAVE | SHUTDOWN | SELECT |
---|---|---|---|---|---|---|---|
状态 | ! | ! | ! | o | o | o | ! |
备注:
-
info:info支持全部输出,也支持匹配形式的输出,例如可以通过info stats查看状态信息,需要注意的是key space与redis不同,pika对于key space的展示选择了分类型展示而非redis的分库展示(因为pika没有库),pika对于key space的统计是被动的,需要手动触发,然后pika会在后台进行统计,pika的key space统计是精确的。触发方式为执行:keyspace命令即可,然后pika会在后台统计,此时可以使用:keyspace readonly命令来进行查看,readonly参数可以避免反复进行统计,如果当前数据为0,则证明还在统计中;
-
config:当前config仅仅支持个别参数的get、set,不支持rewrite;
-
client:当前client命令支持client list及client kill,client list显示的内容少于redis;
-
select:该命令为摆设,可以执行,会返回成功,但无任何效果;
-
ping: 该命令仅支持无参数使用,即使用
PING
,客户端返回PONG
.
-
重名问题:由于pika每个类型独立运作, 所以允许重名。例如在key abc在string中存在的时候也同样允许在hash中存在,一个key最多重名5次(5大类型),但在同一接口中是无法重名的。所以建议在使用的时候对于不同类型不要使用完全相同的key;
-
长度问题:pika kv的key value长度没有限制,其他数据结构hash zset set list 的key长度限制255, value没有限制。
-
分库问题:pika不支持redis的多个库功能(db0,db1,db2),对于pika只有一个库,也就是db0,select命令在pika中可以执行,但实际上没有任何效果。
-
数据展示:pika对于keyspace的展示选择了分类型展示而非redis的分库展示(因为pika没有分库概念),pika对于keyspace的统计是被动的,需要手动触发并不会立即输出,命令为:info keyspace [ 0|1 ],默认为0不触发,pika的keyspace统计是精确的。
- 安装使用
- 支持的语言和客户端
- 当前支持的Redis接口以及兼容情况
- 配置文件说明
- 数据目录说明
- info信息说明
- 部分管理指令说明
- 差异化命令
- Pika Sharding Tutorials
- Pika订阅
- 配合sentinel(哨兵)实现pika自动容灾
- 如何升级到Pika3.0
- 如何升级到Pika3.1或3.2
- Pika多库版命令、参数变化参考
- Pika分片版本命令
- 副本一致性使用说明
- Pika内存使用
- Pika最佳实践
- 整体架构
- 线程模型
- 全同步
- 增量同步
- 副本一致性
- 快照式备份
- 锁的应用
- nemo存储引擎数据格式
- blackwidow存储引擎数据格式
- Pika源码学习--pika的通信和线程模型
- Pika源码学习--pika的PubSub机制
- Pika源码学习--pika的命令执行框架
- Pika源码学习--pika和rocksdb的对接
- pika-NoSQL原理概述
- pika在codis中的探索
- Pika 笔记
- pika 主从同步原理