{"id":46099,"library":"redis-drs","title":"Redis DRS","description":"redis-drs is a Redis Dump, Restore and Sync tool built on ioredis, supporting all Redis data types with TTL handling. Current stable version is 1.3.11, with regular releases on npm. It provides CLI commands and a TypeScript-friendly programmatic API. Unlike alternatives, it produces human-readable, line-aligned dumps and can stream data, making it suitable for large-scale backups. It supports dump/restore/sync operations with pattern filtering and configurable bulk sizes.","status":"active","version":"1.3.11","language":"javascript","source_language":"en","source_url":"https://github.com/mohamed-rekiba/redis-drs","tags":["javascript","redis","dump","restore","backup","sync","typescript"],"install":[{"cmd":"npm install redis-drs","lang":"bash","label":"npm"},{"cmd":"yarn add redis-drs","lang":"bash","label":"yarn"},{"cmd":"pnpm add redis-drs","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Core dependency: all Redis operations use ioredis for connection and commands.","package":"ioredis","optional":false}],"imports":[{"note":"ESM-only since v1; CommonJS require may work with Node.js >=12, but TypeScript types assume ESM. Use import syntax.","wrong":"const RedisDRS = require('redis-drs')","symbol":"RedisDRS","correct":"import { RedisDRS } from 'redis-drs'"}],"quickstart":{"code":"import { RedisDRS } from 'redis-drs';\n\nconst redis = new RedisDRS({ path: 'redis://localhost:6379/0' });\n\nasync function dumpAndRestore() {\n  const dumpIter = redis.dump({ filePath: 'dump.csv', pattern: '*' });\n  const total = (await dumpIter.next()).value as number;\n  console.log(`Total keys: ${total}`);\n  for await (const _ of dumpIter) {}\n\n  const restoreIter = await redis.restore({ filePath: 'dump.csv', useTtl: true, bulkSize: 1000 });\n  const totalRestore = (await restoreIter.next()).value as number;\n  console.log(`Restored keys: ${totalRestore}`);\n  for await (const _ of restoreIter) {}\n\n  redis.disconnect();\n}\n\ndumpAndRestore().catch(console.error);","lang":"typescript","description":"Demonstrates dump and restore operations using RedisDRS with pattern filtering and TTL preservation."},"warnings":[{"fix":"Always call .next() once and get the total, then iterate over the rest.","message":"The dump iterator returns total keys as the first yield; must consume it for correct streaming.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Always consume the first value from the async generator.","message":"Restore and sync also yield total keys as first value; forgetting to consume it breaks iteration.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Use 'path' instead of 'uri' in RedisDRS constructor.","message":"Constructor options 'uri' deprecated in favor of 'path'.","severity":"deprecated","affected_versions":">=1.1"},{"fix":"Regenerate dump files using new version.","message":"Dump file format changed between 1.0.x and 1.1.x; incompatible with old dumps.","severity":"breaking","affected_versions":">=1.1,<2.0"},{"fix":"Pass 'targetRedisOptions' object with 'path' instead of a Redis connection.","message":"sync() does not accept a Redis connection instance; must use targetRedisOptions.","severity":"gotcha","affected_versions":">=1.0"},{"fix":"Use 'npx redis-drs' or install globally with 'npm i -g redis-drs'.","message":"CLI commands require global install; local install without -g will not expose 'redis-drs' command.","severity":"gotcha","affected_versions":">=1.0"}],"env_vars":null,"search_vec":"'1.3.11':29 'align':55 'altern':47 'api':45 'backup':68,84 'built':14 'bulk':78 'cli':37 'command':38 'configur':77 'current':25 'data':20,60 'drs':2,5 'dump':9,56,82 'dump/restore/sync':71 'filter':75 'friend':43 'handl':24 'human':51 'human-read':50 'ioredi':16 'javascript':80 'larg':66 'large-scal':65 'line':54 'line-align':53 'make':61 'npm':34 'oper':72 'pattern':74 'produc':49 'programmat':44 'provid':36 'readabl':52 'redi':1,4,8,19,81 'redis-dr':3 'regular':31 'releas':32 'restor':10,83 'scale':67 'size':79 'stabl':26 'stream':59 'suitabl':63 'support':17,70 'sync':12,85 'tool':13 'ttl':23 'type':21 'typescript':42,86 'typescript-friend':41 'unlik':46 'version':27","created_at":"2026-06-07T12:58:16.511007+00:00","updated_at":"2026-06-07T12:58:16.511007+00:00","problems":[{"fix":"Use import { RedisDRS } from 'redis-drs'","cause":"library not imported correctly; CommonJS require leads to wrong export.","error":"TypeError: redis.dump is not a function"},{"fix":"Upgrade Redis server to 2.6+ or use a compatible cloud instance.","cause":"redis server version too old or not enabled; RESTORE requires Redis >=2.6.","error":"Error: ERR unknown command 'RESTORE'"},{"fix":"Use an absolute path or ensure correct working directory.","cause":"File path is relative; script may run from a different working directory.","error":"Error: ENOENT: no such file or directory, open 'dump.csv'"},{"fix":"Ensure redis.disconnect() is called after all async operations finish.","cause":"Redis connection is closed before async iteration completes.","error":"Error: Connection is closed"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/mohamed-rekiba/redis-drs#readme","github":"https://github.com/mohamed-rekiba/redis-drs","docs":null,"changelog":null,"pypi":null,"npm":"redis-drs","openapi_spec":null,"status_page":null,"smithery":null,"categories":["database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}