diff --git a/packages/redis_client/lib/src/redis_client.dart b/packages/redis_client/lib/src/redis_client.dart index d6b4fab9..9c92ec56 100644 --- a/packages/redis_client/lib/src/redis_client.dart +++ b/packages/redis_client/lib/src/redis_client.dart @@ -170,8 +170,19 @@ class RedisClient { /// Set the value of a key. /// Equivalent to the `SET` command. /// https://redis.io/commands/set - Future set({required String key, required String value}) { - return execute(['SET', key, value]); + /// + /// If [ttl] is provided, the key will expire after the specified duration. + Future set({ + required String key, + required String value, + Duration? ttl, + }) { + return execute([ + 'SET', + key, + value, + if (ttl != null) ...['EX', ttl.inSeconds], + ]); } /// Gets the value of a key. diff --git a/packages/redis_client/test/src/redis_client_test.dart b/packages/redis_client/test/src/redis_client_test.dart index f75ea9c6..77699f02 100644 --- a/packages/redis_client/test/src/redis_client_test.dart +++ b/packages/redis_client/test/src/redis_client_test.dart @@ -183,6 +183,8 @@ void main() { test('completes', () async { const key = 'key'; const value = 'value'; + const ttl = Duration(seconds: 1); + await expectLater(client.get(key: key), completion(isNull)); await expectLater(client.set(key: key, value: value), completes); await expectLater(client.get(key: key), completion(equals(value))); @@ -194,6 +196,13 @@ void main() { await expectLater(client.get(key: key), completion(equals(value))); await expectLater(client.unlink(key: key), completes); await expectLater(client.get(key: key), completion(isNull)); + await expectLater( + client.set(key: key, value: value, ttl: ttl), + completes, + ); + await expectLater(client.get(key: key), completion(equals(value))); + await Future.delayed(ttl); + await expectLater(client.get(key: key), completion(isNull)); }); test(