Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add RDB_OPCODE_SLOT_INFO support for Redis 7.4 #881

Open
wants to merge 1 commit into
base: v4
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ RedisShake is a powerful tool for Redis data transformation and migration, offer

1. **Zero Downtime Migration**: Enables seamless data migration without data loss or service interruption, ensuring continuous operation during the transfer process.

2. **Redis Compatibility**: Supports Redis 2.8 to 7.2, across standalone, master-slave, sentinel, and cluster deployments.
2. **Redis Compatibility**: Supports Redis 2.8 to 7.4, across standalone, master-slave, sentinel, and cluster deployments.

3. **Cloud Service Integration**: Seamlessly works with Redis-like databases from major cloud providers:
- Alibaba Cloud: [ApsaraDB for Redis](https://www.alibabacloud.com/product/apsaradb-for-redis), [Tair](https://www.alibabacloud.com/product/tair)
Expand Down
11 changes: 9 additions & 2 deletions internal/rdb/rdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ import (
)

const (
kFlagFunction2 = 245 // function library data
kFlagFunction = 246 // old function library data for 7.0 rc1 and rc2
kFlagSlotInfo = 244 // (Redis 7.4) RDB_OPCODE_SLOT_INFO: slot info
kFlagFunction2 = 245 // RDB_OPCODE_FUNCTION2: function library data
kFlagFunction = 246 // RDB_OPCODE_FUNCTION_PRE_GA: old function library data for 7.0 rc1 and rc2
kFlagModuleAux = 247 // RDB_OPCODE_MODULE_AUX: Module auxiliary data.
kFlagIdle = 248 // RDB_OPCODE_IDLE: LRU idle time.
kFlagFreq = 249 // RDB_OPCODE_FREQ: LFU frequency.
Expand Down Expand Up @@ -124,6 +125,12 @@ func (ld *Loader) parseRDBEntry(ctx context.Context, rd *bufio.Reader) {
typeByte := structure.ReadByte(rd)
log.Debugf("RDB type byte is: [%d]", typeByte)
switch typeByte {
case kFlagSlotInfo:
_ = structure.ReadLength(rd) // slot_id
_ = structure.ReadLength(rd) // slot_size
_ = structure.ReadLength(rd) // expires_slot_size
case kFlagFunction, kFlagFunction2:
log.Panicf("function library data not supported, need PR to support")
case kFlagModuleAux:
moduleId := structure.ReadLength(rd) // module id
moduleName := types.ModuleTypeNameByID(moduleId)
Expand Down
Loading