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

Implement HEXPIRE command #113

Open
kelvinmwinuka opened this issue Sep 11, 2024 · 3 comments
Open

Implement HEXPIRE command #113

kelvinmwinuka opened this issue Sep 11, 2024 · 3 comments
Labels
documentation Improvements or additions to documentation enhancement New feature or request good first issue Good for newcomers

Comments

@kelvinmwinuka
Copy link
Collaborator

kelvinmwinuka commented Sep 11, 2024

Sets the expiration, in seconds, of a field in a hash.
Reference: https://redis.io/docs/latest/commands/hexpire/

Client-Server Spec:

Command File: ./internal/modules/hash/commands.go
Test File: ./internal/modules/hash/commands_test.go

Command: hexpire
Module: constants.HashModule
Categories: contants.HashCategory, constants.WriteCategory, constants.FastCategory
Description: (HEXPIRE key seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]) Sets the expiration, in seconds, of a field in a hash.
Sync: true

NOTE: You may need to change the internal representation of the hash to hold a more complex data type that includes the field's value and expiry time instead of just the value. If the representation is already changed from a previous implementation, use the current one.

Embedded Spec:

Command File: ./echovault/api_hash.go
Test File: ./echovault/api_hash_test.go

Documentation

Add documentation to ./docs/docs/commands/hash/HEXPIRE.mdx

@kelvinmwinuka kelvinmwinuka added documentation Improvements or additions to documentation enhancement New feature or request good first issue Good for newcomers labels Sep 11, 2024
@osteensco
Copy link
Contributor

I'll work on this next.

@osteensco
Copy link
Contributor

Based on our current implementation of expiration elsewhere, I think updating hash to use a struct for the value would be the cleanest approach. When I was looking over the codebase thinking through other options, trying to track expiration elsewhere felt inconsistent and hacky. So I'm thinking something like this -

type HashValue struct {
	Value    interface{}
	ExpireAt time.Time
}

type Hash map[string]HashValue

@kelvinmwinuka
Copy link
Collaborator Author

@osteensco I agree. This is the approach I had in mind as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request good first issue Good for newcomers
Projects
None yet
Development

No branches or pull requests

2 participants