-
Notifications
You must be signed in to change notification settings - Fork 49
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
Introduce Valkey client overview #164
base: main
Are you sure you want to change the base?
Conversation
asafpamzn
commented
Aug 17, 2024
- Created a new document that provides an overview of recommended Valkey clients across various programming languages.
- Included mandatory features required for each client, such as Cluster Support and TLS/SSL Support.
- Detailed advanced features supported by the clients, including:
- Read from Replica
- Exponential Backoff to Prevent Storm
- Valkey Version Compatibility
- PubSub State Restoration
- Cluster Scan
- Latency-Based Read from Replica
- Client-Side Caching
- Added feature comparison tables for each programming language (Python, JavaScript/Node.js, Java, Go, PHP, C#) to highlight the unique capabilities of each client.
- Placeholder sections for Ruby and other languages marked as TODO for future updates.
- References section includes a link to the official Valkey documentation.
@asafpamzn Thank you for that initiative. it was discussed several times that we need some feature support metric for known clients. Several high level remarks:
|
@ranshid , thanks for the feedback.
|
@ranshid , @zuiderkwast , I updated the PR according to your comments. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like the summary overall. @rueian @yangbodong22011 Would also be great if you can review this.
I think we can put all clients
|
I like this idea. If the table is large, it can be messy to maintain it as Markdown. If we have one JSON file per client (like we have for the old redis clients still in this repo), we could add this information in the JSON files and render the table on the website. |
agree👍 |
I don't agree, usually customers are first choosing the language and next the client, the client is a small part at the application, basically a driver. I don't think that the average reader will care about clients in other languages. I do agree that for the valkey maintainers it is a better view. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We need to decide where to put this document.
- Created a new document that provides an overview of recommended Valkey clients across various programming languages. - Included mandatory features required for each client, such as Cluster Support and TLS/SSL Support. - Detailed advanced features supported by the clients, including: - Read from Replica - Exponential Backoff to Prevent Storm - Valkey Version Compatibility - PubSub State Restoration - Cluster Scan - Latency-Based Read from Replica - Client-Side Caching - Added feature comparison tables for each programming language (Python, JavaScript/Node.js, Java, Go, PHP, C#) to highlight the unique capabilities of each client. - Placeholder sections for Ruby and other languages marked as TODO for future updates. - References section includes a link to the official Valkey documentation. Signed-off-by: asafpamzn <[email protected]>
Co-authored-by: Avi Fenesh <[email protected]> Signed-off-by: asafpamzn <[email protected]>
…#159) Update cluster-slots docs ref: valkey-io/valkey#265 --------- Signed-off-by: Roshan Khatri <[email protected]> Signed-off-by: Madelyn Olson <[email protected]> Co-authored-by: Madelyn Olson <[email protected]> Signed-off-by: asafpamzn <[email protected]>
Add documentation for the new `info stats` fields. --------- Signed-off-by: Uri Yagelnik <[email protected]> Signed-off-by: asafpamzn <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I finally had some time to look and think about this.
I have added some comment on some random lines of code, just to get separate threads for each of them.
Did we discuss information about which Valkey version each client supports, or works with, or is tested with? Have we considered some field like this?
"tested-with": ["7.2.7", "8.0.2"]
"github":"https://github.com/valkey-io/valkey-go", | ||
"installation": "go get github.com/valkey-io/valkey-go", | ||
"language":"go", | ||
"package_size": "14.5M", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Someone (don't remember who) said that we should skip "version", since it is likely to become outdated if client maintainers don't update this information regularly. Isn't it the same situation with package size? A package size is for a specific version, so they're connected.
Even the information about supported features is describing a particular version of each client, and this too may become outdated.
I believe this is a risk with almost all information we put in these files. It's also what happened with the old JSON files. I don't have a solution to this problem, but I have an idea. We can show a timestamp of when the page was last modified. Then the readers can judge for themselves if the information is relevant or outdated.
Or maybe better than last-modified, we can include the date when the last version was released. This is what Wikipedia does in the info-box about software, such as Valkey. If it is a long time ago, it either means that the client is dead or the information is outdated. Possibly, we can even hide clients automatically if it hasn't been updated for years.
So, my idea is that we include two fields such as
"version": "1.0.3",
"version-released": "2024-12-01",
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@valkey-io/client-maintainers please share your thoughts, mainly regarding how to be resilient to outdated information about clients.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree remove package_size field, this is what package download sites like maven and pypi should do.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@yangbodong22011 thanks, and what about version and date? Skip it or include it?
IMO without version, readers can't know if the features supported are about the latest version and if this information is updated or not.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We discussed this in a meeting with client maintainers and it was mentioned that we'll probably never want to show the old Redis clients, so I think we should simply delete these old JSON files. It's always possible to find them in the git history if we ever want them again.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Regarding the paths for these new files, I think it should be clients/go/valkey-go.json
. The client-page-client
shouldn't be in the path. This is information about clients and it can theoretically be used for other things, not tied to be used a specific website page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yup, if we're fine with deleting the old Redis clients it sounds like the right thing anyway
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I'm fine with deleting it. It's not like it's gone forever. It's in the git history if we want it back.
Maybe open a separate PR to delete it? We can merge it before this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Will do
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merged. :)
"latency_based_read_from_replica": false, | ||
"AZ_based_read_from_replica": false, | ||
"client_side_caching": true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should describe the fields of these JSON files in the README file of this repo, or possibly in a separate clients/README.md
if it's too much information for the main README.
"client_side_caching": true, | ||
"client_capa_redirect": false, | ||
"persistent_connection_pool": true | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another field I think we should have is "license". We can use the SPDX License Identifier as listed on this page: https://spdx.org/licenses/ as the value.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added 👍
Chat discussion TLDR: |
All the feature details are now included in the feature comparison table, with every significant feature having its own dedicated column, so each client has to specify whether they support it or not. So the best option for what you describe might be to include an "Other Supported Features" column as the last column, where clients can list any additional features they offer and the rest don't have mention them. And it can come from an "other supported features" array field in the JSON files. But I think for this to work well there needs to be some alignment on what qualifies to get in that column because it could easily lose uniformity and look bad, for example if one client lists lots of minor features, some of which not that relevant anymore, while another lists none. |
topics/index.md
Outdated
@@ -24,6 +24,7 @@ Programming with Valkey | |||
* [Client side caching](client-side-caching.md): How a client can be notified by the server when a key has changed. | |||
* [Keyspace notifications](notifications.md): Get notifications of keyspace events via Pub/Sub. | |||
* [Protocol specification](protocol.md): The client-server protocol, for client authors. | |||
* [Client list](client-list.md): An overview of recommended Valkey clients and their features. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Have not we discussed to change it to client libraries?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's a remnant from when it was in the topics section, It's not supposed to be here anymore at all. will delete this
Signed-off-by: lior sventitzky <[email protected]>
In connection to #164, and as per @zuiderkwast's suggestion, this PR deletes all of the old Redis clients files and leaves the clients folder empty. This is to allow for changing this folder's structure to be `clients/{language}/{client}.json` and adding new json files for the new clients that would serve a clients docs page in the website, as described in #164. Signed-off-by: lior sventitzky <[email protected]>
Looks bad for the site or for the client? |
"latency_based_read_from_replica": false, | ||
"AZ_based_read_from_replica": false, | ||
"client_side_caching": false, | ||
"client_capa_redirect": false, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"client_capa_redirect": false, | |
"client_capa_redirect": true, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added 👍
"github":"https://github.com/valkey-io/valkey-go", | ||
"installation": "go get github.com/valkey-io/valkey-go", | ||
"language":"go", | ||
"package_size": "14.5M", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree remove package_size field, this is what package download sites like maven and pypi should do.
Looks bad both for clients and website IMO, it can look less aesthetic in the table if it's a super long list of features, and also just make the impression that one client has significantly less supported features than another even if it's not the case. But if we're more or less aligned there it can work. Besides that about uniqueness, we can always use the |
Signed-off-by: lior sventitzky <[email protected]>
Signed-off-by: lior sventitzky <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just a few comments on the READMEs. Looks good in general.
Signed-off-by: lior sventitzky <[email protected]>
README.md
Outdated
|
||
For example [clients/python/github.com/valkey-io/valkey-go.json](./clients/python/github.com/valkey-io/valkey-go.json): | ||
For example [clients/python/valkey-go.json](./clients/python/valkey-go.json): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Isn't this link wired?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's weird with the link?
The idea is that you can click on this link on the GitHub web view in this repo, so it is relative to the current directory.
We can remove ./
in the beginning of the link, if this is the weird part?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ah!! Is valkey-go a Python client? 🤣 Maybe it's a Go client.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed, good catch
"repo":"https://github.com/valkey-io/valkey-go", | ||
"installation": "go get github.com/valkey-io/valkey-go", | ||
"language":"go", | ||
"package_size": "14.5M", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also think package_size
should be removed. For Go, package_size
doesn't seem very useful to users. The portion of the library in the final binary depends not only on the library version but also on how the user uses it and compiles the program.
Co-authored-by: Rueian <[email protected]> Signed-off-by: Lior Sventitzky <[email protected]>
Signed-off-by: lior sventitzky <[email protected]>
I think we're also supporting removing the package size field, and if it's also less relevant for some languages, sounds like regardless of the question of whether we want to include version data, package size should be removed. @valkey-io/client-maintainers Pinging everyone once again to address the remaining open issues so we can advance towards merging this -
|
For both 1&2 I support adding the max information, as long as its easy for a user to see if the information is out of date, for example by adding a "entry was last checked & updated on " field. |
@nihohit I suggested earlier that we put the release date of the version described. If we put "entry was last updated", it may even become outdated while a change is waiting to be merged. We'll end up with "last updated 2025-01-28" merged on 2025-02-10 in the commit log. Another way would be to pick the date from git. Not sure if our website generator can do that though. |
clients/php/predis.json
Outdated
"name": "predis", | ||
"description": "A flexible and feature-complete Redis client for PHP.", | ||
"twitter": [ | ||
"JoL1hAHN" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm the new owner for the last couple of years.
"JoL1hAHN" | |
"tillkruss" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So this field is actually a leftover from the old structure of these JSON files, and so it won't be rendered anywhere when this goes to the website. I removed this for all of the other JSON client files as well and left it here by mistake, so I think It's better to just remove this field altogether :)
Co-authored-by: Till Krüss <[email protected]> Signed-off-by: Lior Sventitzky <[email protected]>
Co-authored-by: Till Krüss <[email protected]> Signed-off-by: Lior Sventitzky <[email protected]>
Signed-off-by: lior sventitzky <[email protected]>
3. **`installation`** - an installation command from the most used package manager in the respective language. | ||
4. **`language`** - the programming language in which the library is written. | ||
5. **`package_size`** - the library's unpacked package size, including dependencies. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think that credentials providers integration should also be part of the features.
{ | ||
"name": "predis", | ||
"description": "A flexible and feature-complete Redis client for PHP.", | ||
"repo":"https://github.com/predis/predis", | ||
"installation": "composer require predis/predis", | ||
"language":"php", | ||
"package_size": "2.8M", | ||
"license": "MIT", | ||
"read_from_replica": true, | ||
"smart_backoff_to_prevent_connection_storm": true, | ||
"pubsub_state_restoration": false, | ||
"cluster_scan": false, | ||
"latency_based_read_from_replica": false, | ||
"AZ_based_read_from_replica": false, | ||
"client_side_caching": false, | ||
"client_capa_redirect": false, | ||
"persistent_connection_pool": false | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any change you can add Relay as well?
{
"name": "Relay",
"description": "Next-generation caching layer for Valkey/Redis.",
"repo": "https://github.com/cachewerk/relay",
"installation": "https://relay.so/docs/installation",
"language": "php",
"package_size": "2.5M",
"license": "Proprietary",
"read_from_replica": true,
"smart_backoff_to_prevent_connection_storm": true,
"pubsub_state_restoration": false,
"cluster_scan": false,
"latency_based_read_from_replica": false,
"AZ_based_read_from_replica": false,
"client_side_caching": true,
"client_capa_redirect": false,
"persistent_connection_pool": true
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Proprietary? I'd say no to that. We do open source only.