从 Redis 迁移到 SSDB

PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上.

工具

tools 目录中的 redis-import.php PHP 脚本可以用来将 Redis 服务器上的数据, 拷贝到 SSDB 服务器上.

用法:

php redis-import.php redis_host redis_port redis_db ssdb_host ssdb_port

参数:

  • redis_host: Redis 运行所在的 IP 或者主机名
  • redis_port: Redis 监听的端口
  • redis_db: Redis 的 DB 编号
  • ssdb_host: SSDB 运行所在的 IP 或者主机名
  • ssdb_port: SSDB 监听的端口

请确保你的 PHP Redis 模块 https://github.com/nicolasff/phpredis 已经安装.

Redis 工具的支持

Tool Supported
redis-cli 支持
Twemproxy 支持
Sentinel 不支持

SSDB 和 Redis 命令对照表

SSDB 支持 Redis 协议和客户端, 所以你可以使用 Redis 的客户端来连接 SSDB 进行操作.

但是, 如果你想使用 SSDB 的客户端, 你可能需要下面的命令对照表.

Key-Value

Redis SSDB
get get
set set
setex setx(for kv type only)
del del
incr/incrBy incr
decr/decrBy decr
mget/getMultiple multi_get
setMultiple multi_set
del(multiple) multi_del
keys keys(for kv type only)
getset getset
setnx setnx
exists exists
ttl ttl
expire expire
getbit getbit
setbit setbit
bitcount redis_bitcount, countbit
strlen strlen
getrange getrange

请非常细心地阅读此处的说明:

  • 对于 Redis, substr 命令早已经被废弃, 所以你不要使用 substr 命令在 Redis 客户端(当然, 你__可以__这么做, 但你__必须不__这么做)
  • 如果你还想着 Redis, 那么就用 getrange 命令
  • 注意这两者的区别: substr(start, size), getrange(start, end)
  • 当 size 是负数时, 如果你不熟悉 PHP 语言, 那么你会觉得有些奇怪
  • SSDB 的 substr 命令的描述这 这里

Key-Map(Hash)

Redis SSDB
del(not supported) hclear
hget hget
hset hset
hdel, hmdel hdel, multi_hdel
hIncrBy hincr
hDecrBy hdecr
hKeys hkeys
hVals hscan
hMGet multi_hget
hMSet multi_hset
hLen hsize
hExists hexists
keys hlist(for hash type only)

如果你想删除整个 hash, 那么你就必须使用 SSDB 的客户端来执行 hclear 命令, 用 Redis 的客户端是删除不了整个 hash 的.

Key-Zset

Redis SSDB
del(not supported) zclear
zScore zget
zAdd zset
zRem zdel
zRange zrange
zRevRange zrrange
zRangeByScore zscan
zRevRangeByScore zrscan
zIncrBy zincr
zDecrBy zdecr
zCount zcount
zSum zsum
zAvg zavg
zCard zsize
zRank zrank
zRemRangeByRank zremrangebyrank
zRemRangeByScore zremrangebyscore
keys zlist(for zset type only)

如果你想删除整个 zset, 那么你就必须使用 SSDB 的客户端来执行 zclear 命令, 用 Redis 的客户端是删除不了整个 zset 的.

Key-List(Queue)

Redis SSDB
del(not supported) qclear
llen/lsize qsize
lpush qpush_front
rpush qpush_back
lpop qpop_front
rpop qpop_back
lrange qslice
lindex, lget qget
lset qset
keys qlist(for queue/list type only)

如果你想删除整个 list, 那么你就必须使用 SSDB 的客户端来执行 qclear 命令, 用 Redis 的客户端是删除不了整个 list 的.